您的位置:首页 > 编程语言 > MATLAB

使用Matlab fft2 ifft2 对图像卷积

2016-03-09 10:57 330 查看
笔记。

Matlab的fft2函数可以对矩阵做傅里叶变换,并且可以加参数对矩阵补0.

T = ones(3);
%对T矩阵补0扩充成5*5,后作傅里叶变换
FT = fft2(T,5,5);


结果应等于:
T2 = ones(3);
%对T2补0
T2(5,5) = 0
FT2 = fft2(T2);


填充后的T2:

T2 =
1     1     1     0     0
1     1     1     0     0
1     1     1     0     0
0     0     0     0     0
0     0     0     0     0


记:I 表示输入图像(矩阵),

T
表示卷积模板,

FI
表示傅里叶变换后的图像,

FT表示傅里叶变换后的模板,

C表示通过傅里叶变换计算的卷积结果,

VC表示在空域卷积的结果

卷积

对图像(二维矩阵)来说空域的卷积等于频域的乘积,
按matlab的语法就是 VC = conv2( I, T ) 等于C = ifft2(FI.* FT) (不过由于精度问题需要对C结果取整)。

%获得一个[1-9]范围随机整数矩阵,大小5*5
I = randi(9, 5, 5);
%一个模板
T = ones(3);
%卷积后输出大小为 size(I)+size(T)-1,对我们的例子是5+3-1=7,因此我们需要对矩阵填充0.
FI = fft2(I, 7, 7);
FT = fft2(T, 7, 7);
CF = FI.*FT;
C = real(ifft2(CF))
%用来验证
VC = conv2(I, T)
C =
2.0000    8.0000   13.0000   19.0000   14.0000    9.0000    1.0000
10.0000   19.0000   25.0000   28.0000   29.0000   23.0000   10.0000
13.0000   28.0000   37.0000   46.0000   42.0000   33.0000   11.0000
16.0000   32.0000   45.0000   44.0000   45.0000   32.0000   17.0000
10.0000   30.0000   44.0000   48.0000   44.0000   30.0000   16.0000
7.0000   21.0000   32.0000   30.0000   31.0000   20.0000   15.0000
2.0000    9.0000   11.0000   13.0000   14.0000   12.0000    8.0000
VC =
2     8    13    19    14     9     1
10    19    25    28    29    23    10
13    28    37    46    42    33    11
16    32    45    44    45    32    17
10    30    44    48    44    30    16
7    21    32    30    31    20    15
2     9    11    13    14    12     8

相关

在空域,卷积和相关的区别是:卷积会先对模板顺时针旋转180°。如果模板矩阵对称,则结果相等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: