我正在开展一个项目,我正在尝试使用直方图均衡来执行类似于此图像的操作
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;