颜色直方图归一化
Posted
技术标签:
【中文标题】颜色直方图归一化【英文标题】:Color Histogram Normalization 【发布时间】:2013-06-25 01:56:57 【问题描述】:我昨天在这里找到的这个线程上问了这个问题: Histogram Normalization.
但是,我尝试使用链接中获得的一些想法对图像执行规范化,并得到以下结果。在这里,我将除黑白像素外的所有像素归一化为 50%。
我使用的公式是:(pixel - min) / (max - min) * 127
pixel = (float)src.at<uchar>(j,i);
if (pixel == 255)
img.at<uchar>(j,i) = pixel;
if (pixel == 0)
img.at<uchar>(j,i) = pixel;
/*if (min == 0 || max == 0 || (max - min == 0))
img.at<uchar>(j,i) = pixel;
else
*/
normal__ = ((pixel - min)/(max - min)) * ( 127);
img.at<uchar>(j,i) = normal__;
//
结果:
RED PIXEL: MIN = 0 MAX = 253
GREEN PIXEL: MIN = 0 MAX = 254
BLUE PIXEL: MIN = 0 MAX = 255
标准化前的图像
使用上述公式标准化后:
现在,我正在确认我的步骤是否正确。谢谢..:)
【问题讨论】:
【参考方案1】:由于声明
normal__ = ((pixel - min)/(max - min)) * ( 127);
img.at<uchar>(j,i) = normal__;
不在 if-else 语句中,它们也适用于黑白像素。可以吗?
【讨论】:
当我将它放在 else 语句中时,它会在某些区域上产生失真的像素。不知道为什么会这样 我猜这是因为只省略了 0 和 255 作为黑白级别。生成的归一化函数不平滑。并非汽车上的所有白色区域都是 255 像素级别。您当前的归一化函数将像素值分布在 0-127 范围内,而图像的正常范围是 0-255。这就是图像较暗的原因。归一化函数通常打算做相反的事情;如果像素在较小的范围内,它将分散在 0-255 之间的值。您可以拍摄低对比度图像,并使用 255 而不是 127。应该可以。 哦,我明白了我的错误。还有一个问题,例如图像,如果对于每个通道 R G B,我得到最小和最大像素值。如果 min = 0 且 Max = 255,则 i 将获得与输入相同的通道。这正常吗? 我尝试了你所说的想法,它适用于低合同图像 如果 min=0 和 max=255,您当前的算法将保持图像不变。这种情况需要更复杂的算法。通过直方图均衡,该算法将沿直方图分布像素。例如,它将尝试获取 0-63 亮度范围内的 25% 的像素。所以即使在这种情况下也会有更好的结果。根据您的需要,您可以改进您的算法。以上是关于颜色直方图归一化的主要内容,如果未能解决你的问题,请参考以下文章