Advertisement

医学图像处理——频域处理

阅读量:

上一期:医学图像处理——非线性空间滤波器

“之前我们做的处理中都是直接在f(x,y)坐标空间中所做的处理,今天我们就开始接触用傅里叶变换将图像转换到其频域来进行处理!”

二维离散傅里叶变换

由于傅里叶变换的知识体系过于庞大,我们这里只是给出二维离散傅里叶变换的正变换和逆变换的公式:

从f(x,y)坐标空间到其频域(正变换):

其中u=0,1,2,...,M-1和v=0,1,2,...,N-1。由u=0, 1,2..., M- 1和v=0,1,2,., N- 1定义的M x N矩形区域常称为频率矩形。显然,频率矩形的大小与输人图像的大小相同。

从频域空间到f(x,y)坐标空间(逆变换):

其中x=0,1,2,.,M- 1和y=0,1.2..,N-1。因此,给定F (u, v),我们就可借助于逆DFT(离散傅里叶变换)得到f(x,y)。在这个等式中,F (u, v)的值有时称为傅里叶系数。

在MATLAB中计算并可视化二维DFT

一般我们用fft2函数来进行M*N图像数组的傅里叶变换。

F=fft2(f);

傅里叶频谱可以使用函数abs来获得:

该函数计算数组的每一个元素的幅度(实部和虚部平方和的平方根)。通过显示频谱的图像来进行可视化分析是频域处理的一个重要方面。例如,考虑一幅简单图像f。我们计算它的傅里叶变换并使用如下步骤来显示其频谱: .

复制代码
 f=imread("Fig0404(b).tif");

    
  
    
 F=fft2(f);
    
  
    
 S=abs(F);
    
  
    
 figure;
    
  
    
 subplot(3,2,1);
    
  
    
 imshow(f);
    
  
    
 subplot(3,2,2);
    
  
    
 imshow(S,[]);
    
  
    
 Fc=fftshift(F);
    
  
    
 subplot(3,2,3);
    
  
    
 imshow(abs(Fc),[ ]);
    
  
    
 S2=log(1+abs(Fc));
    
  
    
 subplot(3,2,4);
    
  
    
 imshow(S2,[]);
    
  
    
 f1=real(ifft2(F));
    
  
    
 subplot(3,2,5);
    
  
    
 imshow(f1);

在最开始我们就使用了如下的语句计算出了图像的频谱。

但此时的图频谱的图像由于周期性的原因其白点集中在四个角上,所以我们需要用如下语句进行位置调整一下就是正方形平分四块将四个角组在一块。这里的原因涉及到傅里叶变换周期性问题,感兴趣的可以下去查一下相关资料推算一下哟!

使用上句就可以达到调整的效果了!

虽然该移动像我们期望的那样完成了,但该频谱中值的动态范围(0到204000)与8比特显示(此时中心处的明亮值占支配地位)相比要大得多。所以我们可以使用对数变换来处理该问题。因而,命令

变换之后就得到图4了。

最后再用傅里叶逆变换得到原图。

注意为了防止计算出的有虚部(一般实际输出都会有很小的虚数分量),我们用real取其实部来显示。

这样一解释相信那段代码就很明了了!

今天的介绍就到这里啦!

内容很简单,但自己尝试一下会觉得很有意思哟,快动手试试吧!

更多干货请关注公众微信号:医电小白的进阶之路

全部评论 (0)

还没有任何评论哟~