我从您的帖子中了解到的是,您不喜欢下采样图像上发生的过度模糊。
信号处理理论指出,当您将数字信号下采样倍时,如果信号未将带宽限制为,则可能会发生混叠。 ;M|w|<π/M
下采样的频谱效应使得原始信号频谱的非零部分高于可以重叠范围内的假频率位置,以便它们会创建不属于原始信号的视觉伪影。|w|>π/M−π<w<π
为了避免这种重叠(以避免混叠),正式的方法是应用一个截止频率为且通带增益为 1的低通滤波器。wc=π/M
该过滤器的效果是将图像模糊到在下采样时不会与图像的高频部分有任何显着重叠的程度。另一方面,这最终是一个模糊操作,它会丢弃信号内容(图像的细节)。因此,您的下采样图像会损失质量(就高频细节而言)。
但是,由于将高斯滤波器半径设置为不合适的值,您的代码中的问题是模糊过多。理论上,您需要的是一个在截止频率处具有急剧过渡的理想滤波器,但您的代码中设计的滤波器不仅会产生温和的过渡区域,而且会产生比必要的更低的截止频率。wc=π/M
因此,您可以修改低通滤波器半径,直到获得可接受的下采样图像。
下面是显示高斯滤波器频谱的修改代码,您可以使用它来推断滤波器截止是否太多。
close all; clear all; clc;
I = double(imread('Cameraman.tif'))/255; % Black and Whit eimage in [0-255] range
figure,imshow(I);title('Original Image');
zoom_factor=2;
sigma=0.8*sqrt(zoom_factor-1); % I modified the radius here ???
[M,N,s]=size(I);
f1=-fix(M/2):ceil(M/2)-1;
f2=-fix(N/2):ceil(N/2)-1;
[f2,f1]=meshgrid(f2,f1);
Y=exp(-2*pi*pi*sigma*sigma*((f1/M).^2+(f2/N).^2)); % The BLUR filter
figure,imshow(abs(Y));title('Spectrum of the filter')
If=fft2(I);
If=fftshift(If);
for i=1:1
If(:,:,i)=If(:,:,i).*Y;
end
newI=ifftshift(If);
newI=real(ifft2(newI));
figure,imshow(newI);title('Gaussian Filtered Image')
newI=newI(1:zoom_factor:end,1:zoom_factor:end,:);
figure,imshow(newI);title('filtered and downsampled')
figure, imshow(newI);title('filtered and downsampled image')
figure, imshow(I(1:zoom_factor:end,1:zoom_factor:end));
title('downsampled without filtering')
另一种解决方案是在下采样操作之后使用高通滤波器,通过稍微强调高频细节来改善图像。