我用在Matlab中定义的2D高斯函数对在matlab中创建的图像进行了卷积运算,现在我试图对卷积矩阵进行反卷积,以查看是否可以使用fft2和ifft2命令将2D高斯函数返回。但是,据我所知矩阵是不正确的(据我所知)。这是到目前为止我所做的代码:
输入图像的百分比代码(img)[300x300阵列]
N = 100;
t = linspace(0,2*pi,50);
r = (N-10)/2;
circle = poly2mask(r*cos(t)+N/2+0.5, r*sin(t)+N/2+0.5,N,N);
img = repmat(circle,3,3);
c = 0 sig = 1/64(Z)的2D高斯函数的%代码[300x300数组]
x = linspace(-3,3,300);
y = x';
[X Y] = meshgrid(x,y);
Z = exp(-((X.^2)+(Y.^2))/(2*1/64));
使用Z(C)[599x599数组]进行img的2D卷积的%代码
C = conv2(img,Z);
%我已经使用img和C的截面轮廓矢量测试了这种卷积是正确的,并且得到的xy图是我期望的卷积。
%从我对卷积的了解来看,该算法在傅立叶空间中起乘法器的作用,因此通过将输出(卷积图像)的傅立叶变换除以我的输入(img),我应该得到点扩散函数(Z-2D高斯函数) ),然后通过除法将傅里叶逆变换应用于此结果。
尝试进行2D反卷积的代码百分比
Fimg = fft2(img,599,599);
添加了%零填充以将结果增加到599x599阵列
FC = fft2(C);
R = FC/Fimg;
现在,我得到以下错误提示:警告:矩阵接近奇异或缩放错误。结果可能不正确。RCOND = 2.551432e-22
iFR = ifft2(R);
我期望iFR接近Z,但我得到的是完全不同的东西。它可能是Z与复数值的近似值,但由于我不知道如何在Matlab中绘制3D复数矩阵,因此我似乎无法对其进行检查。因此,如果有人可以告诉我我的答案是正确还是错误,以及如何使这种解卷积起作用?我将不胜感激。
R = FC/Fimg
需要成为R = FC./Fimg;
您需要按元素进行划分。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句