我工作的一个项目中,我试图用直方图均衡做这样的事情,从这个形象去直方图均衡化问题
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;
我试过pixtot + = imageArray [r] [c];但我得到了一个索引越界异常....那么你也是什么意思与sumc相同的概念错误?只需添加+ =并将我的变量更改为数组值?pixtot应该将图像中的所有像素相加...不是灰度值 – Ignacious
然后,如果要计算像素的总数,而不是像素的总值,则需要“pixtot ++”(当然,使用乘法的方法较短)。 –
好吧即时通讯开始得到这个东西的工作,但是当我运行增强它将图像完全变成黑色......说实话我不知道如果我有一个函数,正确分组灰度值,如CDF函数..我不是确定如何实现它---我需要它来计算所有的灰度值,例如133,然后总计它们,然后检查它们是否小于或等于该槽中的灰度值并运行我的公式.. – Ignacious