使用Matlab fft2 ifft2 对图像卷积
2016-03-09 10:57
330 查看
笔记。
Matlab的fft2函数可以对矩阵做傅里叶变换,并且可以加参数对矩阵补0.
结果应等于:
填充后的T2:
记:I 表示输入图像(矩阵),
T
表示卷积模板,
FI
表示傅里叶变换后的图像,
FT表示傅里叶变换后的模板,
C表示通过傅里叶变换计算的卷积结果,
VC表示在空域卷积的结果
按matlab的语法就是 VC = conv2( I, T ) 等于C = ifft2(FI.* FT) (不过由于精度问题需要对C结果取整)。
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°。如果模板矩阵对称,则结果相等。相关文章推荐
- 使用Matlab新版本调用deploytool和使用mcc命令
- Matlab中的矩阵运算
- [matlab]代码优化
- matlab之列主元素高斯消去法
- 【转】matlab 字符串处理函数
- 关于matlab sptool中导出滤波器参数的问题
- matlab最小二乘法数据拟合函数详解
- matlab--TLD配置
- matlab中的文件操作
- 小波滤波器的问答
- matlab中 mcc、mbuild和mex命令详解
- MATLAB 图释
- Matlab textread函数详解
- [Matlab+C/C++] 读写二进制文件
- [Matlab+C/C++] 读写二进制文件
- matlab实现相位解包裹
- matlab使用
- Matlab的小技巧
- 保存matlab command window缓冲区中的日志
- Matlab 中绘制模糊隶属度函数