颜色直方图归一化

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% 的像素。所以即使在这种情况下也会有更好的结果。根据您的需要,您可以改进您的算法。

以上是关于颜色直方图归一化的主要内容,如果未能解决你的问题,请参考以下文章

matlab中直方图归一化问题

图像灰度直方图归一化 matlab实现

MATLAB——生成归一化直方图

Seaborn 概率直方图 - KDE 归一化

如何自动归一化多个直方图以达到相同的最大值?

创建归一化的直方图并在 Matlab 上使用伽马分布对其进行拟合