gpt4 book ai didi

image-processing - 通过 FFT 正确实现高斯模糊

转载 作者:行者123 更新时间:2023-12-04 13:24:49 30 4
gpt4 key购买 nike

我已经阅读了很多关于高斯模糊和 FFT 的问题,但没有回答如何实现它的步骤(但有诸如“这是你的作业”之类的评论)。我想知道,如何正确填充内核并在内核和图像上使用 FFT 和 IFFT。您能否提供一些伪代码或任何语言(如 Java、Python 等)的实现。如何做到这一点,或者至少提供一些如何理解它的好教程:

1. FFT the image
2. FFT the kernel, padded to the size of the image
3. multiply the two in the frequency domain (equivalent to convolution in the spatial domain)
4. IFFT (inverse FFT) the result

Gaussian blur and FFT 复制的步骤

最佳答案

Matlab 例子。对您来说,这应该是一个不错的起点。

加载图片:

%Blur Demo

%Import image in matlab default image set.
origimage = imread('cameraman.tif');

%Plot image
figure, imagesc(origimage)
axis square
colormap gray
title('Original Image')
set(gca, 'XTick', [], 'YTick', [])

全程:
%Blur Kernel
ksize = 31;
kernel = zeros(ksize);

%Gaussian Blur
s = 3;
m = ksize/2;
[X, Y] = meshgrid(1:ksize);
kernel = (1/(2*pi*s^2))*exp(-((X-m).^2 + (Y-m).^2)/(2*s^2));

%Display Kernel
figure, imagesc(kernel)
axis square
title('Blur Kernel')
colormap gray

%Embed kernel in image that is size of original image
[h, w] = size(origimage);
kernelimage = zeros(h,w);
kernelimage(1:ksize, 1:ksize) = kernel;

%Perform 2D FFTs
fftimage = fft2(double(origimage));
fftkernel = fft2(kernelimage);

%Set all zero values to minimum value
fftkernel(abs(fftkernel)<1e-6) = 1e-6;

%Multiply FFTs
fftblurimage = fftimage.*fftkernel;

%Perform Inverse 2D FFT
blurimage = ifft2(fftblurimage);

%Display Blurred Image
figure, imagesc(blurimage)
axis square
title('Blurred Image')
colormap gray
set(gca, 'XTick', [], 'YTick', [])

前图像:
Before image, unblurred

后图像:
After image, blurred

请注意,因为零填充不是将内核放置在中心,所以您会得到一个偏移量。这个答案解释了包装问题。 gaussian blur with FFT

关于image-processing - 通过 FFT 正确实现高斯模糊,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23720487/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com