3

我有一个彩色图像。我需要在其中应用直方图均衡

如果我在以下代码中使用它

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'}, ...

如何解决这个问题?

4

3 回答 3

5

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

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

于 2013-04-23T06:22:02.443 回答
3

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

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

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

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

for ci = 1:size(im,3)
    Test(:,:,ci) = histeq( im(:,:,ci) );
end
于 2013-04-23T06:22:21.267 回答
0

对于简单的方法,试试这个:

im = imread('E:\S1\New\Image1.png');
Test =im(:,:,1); ir=histeq(ir); figure; imshow(ir, 'Border', 'tight');
于 2015-05-21T11:48:27.447 回答