我正在做一个项目,在这个项目中我试图使用直方图均衡来做一些事情,比如从这个图像开始
http://zerocool.is-a-geek.net/wp-content/uploads/2011/12/input-300x200.jpg
“http://zerocool.is-a-geek.net/wp-content/uploads/2011/12/hist_before.png”
到这张图片
http://zerocool.is-a-geek.net/wp-content/uploads/2011/12/output-300x200.jpg
“http://zerocool.is-a-geek.net/wp-content/uploads/2011/12/hist_after.png”
但我似乎无法弄清楚。
这是我的增强图像代码,应该实现相同类型的调整..
public void EnhancedImage (File fileName) {
double sumc = 0;
for(int r = 0; r < array.length; r++){
for(int c = 0; c < array[r].length; c++){
sumc = r+c;
if (sumc <= array[r][c]) {
sumc = array[r][c];
}
newc = Math.round(maxshade * ((double)sumc / pixtot));
array[r][c] = (int) (newc);
if (array[r][c] > 255) {
array[r][c] = 255;
}
}
}
我想使用的算法如下,其中 maxShade 是图像的最大阴影(通常为 255) sumc 是图像中值小于或等于 c 的像素总数,而 pixtot 是像素总数在图片里:
newc := round(maxShade * ((double)sumc / pixtot))
但我不确定我是否做得对……目前我的图像变得非常暗。
任何帮助,将不胜感激!!谢谢。
还有我的pixtot例程:
pixtot = 0;
for(int y = 0; y < imageArray.length; y++)
for(int x = 0; x < imageArray[0].length; x++)
pixtot = x+y;