<p style="text-align:center"><span style="font-size:24px; background-color:rgb(51,204,255)">频率域图像增强</span></p>
<p><span style="font-size:18px">用傅里叶变换表示的函数特征可以完全通过傅里叶反变换进行重建而不丢失任何信息。</span></p>
<p><span style="font-size:18px"></span></p>
<p style="margin-top:0pt; margin-bottom:0pt; direction:ltr; unicode-bidi:embed; vertical-align:baseline"> <span style="font-family:宋体">吉布斯现象</span><span style="font-family:Calibri">Gibbs phenomenon</span><span style="font-family:宋体">(又叫吉布斯效应):将具有不连续点的周期函数(如矩形脉冲</span><span style="font-family:Calibri">)</span><span style="font-family:宋体">进行傅立叶级数展开后,选取有限项进行合成。当选取的项数越多,在所合成的波形中出现的峰起越靠近原信号的不连续点。当选取的项数很大时,该峰起值趋于一个常数,大约等于总跳变值的</span><span style="font-family:Calibri">9%</span><span style="font-family:宋体">。这种现象称为吉布斯现象。</span></p>
<img alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-bcd5c13f766270592732894e4430b1d4">
<br>
<p><span style="font-size:18px"><br> </span></p>
<p><span style="font-size:18px; background-color:rgb(102,255,255)">一、傅里叶变换</span></p>
<p><span style="font-size:18px"></span></p>
<pre class="blockcode"><code class="language-cpp">l = fft2(x); %快速傅里叶变换
l = fft2(x,m,n);</code></pre>
<br> x为输入图像;m和n分别用于将x的第一和第二维规整到指定的长度。当m和n均为2的整数次幂时算法的执行速度要比m和n均为素数时快。
<p></p>
<p><span style="font-size:18px"></span></p>
<pre class="blockcode"><code class="language-cpp">l1 = abs(l); %计算l的幅度谱
l2 = angle(l); %计算l的相位谱
Y = fftshift(l); %频谱平移
l = ifft2(x); %快速傅里叶逆变换
l =iff2(x,m,n);</code></pre>
<pre class="blockcode"><code class="language-cpp">%% fftshift 对数变换,所应用的图片本身很简单,就只有黑白2种颜色
clc
clear
f = imread('.\images\dipum_images_ch04\Fig0403(a)(image).tif');
imshow(f)
title('原始图像')
imfinfo('.\images\dipum_images_ch04\Fig0403(a)(image).tif');%此处如果用Imfinfo(f)就会报错fft
%没有居中的傅里叶频谱
F=fft2(f);%进行二维快速傅里叶变换,其结果和DFT的一样,只是计算机的计算速度变快了而已,因而叫fft
S=abs(F);%求傅里叶变换后的幅值
figure,subplot(121),imshow(S,[]),title('傅里叶频谱图像1');%title函数一定要放在坐标显示的下一句才有效。
subplot(122),imshow(S),title('傅里叶频谱图像2');%当没有第二个参数时,显示的图像为竖线加一些孤立的黑点
%居中的傅里叶频谱
Fc=fftshift(F);%将频谱图像原点移至图像矩形中间
S1=abs(Fc);
figure,
subplot(121),imshow(S1,[]);%加了第二个参数后显示的图像正常
%使用对数后视觉增强后的傅里叶频谱
S2=log(1+S1);
subplot(122),imshow(S2,[]);</code></pre>原始图像: 傅里叶频谱图:
<p></p>
<p><span style="font-size:18px"><img alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-4ab531298d8206d996828887c2ccfa9c"> <img alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-119fc5534db57bd7f4460f5ffa020e96"><br> <br> 居中频谱和对数后频谱:<br> <img alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-7eedd1d5e081081b8dbfc659c11d63b2"><br> <br> </span></p>
<p><span style="font-size:18px; background-color:rgb(102,255,255)">补充:用fftshift对数变换显示稍微复杂的图片</span></p>
<p><span style="font-size:18px"></span></p>
<pre class="blockcode"><code class="language-cpp">%%%用fftshift对数变换显示稍微复杂的图片
clc
clear
f=imread('.\images\dipum_images_ch04\Fig0409(a)(bld).tif');
imshow(f);
f=double(f);%其实这句不要试过对后面的变换结果也没有影响
F=fft2(f);
Fc=fftshift(F);
S=abs(Fc);
S2=log(1+S);%如果没有这句的话,那么根本看不到细节的图,所以一定要用对数压缩增加对比度
figure,imshow(S2,[])
</code></pre>
<img alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-dc58ce431baefa66c8993cdb7d89ea0e">
<br>
<br>
<p></p>
<p><span style="font-size:18px; background-color:rgb(51,204,255)">二、频域滤波</span></p>
<p><span style="font-size:18px; background-color:rgb(51,204,255)">没有经过0扩充:</span></p>
<p><span style="font-size:18px"></span></p>
<pre class="blockcode"><code class="language-cpp">%%先0扩充再滤波
clc
clear
f=imread('.\images\dipum_images_ch04\Fig0405(a)(square_original).tif');
imshow(f);
[M N]=size(f);
F=fft2(f);%没有经过0扩充直接计算fft
sig=10;%高斯滤波参数
H=lpfilter('gaussian',M,N,sig);
G=H.*F;%加了.号的乘法表示对 |
|