【问题标题】:How to use histeq function on color Image?如何在彩色图像上使用 histeq 函数?
【发布时间】:2026-02-20 06:55:01
【问题描述】:

我有一张彩色图片。我需要在其中应用直方图均衡化

如果我在下面的代码中使用它

im = imread('E:\S1\New\Image1.png');
Test = histeq(im);

我收到以下错误

Function HISTEQ expected its first input, I, to be two-dimensional.

Error in ==> histeq at 71
iptcheckinput(a,{'uint8','uint16','double','int16','single'}, ...

如何解决?

【问题讨论】:

    标签: matlab image-processing histogram


    【解决方案1】:

    为了简单的方法,试试这个:

    im = imread('E:\S1\New\Image1.png');
    Test =im(:,:,1); ir=histeq(ir); figure; imshow(ir, 'Border', 'tight');
    

    【讨论】:

      【解决方案2】:

      直方图仅适用于灰度图像。您如何定义颜色的直方图均衡化?
      Hist-eq 尝试通过稍微改变像素的亮度来重新分配灰度值以跨越(尽可能均匀地)整个 0..255 范围。
      如果您希望对颜色执行相同的操作:即均匀地填充整个 RGB 立方体,您会发现自己改变了像素的颜色。也就是说,您最终会看到黄色像素变成棕色。

      你必须清楚地定义你所追求的。

      如果您只想跨越整个强度范围(不影响颜色),您会发现Dan 的解决方案非常有用。

      如果您确实想“填充”整个 RGB 立方体,您可能需要考虑将hiseq 单独应用于图像的每个通道:

      for ci = 1:size(im,3)
          Test(:,:,ci) = histeq( im(:,:,ci) );
      end
      

      【讨论】:

        【解决方案3】:

        我认为最常见的解决方案是将图像转换为HSV colour space,然后将histeq 仅应用于V(即值或强度)通道。

        http://en.wikipedia.org/wiki/Histogram_equalization#Histogram_equalization_of_color_images

        【讨论】:

        • 其实我想用高光谱图像进行直方图均衡。您认为在每个波段上单独应用直方图均衡化与整体应用相同吗?
        • @addee 均衡基本上只是为了让图像更易于人类理解。因此,您可以尝试均衡每个频段或仅均衡价值频段,看看什么更有意义。但是,如果颜色有意义,那么您需要小心保留其含义。你可能仍然会更好地平衡价值通道,因为你会想要保留色调。