我正在尝试使用 ImageJ 为 8 位灰度图像实现直方图算法。以下是我的代码,无法正常工作。请记住我是初学者。
我的 imageJ 代码应该如何才能正常工作???
for (i = 0; i <= MaxIntensity&& lut[i] == 0; i++) {
min = lut[i+1];
}
for ( i=0; i < 256; ++i )
{
sum += histo[i];
lut[i] = sum;
}
我正在尝试使用 ImageJ 为 8 位灰度图像实现直方图算法。以下是我的代码,无法正常工作。请记住我是初学者。
我的 imageJ 代码应该如何才能正常工作???
for (i = 0; i <= MaxIntensity&& lut[i] == 0; i++) {
min = lut[i+1];
}
for ( i=0; i < 256; ++i )
{
sum += histo[i];
lut[i] = sum;
}
首先,您必须扫描图像以搜索 min/max - 在 OriginalImage 中的 [0..pixelCount] 中搜索,而不是在 lut[] 中搜索。
然后你填充直方图(lut[] 数组,你没有填充它)
然后用 (max - min) * (Original[k] - min) / pixelCount 填充 EqualizedImage[k];如果我没有犯一些错误。
编辑(这里的旧东西)
for() 循环中的“i”肯定超出了“i <= MaxIntensity”(MaxIntensity = 255)的范围。
lut = newArray(256)
...
min = 0;
for (i = 0; i <= MaxIntensity&& lut[i] == 0; i++) {
min = lut[i+1];
}
目前尚不清楚您要使用该代码做什么,但如果您只是在 lut[] 数组中寻找非零最小值,那么为什么不使用它:
min = 0;
for (i = 0; i < MaxIntensity ; i++)
{
if(min > lut[i]) { min = lut[i]; }
}
在原始循环中包含“lut[i] == 0”的原因尚不清楚。