如何在彩色图像上使用histeq功能?

时间:2013-04-23 06:14:29

标签: matlab image-processing histogram

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

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

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

如何解决这个问题?

3 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:3)

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

你必须明确定义你的目标。

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

如果您确实要“填充”整个RGB多维数据集,可能需要考虑将hiseq独立应用于图像的每个通道:

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

答案 2 :(得分:0)

简单来说,试试这个:

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