我正在尝试编写一个代码,使用原始的“真实”图像从图像解卷积一个仪器响应函数IRF(也称为点扩散函数,PSF),与此未知函数卷积。原始图像和回旋图像都是灰度图像,它们已经被适当地居中和缩放。真实的图像没有噪声,但另一个确实导致Wiener过滤以在获取IRF时尝试去除噪声。
参数是这样的:
t
:true image
c
:错综复杂的形象
T=fft2(t);
C=fft2(C);
K
是标量值,即噪声与信号之比(或1 /信号与噪声,无论哪种方式适合)
我使用此过滤器进行反卷积的公式是:
L=conj(T)./(T*conj(T)+K)
IRF=L.*C
我试图做的是估计信噪比(未知),以便通过计算上面的论坛,然后计算{{1}的各种值的均方误差来找到理想的K.在K
和0.001
之间。我有以下代码:
0.1
我在网上找到了均方误差的代码,但我相信它的错误原因我得到的是一个矢量,其条目都是相同的值。另外,我在最终图像中得到了绝对的废话,这让我相信噪音仍然存在于数据中。我认为应该如何计算会导致每个人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);
的均方误差。还有另一种计算方法吗?
答案 0 :(得分:1)
在wiener deconvolution L=conj(H)./(H*conj(H)+K);
中,H = fft2(IRF)
是乐器响应。并且解卷积用于在给定模糊图像和PSF的情况下估计“真实”图像。我认为您不能使用该公式来估算IRF
;
代码中的所有Ev
元素都是常量,因为它们只是您的真实图像和复杂图像之间的差异。试图找出K
没有多大意义,因为你需要比较的是估计的IRF和真正的IRF,而后者只是未知。
确定模糊内核有两种可能的方法。
第一个是优化目标函数:
每个像素min(sum([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);
这很简单。
答案 1 :(得分:1)
首先,反卷积方法可用于回答2个问题:
这两种方法都是相同的,因为它们在卷积过程中的作用是对称的:
MeasuredSignal = IRF*OriginalSignal + AdditiveNoise
第二次,看起来就像你要计算的代码的第5行
cv = ifft(T*IRF);
e = uint8(c)-uint8(cv);
否则你没有在计算错误时使用新计算的IRF ......因此是常数误差值。
最后,这就是我不太了解的地方,在我看来,SNR或你的系数K不应该是一个常数,而是根据噪声的类型随频率而变化(例如高斯噪声的高斯形状)。如果你假设白噪声,它确实会不变......