从平滑图像估计高斯滤波器的标准差

信息处理 卷积 平滑 去噪
2022-02-10 05:35:47

首先,假设为了平滑图像,我将其与具有标准偏差的高斯函数进行卷积。我现在想知道是否存在从平滑图像σxσyσxσy

其次,为了可能使事情变得更复杂,假设图像像素是从零均值单位方差正态分布(顶部图像)中绘制的,然后如上所述进行卷积(底部图像),可以从平滑估计标准偏差图片?

这是用于生成图像的 MATLAB 代码。我想要实现的是估计标准偏差,在这种情况下是σx=2σy=2

img = randn(128,128);
figure(1); imagesc(img); colormap(gray); axis off; title('Noise image')
nimg = imgaussfilt(img, [2  2]);
figure(2); imagesc(nimg); colormap(gray); axis off; title('Smoothed noise image')

在此处输入图像描述 在此处输入图像描述

2个回答

您可以利用卷积定理:与高斯卷积对应于与频率令 x 为输入信号,y 为输出信号。此外,设 g 为高斯滤波器。σ

y=gx

或者,在频域中(使用大写字母)

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');

程序输出

让我们将您的输入图像视为 x ,将输出图像视为 y ,将 g 视为高斯核。输出图像由高斯核与输入图像卷积形成。在频域中,它将变为乘法。

在频域,

Y(u,v) = H(u,v)X(u,v)

H(u,v) = Y(u,v)/X(u,v)

空间域中的高斯与频域中的高斯相同。

H(u,v)=eD2(u,v)/2Sigma2,您可以从中估计 sigma 的值。