Image matlab中DFT域的图像滤波
我想对图像应用以下过滤器:Image matlab中DFT域的图像滤波,image,matlab,image-processing,filter,dft,Image,Matlab,Image Processing,Filter,Dft,我想对图像应用以下过滤器: h = [1/4 1/16 1/4; 1/16 1/8 1/16; 1/4 1/16 1/4;] 我遵循下面的步骤,但没有得到正确的结果。有人能帮我吗?我找不到我的脚步有什么毛病。代码如下: I = imread('cameraman512.jpg'); h = [1/4 1/16 1/4; 1/16 1/8 1/16; 1/4 1/16 1/4;] %padding image Ip = padarray(I,[512 512],'pos
h = [1/4 1/16 1/4;
1/16 1/8 1/16;
1/4 1/16 1/4;]
我遵循下面的步骤,但没有得到正确的结果。有人能帮我吗?我找不到我的脚步有什么毛病。代码如下:
I = imread('cameraman512.jpg');
h = [1/4 1/16 1/4; 1/16 1/8 1/16; 1/4 1/16 1/4;]
%padding image
Ip = padarray(I,[512 512],'post');
figure();
imshow(Ip);
%padding filter
Hp = padarray(h,[512 512],'post');
figure();
imshow(Hp);
%image fourier
dftI = fft2(I);
figure();
imshow(dftI);
% filter fourier
dftH = fft2(H);
figure();
imshow(dftH);
%shifting image and filter
I = fftshift(Ip);
figure();
imshow(I,[]);
H = fftshift(Hp);
figure();
imshow(H,[]);
G = dftI.*dftH;
figure();
imshow(G);
g=real(ifft2(G));
figure();
imshow(G);
在我看来,你似乎有一点工作要做,以了解你在这项任务中被要求做什么。下面是一个让您开始学习的代码示例 计算图像和滤波器的DFT:
dftI = fft2(I);
dftH = fft2(h, 512, 512);
请注意,fft2
有一个内置的填充特性,这就是512个参数的作用
根据@OliverCharlesworth注释编辑备选填充
dftI = fft2(I, size(I,1)+size(h,1)-1, size(I,2)+size(h,2)-1);
dftH = fft2(h, size(I,1)+size(h,1)-1, size(I,2)+size(h,2)-1);
最终图像必须进行相应的裁剪
如果要显示DFT的大小,在中间使用第0个频率,则可以使用<代码> fftSHIFT/<代码>(我以清晰的对数刻度显示它们):
由于空间域中的卷积相当于频域中的乘法(具有通常的限制、线性等),因此可以对DFT进行乘法:G = dftH .* dftI;
imfilt = ifft2(G);
图像上的结果:
Original Filtered
我必须在我的图像中应用h过滤器,并逐步显示所有图像,但我认为我犯了一个错误,最终图像不是wright oneCheck@macduff OP想要在频域中应用过滤,可能是为了分配。是的,但我必须在频域中过滤我的图像。我必须做零填充、移动图像、计算傅里叶变换等。在您的示例中,有许多步骤没有完成。请注意,这将产生循环卷积(对于干净的滤波,两者都应先填充到N+M-1)。
Original Filtered