Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 维纳滤波:均方误差问题_Matlab_Image Processing_Filtering - Fatal编程技术网

Matlab 维纳滤波:均方误差问题

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)

我试图编写一个代码,使用原始的“真”图像,从图像中解卷积仪器响应函数IRF(也称为点扩展函数PSF),并与未知函数卷积。原始图像和卷积图像均为灰度图像,已对其进行适当的居中和缩放。真实图像没有噪声,但另一幅图像有噪声,这导致我使用维纳滤波来尝试去除噪声,同时获取IRF

参数如下所示:

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

    这很简单。

    首先,反褶积方法可用于回答两个问题:

  • 你知道PSF/IRF/模糊内核/卷积内核(不管你怎么称呼它),你试图检索原始信号
  • 您知道原始信号并尝试恢复IRF
  • 这两种方法相同,因为它们在卷积过程中的作用是对称的:

    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,这是模糊核估计的部分