MATLAB中的直方图均衡化帮助

3

我的代码如下:

G= histeq(imread('F:\Thesis\images\image1.tif'));
figure,imshow(G);

我收到的错误信息如下,但我不确定出现这个错误的原因:
Error using histeq
Expected input number 1, I, to be two-dimensional.

Error in histeq (line 68)
validateattributes(a,{'uint8','uint16','double','int16','single'}, ...

Error in testFile1 (line 8)
G= histeq(imread('F:\Thesis\images\image1.tif'));

很明显,你的图像不是二维的,即灰度图像。 - beaker
1个回答

3
您的图像很可能是彩色的。 histeq 只适用于灰度图像。根据您想要做什么,有三个可供选择的选项。您可以将图像转换为灰度图像,也可以单独直方图均衡化每个通道,或者更具感知性的方法是将图像转换为HSV颜色空间,直方图均衡化V或Value分量,然后转换回RGB。对于彩色图像,我倾向于最后一种方法。因此,其中一种方法将是增强的灰度图像,另外两种方法将是增强的彩色图像。

选项#1-转换为灰度,然后均衡化

G = imread('F:\Thesis\images\image1.tif');
G = histeq(rgb2gray(G));
figure; imshow(G);

使用rgb2gray将图像转换为灰度图像,然后进行图像均衡处理。

选项#2 - 逐个通道均衡化

G = imread('F:\Thesis\images\image1.tif');
for i = 1 : size(G, 3)
    G(:,:,i) = histeq(G(:,:,i));
end
figure; imshow(G);

循环遍历每个通道并进行均衡化。

选项 #3 - 转换为HSV,对V通道进行直方图均衡化,然后转换回来

G = imread('F:\Thesis\images\images1.tif');
Gh = rgb2hsv(G);
Gh(:,:,3) = histeq(Gh(:,:,3));
G = im2uint8(hsv2rgb(Gh));
figure; imshow(G);

使用rgb2hsv函数将彩色图像转换为HSV格式。然后在V或Value通道上使用直方图均衡化,再使用hsv2rgb将图像从HSV转回RGB格式。请注意,hsv2rgb的输出将是双精度类型的图像,因此假设原始输入图像为uint8,请使用im2uint8函数将其从double转换回uint8

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接