Algorithms, Part II - Week 2 - Seam Carving
这是一个PS里的功能,删去图片中信息量较小的像素,实现改变图片长宽比而不发生扭曲


是否也可以做一个生成新像素的程序呢
分析
分三步
- 计算每个像素能量
- 找出最小能量像素
- 移除最小能量像素
能量计算
这点作业写的很详细,一个叫双梯度能量的函数可供计算
对于像素
其中
并且规定边缘像素能量为1000
寻找最小能量
按照作业思路,实现一个垂直寻找方法和一个倒置方法,这样一来水平寻找方法就是先倒置进行垂直寻找再倒置回来
移除最小能量
同寻找方法思路,实现一个水平移除方法和一个倒置方法
这里要同时移除 color 数据
输出图片
不能每移除一次像素就生成一次图片,可以在构造函数获取Color类型的数据,在移除能量的时候一并移除相关Color,最后才生成图片。
写的时候发现不能用泛型数组真的迷茫,好在RGB可以直接用整形存储,再写一个把 int 转成 RGB 的函数就行
private Color getRGB(int rgb) {
return new Color((rgb >> 16) & 0xFF, (rgb >> 8) & 0xFF, rgb & 0xFF);
}
参考
http://coursera.cs.princeton.edu/algs4/assignments/seam.html
http://coursera.cs.princeton.edu/algs4/checklists/seam.html
http://www.jianshu.com/p/24cf792dbef8
https://github.com/nastra/AlgorithmsPartII-Princeton/blob/master/src/SeamCarver.java