VTK低通滤波器

1.理想低通滤波器

低通滤波是将频域图像中的高频部分滤除而保留低频部分。图像的边缘和噪声对应于频域图像中的高频部分,而低通滤波的作用即是减弱这部分的能量,从而达到图像平滑去噪的目的。最简单的低通滤波器是理想低通滤波器,其基本思想是给定一个频率阈值,将高于该阈值的所有部分设置为0,而低于该频率的部分保持不变。这里的“理想”是指该滤波器不能用电子元器件来实现,但是可以通过计算机来模拟。VTK 中定义了理想低通滤波器vtkImageIdealLowPass,下述代码演示了使用该滤波器对图像进行低通滤波的方法(详见随书代码Examples\Chap05\5.6_ IdealLowPassExample.cpp):
 

 
 
  1. vtkSmartPointer<vtkJPEGReader> reader =  
  2. vtkSmartPointer<vtkJPEGReader>::New();  
  3. reader->SetFileName(argv[1]);  
  4. reader->Update();  
  5. vtkSmartPointer<vtkImageFFT> fftFilter =  
  6. vtkSmartPointer<vtkImageFFT>::New();  
  7. fftFilter->SetInputConnection(reader->GetOutputPort());  
  8. fftFilter->Update();  
  9. vtkSmartPointer<vtkImageIdealLowPass> lowPassFilter =  
  10. vtkSmartPointer<vtkImageIdealLowPass>::New();  
  11. lowPassFilter->SetInputConnection(fftFilter->GetOutputPort());  
  12. lowPassFilter->SetXCutOff(0.05);  
  13. lowPassFilter->SetYCutOff(0.05);  
  14. lowPassFilter->Update();  
  15. vtkSmartPointer<vtkImageRFFT> rfftFilter =  
  16. vtkSmartPointer<vtkImageRFFT>::New();  
  17. rfftFilter->SetInputConnection(lowPassFilter->GetOutputPort());  
  18. rfftFilter->Update();  
  19. vtkSmartPointer<vtkImageExtractComponents> ifftExtractReal =  
  20. vtkSmartPointer<vtkImageExtractComponents>::New();  
  21. ifftExtractReal->SetInputConnection(rfftFilter->GetOutputPort());  
  22. ifftExtractReal->SetComponents(0);  
  23. vtkSmartPointer<vtkImageCast> castFilter =  
  24. vtkSmartPointer<vtkImageCast>::New();  
  25. castFilter->SetInputConnection(ifftExtractReal->GetOutputPort());  
  26. castFilter->SetOutputScalarTypeToUnsignedChar();  
  27. castFilter->Update(); 

首先通过vtkImageFFT 将图像转换到频域空间。vtkImageIdealLowPass 对频域图像做理想低通滤波,需要用户设置每个方向的截断频率,相应的设置函数为SetXCutOff()和SetYCutOff()。执行完毕,需要通过vtkImageRFFT 将处理后的频域图像转换成空域图像。需要注意的是,转换后图像的每个像素都是一个复数,需要用vtkImageExtractComponents 将该图像的第一个分量提取出来显示,否则图像不能正确显示。由于傅里叶变换输入和输出的数据类型都是double,为了方便显示,还需将其转换为unsigned char 类型(这里由vtkImageCast 类负责类型转换)。图5-40 为理想低通滤波的效果。从结果看,在过滤掉图像的高频部分后,图像变得模糊,丢失了许多细节,另外还可以看到理想低通滤波后图像会存在一定的振铃效应,这也是理想低通滤波的特点。

2.巴特沃斯低通滤波器

在实际应用中,经常使用的低通滤波器是巴特沃斯滤波器。巴特沃斯滤波器对应的转移函数(可以看作一个系数矩阵)是

其中,D(u,v)表示频域点(u,v)到频域图像原点的距离,D0 为截止频率,当D(u,v) = D0 时,H(u,v)=0.5,即对应的频域能量将为原来的一半。因为巴特沃斯低通滤波器在高低频间的过渡平滑,因此不会出现明显的振铃效应。VTK 中实现巴特沃斯低通滤波器的类是vtkImageButterworthLowPass,代码如下:

 
 
  1. vtkSmartPointer<vtkImageButterworthLowPass> lowPassFilter =  
  2. vtkSmartPointer<vtkImageButterworthLowPass>::New();  
  3. lowPassFilter->SetInputConnection(fftFilter->GetOutputPort());  
  4. lowPassFilter->SetXCutOff(0.05);  
  5. lowPassFilter->SetYCutOff(0.05);  
  6. lowPassFilter->Update(); 

vtkImageButterworthLowPass 的使用方法与理想低通滤波器一样,为了便于比较,在设置X 和Y 方向的截止频率时,应与理想低通滤波器的设置保持一致。图5-41 是相应的运行结果。从结果来看,巴特沃斯低通滤波器产生的图像更为平滑,不会出现振铃现象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值