同态滤波用于彩色图像的图像恢复

时间:2014-07-10 05:57:29

标签: matlab

任何人都可以帮我在matlab中的彩色图像上应用同态滤镜吗? 我知道灰度图像的同态滤波,但彩色图像变得越来越难。

I = imread('E:\degraded images\village.jpg');
imshow(I)

%I am using a colored image

I = im2double(I);
I = log(1 + I);
M = 2*size(I,1) + 1;
N = 2*size(I,2) + 1;
sigma = 10;
[X, Y] = meshgrid(1:N,1:M);
centerX = ceil(N/2);
centerY = ceil(M/2);
gaussianNumerator = (X - centerX).^2 + (Y - centerY).^2;
H = exp(-gaussianNumerator./(2*sigma.^2));
H = 1 - H;

imshow(H,'InitialMagnification',25)

H = fftshift(H);
If = fft2(I, M, N);
Iout = real(ifft2(repmat( H, [1, 1, 3 ] ) .* If));
Iout = Iout(1:size(I,1),1:size(I,2));

Ihmf = exp(Iout) - 1;
imshowpair(I, Ihmf, 'montage');

最后一个imshowpair不适用于double数据类型。如果我将其转换为灰色图像,那么将灰色图像转换为彩色图像将存在另一个问题。

1 个答案:

答案 0 :(得分:1)

您正在将trucolor图像处理为三个独立的通道,但之后只选择指数和imshowpair的第一个(红色)。

替换此行:

Iout = Iout(1:size(I,1),1:size(I,2));

Iout = Iout(1:size(I,1),1:size(I,2),:);

保留所有三个颜色通道。

根据评论中的错误消息进行了更新:

根据评论中显示的错误消息imshowpair无法正常工作,因为您的MATLAB版本(R2010a)无法使用,它已被添加到R2012a的图像处理工具箱中。请按照@rayryeng的建议使用此行:

imshow(cat(2,I,Ihmf));