您可以利用卷积定理:与高斯卷积对应于与频率令 x 为输入信号,y 为输出信号。此外,设 g 为高斯滤波器。σ
y=g∗x
或者,在频域中(使用大写字母)
Y=GX
因此,如果 Y 和 X 都已知,则可以执行
来获得高斯内核。但是,由于边界条件等原因,这不会产生完美的内核。您必须对其拟合高斯函数才能获得其标准偏差。
G=Y/X
此外,如果您不了解输入信号,但知道其白噪声,您还可以在输出的 FFT 上拟合高斯曲线(因为输入是白噪声,因此是平坦的):
N = 16*128;
img = randn(N,N);
s = 2;
G = fspecial('gaussian',[25 25],s);
Ig = imfilter(img,G,'replicate');
subplot(3,2,1);
imagesc(img);colormap(gray); axis off; title('Noise image')
subplot(3,2,2);
imagesc(Ig);colormap(gray); axis off; title('filtered image')
% Perform FFT
Img = fft2(img);
GImg = fft2(Ig);
subplot(3,2,3);
imagesc(abs(Img));
subplot(3,2,4)
imagesc(abs(GImg));
subplot(3,2,5);
fy = -N/2:(N/2-1);
hold off;
plot(fy, cumsum(fftshift(abs(GImg(:,1)))));
hold on;
plot(fy, normcdf(fy, 0, N/(2*pi*s))*sum(abs(GImg(:,1))), 'r');
hold off;
subplot(3,2,6);
div = abs(GImg ./ Img);
plot(fftshift(abs(div(1,:))));
title('Division of known input with output');