图像二维频谱的理解

OpenCV17(图像二维频谱的理解,傅里叶频谱分析)

原创 2016年09月21日 21:56:41

傅里叶变换的理解参考教程:http://blog.jobbole.com/70549/html

这个已经说得很详细了。数组

 

不过这个说明只是针对一维的傅里叶变换,在图像处理中咱们最多见的仍是二维频谱,二维频谱到底该怎么看呢?如下是个人理解,谢谢某人的帮助。函数

 

1.先看一段MATLAB代码

 

[plain]  view plain  copy
 
  1. I = imread('cell.tif');  
  2. fI = fft2(I);  
  3. sfI = fftshift(fI);  
  4. temp = log(1+abs(sfI));  
  5.   
  6. subplot(2,2,1),imshow(I),title('原图');  
  7. subplot(2,2,2),imshow(fI,[]),title('二维傅里叶变换');  
  8. subplot(2,2,3),imshow(sfI,[]),title('对称移动图像,频谱');  
  9. subplot(2,2,4),imshow(temp,[]),title('对数变换后的频谱');  

 

cell.tif是MATLAB自带的图,结果以下:post

注意第三幅图的中心有一个白点,这是理解的关键。这几幅图的来源,稍后会详细介绍。

 

2.一个概念

咱们知道矩形波能够看做是有无数的不一样相位和幅值的正弦函数组成,相似的,一个任意的平面波也能够当作是特定的某几种正弦波的组合。如图所示spa

(《数字图像处理与机器视觉:Visual C++与Matlab实现》P183).net

(a)图上的“JC”的亮度不一样,将其亮度做为纵坐标,因而获得图(b)。图(b)能够看做是图(c)中的某几个正弦平面波的组合,注意,正弦平面波的相角、幅值、传播方向均可以是不一样的。htm

 

3.推导一个结论

想象有一个正弦平面波(书上原话,有点迷惑人,不是平面,是曲面其实),x向传播,y的正负半轴都是曲面区域。blog

得正弦平面波的方程为下式,w是相位,设相角为零教程

从z轴往下看去,得ip

绕z轴旋转坐标系,得新坐标系(x',y')

注意,这步是为了推倒 x' 方向上的正弦平面波的方程。可知,这时候的正弦平面波方程为

沿z轴旋转 theta 角度 的旋转矩阵是

 

因此得下式(这步计算不明白不要紧,只要知道这个矩阵能够表示两个坐标的转化关系便可,会用就行)

因此就等到,旋转以后的正弦平面波的方程能够表示为

结论!!

其实这一堆只是为找到通常正弦平面波的方程,有什么用呢?有点用。

 

4.和频谱的关系

频谱的中心为低频,外围是高频成分

能够将频谱的中心看作坐标原点,横轴为x轴,纵轴是y轴,创建坐标系。

频谱平面上的坐标(X,Y)的黑白,表示图像是否含有z = sin(Xw + Yw)这个正弦平面波成分,白便是有含有。

 

这里就要再注意一个问题,这里提到的频谱是频谱图的图3,再看一下频谱图,就是那个有圈圈的

是否是有点乱,因此最后咱们来讲明这几张图都是怎么来的。

 

5.频谱图的关系

fft2以后,结果是图2,这是原始的频谱,可是因为计算中,高频在中间,低频在外围,因此很差看。

fftshift以后,作了如下对称变换,将低频调整到中间,高频在外围。注意图3中心的亮点。这表示原图中的低频成分比较多,也就是说图像的灰度变化不大,没有大的梯度值

因为图3的对比度不高,看不清楚,因此才出现了最多见到的频谱,图4

对数变换log(1+abs(XXX)),这样就看的清楚些了。

 

Bingo!

相关文章
相关标签/搜索