Matlab 维纳滤波:均方误差问题
我试图编写一个代码,使用原始的“真”图像,从图像中解卷积仪器响应函数IRF(也称为点扩展函数PSF),并与未知函数卷积。原始图像和卷积图像均为灰度图像,已对其进行适当的居中和缩放。真实图像没有噪声,但另一幅图像有噪声,这导致我使用维纳滤波来尝试去除噪声,同时获取IRF 参数如下所示:Matlab 维纳滤波:均方误差问题,matlab,image-processing,filtering,Matlab,Image Processing,Filtering,我试图编写一个代码,使用原始的“真”图像,从图像中解卷积仪器响应函数IRF(也称为点扩展函数PSF),并与未知函数卷积。原始图像和卷积图像均为灰度图像,已对其进行适当的居中和缩放。真实图像没有噪声,但另一幅图像有噪声,这导致我使用维纳滤波来尝试去除噪声,同时获取IRF 参数如下所示: t:真实图像 c:卷积图像 T=fft2(t); C=fft2(C); K是标量值,即噪声信号比(或1/信号噪声,以适合的方式) 我发现使用此过滤器进行反褶积的公式为: L=conj(T)./(T*conj(T)
t
:真实图像
c
:卷积图像
T=fft2(t);
C=fft2(C);
K
是标量值,即噪声信号比(或1/信号噪声,以适合的方式)
我发现使用此过滤器进行反褶积的公式为:
L=conj(T)./(T*conj(T)+K)
IRF=L.*C
我试图做的是估计信噪比(未知),通过计算上述公式,然后计算K
在0.001
和0.1
之间的各种值的均方误差,找到理想的K。我有以下代码:
K=linspace(0.001,0.1,100);
for i=1:length(K);
L=conj(T)./(T*conj(T)+K(i));
IRF=L.*C;
Cv=uint8(ifft2(C));
%Mean Square Error is Here:
e=uint8(t)-Cv;
Ev(i)=mean(e(:))^2;
end
[minErrorValue minErrorPos]=min(Ev);
idealK=K(minErrorPos);
L=conj(T)./(T*conj(T)+idealK);
IRF=L.*C;
IRFfinal=ifft2(IRF);
我在网上找到了均方误差的代码,但我相信它是错误的,因为我得到的是一个向量,它的条目都是相同的值。另外,在我的最终图像中,我得到了绝对的胡说八道,这让我相信噪声仍然存在于数据中。我认为应该如何计算会导致每个K(I)
的均方误差。有没有其他方法来计算这个
L=conj(H)/(H*conj(H)+K)代码>,H=fft2(IRF)
是仪器响应。在给定模糊图像和PSF的情况下,使用反卷积估计“真实”图像。我认为你不能用这个公式来估计IRF
Ev
元素都是常量,因为它们只是真实图像和复杂图像之间的差异。试图找出K
没有多大意义,因为你需要比较的是估计的内部收益率和真实的内部收益率,后者只是未知而已有两种可能的方法来确定模糊核 第一个是优化目标函数:
min(和([c(x,y)-IRF(x,y)*t(x,y)]^2)+lambda*sum(IRF(x,y)^2)
用于每个像素(x,y)
,其中正则化项用于约束模糊核的范数
你有:
gradient_pixel(x,y) = -[c(x,y) - IRF(x,y)*t(x,y)]*t(x,y) + lambda*IRF(x,y);
IRF(x,y) = IRF(x,y) - eta * gradient_pixel(x,y);
迭代估计IRF
第二种方法是使用互相关,假设IRF
的大小是sIRF
:
t1 = im2col(t, sIRF, 'sliding')';
IRF1 = t1 \ c(:);
IRF = rot90(reshape(IRF1, sIRF), 2);
这很简单。首先,反褶积方法可用于回答两个问题:
MeasuredSignal = IRF*OriginalSignal + AdditiveNoise
第二个,它看起来像是您要计算的代码的第5行
cv = ifft(T*IRF);
e = uint8(c)-uint8(cv);
否则,在计算误差时不使用新计算的IRF…因此为常数误差值
最后,这就是我不太了解的地方,在我看来,SNR或系数K不应该是常数,而是根据噪声类型随频率变化(例如高斯噪声的高斯形状)。尽管假设白噪声是恒定的…这是我作为论文的一部分所做的理论工作。我使用了一个无噪声维纳滤波器(逆滤波器)来计算原始图像的无噪声卷积图像的IRF。在您的代码中,Lambda和eta代表什么?模糊内核就是PSF吗?很抱歉,我对Matlab和这种数学风格还不熟悉。是否有一个外部参考对这种事情有帮助?我搜索了模糊核估计,但没有发现lambda是一个正则化因子,通常小于1:0.1,0.01,…,eta是更新率,通常使用0.5。是的,模糊内核是PSF。也许你可以尝试方法2,它相当于直接应用C./T,但是对于许多小的块,每个块的大小都与模糊核的大小相同,因此问题会转化为一个过度确定的矩阵方程。一篇参考文献:请注意2.1.1,这是模糊核估计的部分