任何人都可以帮我在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数据类型。如果我将其转换为灰色图像,那么将灰色图像转换为彩色图像将存在另一个问题。
答案 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));