小编Sea*_*son的帖子

在Matlab问题中使用FFT进行二维反卷积

我在matlab中使用2D高斯函数创建了一个图像,我也在matlab中定义了这个图像,现在我试图对结果矩阵进行去卷积,看看是否使用fft2和ifft2命令得到了2D高斯函数.但是我得到的矩阵不正确(据我所知).这是我到目前为止所做的代码:

%code for input image(img)[300x300 array]

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);
Run Code Online (Sandbox Code Playgroud)

二维高斯函数的%代码,c = 0 sig = 1/64(Z)[300x300数组]

x = linspace(-3,3,300);
y = x';
[X Y] = meshgrid(x,y);
Z = exp(-((X.^2)+(Y.^2))/(2*1/64));
Run Code Online (Sandbox Code Playgroud)

使用Z(C)[599x599数组]进行img二维卷积的%代码

C = conv2(img,Z);
Run Code Online (Sandbox Code Playgroud)

%我已经使用img和C的横截面轮廓矢量测试了这个卷积是正确的,得到的xy图是我对卷积的期望.

根据我对卷积的了解,该算法在傅里叶空间中作为乘法器,因此通过我的输入(im​​g)除以输出的傅立叶变换(旋转图像),我应该得到点扩散函数(Z - 2D高斯函数) )通过除法将逆傅立叶变换应用于该结果之后.

尝试2D反卷积的%代码

Fimg = fft2(img,599,599);
Run Code Online (Sandbox Code Playgroud)

添加%零填充以将结果增加到599x599阵列

FC = fft2(C);
R = FC/Fimg;
Run Code Online (Sandbox Code Playgroud)

%我现在得到这个错误提示:警告:矩阵接近单数或严重缩放.结果可能不准确.RCOND = 2.551432e-22

iFR = ifft2(R);
Run Code Online (Sandbox Code Playgroud)

我期待iFR接近Z,但我得到了完全不同的东西.它可能是具有复杂值的Z的近似值,但我似乎无法检查它,因为我不知道如何在matlab中绘制3D复杂矩阵.所以,如果有人能告诉我我的答案是正确还是不正确以及如何让这种去卷积起作用?我将不胜感激.

arrays matlab fft convolution ifft

5
推荐指数
1
解决办法
7117
查看次数

标签 统计

arrays ×1

convolution ×1

fft ×1

ifft ×1

matlab ×1