👨🎓 博主简介:博士研究生
🔬 超级学长:超级学长@实验室(提供各种程序开发、实验复现与论文指导)
📧 个人邮箱:easy_optics@126.com
💬 个人微信:easy_optics
🐧 个人企鹅:754357517
摘要
本博文介绍了傅里叶变换可用于分析图像相关性并被称为模板匹配,还提到二维傅里叶逆变换在 MATLAB 中的应用;描述了通过傅里叶变换和快速卷积运算对包含字母 “a” 的图像与 text.png 图像进行相关运算以定位字母 “a” 的方法。给出了相关Matlab源程序。
一、二维离散傅里叶变换定义
二维离散傅里叶变换的定义为:
Y p + 1 , q + 1 = ∑ j = 0 m − 1 ∑ k = 0 n − 1 ω m j p ω n k q X j + 1 , k + 1 ω m = e − 2 π i m ω n = e − 2 π i n \begin{aligned}&Y_{p+1,q+1}=\sum_{j=0}^{m-1}\sum_{k=0}^{n-1}\omega_m^{jp}\omega_n^{kq}X_{j+1,k+1}\\&\omega_{m}=\mathrm{e}^{-\frac{2\pi\mathrm{i}}m}\\&\omega_{n}=\mathrm{e}^{-\frac{2\pi\mathrm{i}}n}\end{aligned} Yp+1,q+1=j=0∑m−1k=0∑n−1ωmjpωnkqXj+1,k+1ωm=e−m2πiωn=e−n2πi
对于二维离散傅里叶变换,MATLAB 提供了 fft2 函数实现。函数的调用格式为:
Y = f f f 2 ( X ) Y= fff2(X) Y=fff2(X)
X为二维信号; Y为返回与X同维的数组。
二、实例演示
2.1 图像fft示例一

上述示例的Matlab代码如下所示:
P = peaks(20);
X = repmat(P,[5 10]);
subplot(1,2,1);imagesc(X)
title('原始图像');
Y = fft2(X);
subplot(1,2,2);imagesc(abs(fftshift(Y)))
title('频域');
2.2 图像相关性分析
傅里叶变换还能够用来分析两幅图像的相关性,相关性可以用来确定一幅图像的特征,在这个意义下,相关性通常被称为模板匹配。接着介绍一个二维傅里叶逆变换在MATLAB中的应用
将包含字母“a”的图像与text.png图像进行相关运算,也就是首先将字母a和图像text.png进行傅里叶变换,然后快速卷积计算字母a和图像text.png的卷积(其结果如图2(c)所示),提取卷积运算的峰值,如图 2(d)所示的白色亮点,即得到在图像 text.png 中对字母 “a” 定位的结果。

Matlab源程序如下所示:
bw=imread('text.png');
%从图像中抽取字母a的图像
a=bw(32:45,88:98);
subplot(2,2,1);imshow(bw);
xlabel('(a)原始图像');
subplot(2,2,2);imshow(a);
xlabel('(b)显示“a”图');
C=real(ifft2(fft2(bw).*fft2(rot90(a,2),256,256))); % 卷积
subplot(2,2,3);imshow(C,[]);
xlabel('(c)定位图');
%选择一个略小于C中最大值的值作为阈值
max(C(:));
thresh=60;
subplot(2,2,4);imshow(C>thresh); %显示像素值超过阈值的点
xlabel('(d)提取“a”图');
三、结论
博主简介:擅长智能优化算法、信号处理、图像处理、机器视觉、深度学习、神经网络等领域Matlab仿真以及实验数据分析等,matlab代码问题、商业合作、课题选题与科研指导等均可私信交流。

435

被折叠的 条评论
为什么被折叠?



