直方图均衡有助于MATLAB

时间:2017-08-18 00:27:18

标签: image matlab image-processing image-conversion

我的代码如下所示:

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'));

1 个答案:

答案 0 :(得分: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的输出将为double类型图像,因此假设原始输入图像为uint8,请使用im2uint8函数从{{1}转换}回到double