1.低通滤波器

低通滤波是将频域图像中的高频部分滤除而通过低频部分。图像的边缘和噪声对应于频域图像中的高频部分,而低频滤波的作用即是减弱这部分作用,从而达到图像平滑去噪的目的。

2.理想低通滤波器

最简单的低通滤波器是理想的滤波器,基本思想是给定一个频率阈值,将高于该与值的所有部分设置为0,而低于该频率的值保持不变。
理想是指滤波器不能用电子元器件来实现,但是可以通过计算来模拟。
在VTK中定义了理想低通滤波器,
步骤:
①、首先读入一副jpg图片,通过vtkImageFFT将图像转换到频域空间。vtkImageIdealLowPass对频域图像做理想低通滤波
②、需要通过SetXCutOff()和SetYCutOff()。
③、执行完成后,需要通过VTKImageRFFT处理后的频域图像张翰至空域图像。
###注意1,转换后的图像的每个像素都是复数,需要vtkIamgeExtractComponents将图像的第一个分量提出出来,否在不能正常显示。
###注意2.由于傅里叶变换输入的数据类型大都是double类型,为了方便显示,还需要将其转换成Unsinged char类型,这里vtkIamgeCast负责类型转换。

#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
#include <vtkSmartPointer.h>
#include <vtkJPEGReader.h>
#include <vtkImageFFT.h>
#include <vtkImageIdealLowPass.h>
#include <vtkImageData.h>
#include <vtkImageRFFT.h>
#include <vtkImageCast.h>
#include <vtkImageExtractComponents.h>
#include <vtkImageActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>int main()
{vtkSmartPointer<vtkJPEGReader> reader =vtkSmartPointer<vtkJPEGReader>::New();reader->SetFileName("data/Lena.jpg");reader->Update();vtkSmartPointer<vtkImageFFT> fftFilter =vtkSmartPointer<vtkImageFFT>::New();fftFilter->SetInputConnection(reader->GetOutputPort());fftFilter->Update();vtkSmartPointer<vtkImageIdealLowPass> lowPassFilter =vtkSmartPointer<vtkImageIdealLowPass>::New();lowPassFilter->SetInputConnection(fftFilter->GetOutputPort());lowPassFilter->SetXCutOff(0.05);lowPassFilter->SetYCutOff(0.05);lowPassFilter->Update();vtkSmartPointer<vtkImageRFFT> rfftFilter =vtkSmartPointer<vtkImageRFFT>::New();rfftFilter->SetInputConnection(lowPassFilter->GetOutputPort());rfftFilter->Update();vtkSmartPointer<vtkImageExtractComponents> ifftExtractReal =vtkSmartPointer<vtkImageExtractComponents>::New();ifftExtractReal->SetInputConnection(rfftFilter->GetOutputPort());ifftExtractReal->SetComponents(0);vtkSmartPointer<vtkImageCast> castFilter =vtkSmartPointer<vtkImageCast>::New();castFilter->SetInputConnection(ifftExtractReal->GetOutputPort());castFilter->SetOutputScalarTypeToUnsignedChar();castFilter->Update();vtkSmartPointer<vtkImageActor> originalActor =vtkSmartPointer<vtkImageActor>::New();originalActor->SetInputData(reader->GetOutput());vtkSmartPointer<vtkImageActor> erodedActor =vtkSmartPointer<vtkImageActor>::New();erodedActor->SetInputData(castFilter->GetOutput());double leftViewport[4] = { 0.0, 0.0, 0.5, 1.0 };double rightViewport[4] = { 0.5, 0.0, 1.0, 1.0 };vtkSmartPointer<vtkRenderer> leftRenderer =vtkSmartPointer<vtkRenderer>::New();leftRenderer->AddActor(originalActor);leftRenderer->ResetCamera();leftRenderer->SetViewport(leftViewport);leftRenderer->SetBackground(1.0, 0, 0);vtkSmartPointer<vtkRenderer> rightRenderer =vtkSmartPointer<vtkRenderer>::New();rightRenderer->AddActor(erodedActor);rightRenderer->SetViewport(rightViewport);rightRenderer->ResetCamera();rightRenderer->SetBackground(1.0, 1.0, 1.0);vtkSmartPointer<vtkRenderWindow> renderWindow =vtkSmartPointer<vtkRenderWindow>::New();renderWindow->AddRenderer(rightRenderer);renderWindow->AddRenderer(leftRenderer);renderWindow->SetSize(640, 320);renderWindow->SetWindowName("Frequency_IdealLowPassFilter");vtkSmartPointer<vtkRenderWindowInteractor> interactor =vtkSmartPointer<vtkRenderWindowInteractor>::New();interactor->SetRenderWindow(renderWindow);renderWindow->Render();interactor->Start();return 0;
}

3.巴特沃斯低通滤波器

在实际经常使用巴特沃斯滤波器。巴特沃斯滤波器对应的转移函数(可以看做是一个系数矩阵)是:
其中D(u,v)表示频域点(u,v)到频域图像原点的距离,称为截止频率,当D(u,v) = 时,H(u,v)=0.5,即对应的频域能量将为原来的一半。因为巴特沃斯低通滤波器在高低频间的过渡平滑,因此不会出现明显的振铃效应。VTK中实现巴特沃斯低通滤波器的类是vtkImageButterworthLowPass.
————————————————
代码:

#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);#include <vtkSmartPointer.h>
#include <vtkJPEGReader.h>
#include <vtkImageFFT.h>
#include <vtkImageButterworthLowPass.h>
#include <vtkImageRFFT.h>
#include <vtkImageExtractComponents.h>
#include <vtkImageCast.h>
#include <vtkImageActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleImage.h>int main()
{vtkSmartPointer<vtkJPEGReader> reader =vtkSmartPointer<vtkJPEGReader>::New();reader->SetFileName("data/Lena.jpg");reader->Update();vtkSmartPointer<vtkImageFFT> fftFilter =vtkSmartPointer<vtkImageFFT>::New();fftFilter->SetInputConnection(reader->GetOutputPort());fftFilter->Update();vtkSmartPointer<vtkImageButterworthLowPass> lowPassFilter =vtkSmartPointer<vtkImageButterworthLowPass>::New();lowPassFilter->SetInputConnection(fftFilter->GetOutputPort());lowPassFilter->SetXCutOff(0.05);lowPassFilter->SetYCutOff(0.05);lowPassFilter->Update();vtkSmartPointer<vtkImageRFFT> rfftFilter =vtkSmartPointer<vtkImageRFFT>::New();rfftFilter->SetInputConnection(lowPassFilter->GetOutputPort());rfftFilter->Update();vtkSmartPointer<vtkImageExtractComponents> ifftExtractReal =vtkSmartPointer<vtkImageExtractComponents>::New();ifftExtractReal->SetInputConnection(rfftFilter->GetOutputPort());ifftExtractReal->SetComponents(0);vtkSmartPointer<vtkImageCast> castFilter =vtkSmartPointer<vtkImageCast>::New();castFilter->SetInputConnection(ifftExtractReal->GetOutputPort());castFilter->SetOutputScalarTypeToUnsignedChar();castFilter->Update();vtkSmartPointer<vtkImageActor> originalActor =vtkSmartPointer<vtkImageActor>::New();originalActor->SetInputData(reader->GetOutput());vtkSmartPointer<vtkImageActor> erodedActor =vtkSmartPointer<vtkImageActor>::New();erodedActor->SetInputData(castFilter->GetOutput());///double leftViewport[4] = { 0.0, 0.0, 0.5, 1.0 };double rightViewport[4] = { 0.5, 0.0, 1.0, 1.0 };vtkSmartPointer<vtkRenderer> leftRenderer =vtkSmartPointer<vtkRenderer>::New();leftRenderer->AddActor(originalActor);leftRenderer->SetViewport(leftViewport);leftRenderer->SetBackground(1.0, 0, 0);leftRenderer->ResetCamera();vtkSmartPointer<vtkRenderer> rightRenderer =vtkSmartPointer<vtkRenderer>::New();rightRenderer->AddActor(erodedActor);rightRenderer->SetViewport(rightViewport);rightRenderer->SetBackground(1.0, 1.0, 1.0);rightRenderer->ResetCamera();//vtkSmartPointer<vtkRenderWindow> rw =vtkSmartPointer<vtkRenderWindow>::New();rw->AddRenderer(leftRenderer);rw->AddRenderer(rightRenderer);rw->SetSize(640, 320);rw->SetWindowName("ButterworthLowPassExample");vtkSmartPointer<vtkRenderWindowInteractor> rwi =vtkSmartPointer<vtkRenderWindowInteractor>::New();vtkSmartPointer<vtkInteractorStyleImage> style =vtkSmartPointer<vtkInteractorStyleImage>::New();rwi->SetInteractorStyle(style);rwi->SetRenderWindow(rw);rwi->Start();return 0;
}

VTK:频域处理——低通滤波(理想+巴特沃斯)相关推荐

  1. 用matlab编程实现数字图像理想低通滤波、高斯低通滤波和巴特沃斯低通滤波去噪算法

    1 理想低通滤波 %理想低通 I = imread('fig.png'); I=rgb2gray(I); figure(1); subplot(221),imshow(I); title('原图像') ...

  2. python理想低通滤波、巴特沃斯低通滤波、高斯低通滤波实现

    代码 代码如下(示例): import numpy as np import cv2 as cv image = cv.imread('2.PNG') # print(image.shape) ima ...

  3. c++ opencv数字图像处理:频率域滤波--低通滤波--理想低通滤波

    文章目录 前言 一.理想低通滤波器(ILPF) 二.代码 三.说明 前言 数字图像处理c++ opencv(VS2019 opencv4.53)持续更新 一.理想低通滤波器(ILPF) 通过设置频率半 ...

  4. Matlab频域高/低通滤波

    建议参考书籍:数字图像处理_第三版 冈萨雷斯 写在前面: 对于给定的低通滤波器的函数表达式,可以得到高通滤波器的函数表达式: 理想高/低通滤波器 理想高通 一个二维理想高通滤波器(IHPF)定义为: ...

  5. matalb 图像处理 低通滤波和高通滤波 (理想,巴特沃斯,高斯 含代码)

    低通滤波和高通滤波 主要类型和公式 主要效果图 各类型的函数代码 最终比较代码 主要类型和公式 1.低通滤波 主要分为理想低通滤波,巴特沃斯低通滤波,高斯低通滤波 理想低通滤波: 其中:对于大小为M* ...

  6. 用理想低通滤波器在频率域实现低通滤波、高通滤波。

    文章目录 理想低通滤波 理想高通滤波 总结: 在matlab中,处理频域图像的过程大概为: 1.对图像进行傅里叶变换. 2.为了方便构建滤波器,将频域图像中心化(即将0频显示在图像中心) 3.设计所需 ...

  7. Matlab对灰度图像的频域进行高通滤波和低通滤波

    1. 要求 对灰度图像进行离散傅里叶变换(Discrete Fourier Transfom, DFT)变换,在频域上分别使用理想的高通和低通滤波器进行滤波,显示滤波后的频域图像,以及逆离散傅里叶变换 ...

  8. 【滤波器学习笔记】一阶RC低通滤波

    一阶RC低通滤波 从模拟到数字 本文整理自网络.<匠人手记>等书籍文章 模拟电路低通滤波时域.频域 软件低通滤波 典型电路 图1 典型RC电路 直流.交流.脉冲信号都可以用它 时域 电容电 ...

  9. 数字图像处理学习笔记5:频率域滤波1(傅里叶频谱图,低通滤波-平滑,高通滤波-锐化)

    文章目录 前言 一.傅里叶变换:傅里叶频谱图 二.低通滤波 1.理想低通滤波 2.布特沃斯低通滤波 3.高斯低通滤波 4.小结 三.高通滤波 1.理想高通滤波 2.布特沃斯高通滤波 3.高斯高通滤波 ...

最新文章

  1. Unable to locate package update
  2. oracle 12.1的那些坑
  3. 安装hadoop-2.3.0-cdh5.1.2全过程
  4. run spark pi_Spark Run本地设计模式
  5. WinXP——如何重装XP系统
  6. 计算机文化基础在线作业答案,地大《计算机文化基础》在线作业一答案.doc
  7. matlab 数字字母,MATLAB读取txt(包含字母和数字)
  8. poj 1269 题解
  9. 13. 永无止境:网站的伸缩性架构
  10. Cadence Orcad Capture属性窗口转置的方法图文教程
  11. 2021年高压电工考试内容及高压电工考试报名
  12. C语言旅途之用for循环与break求最大素数(质数)
  13. pycharm主题背景图片设置
  14. 掌握计算机基础知识的必要性,浅谈高校开展面向学科门类的计算机基础课程的必要性...
  15. -O1 -O2 -O3 优化的原理是什么?
  16. 自写七言绝句三首,外加离职学习 ——彩虹国秘书长
  17. 2023前端面试题------JS 面试题(2) es6
  18. JavaScript 虚拟键盘:Mindfusion JavaScript Keyboard
  19. VR游戏设计之三大特性
  20. 想做一个完美的健身训练计划,你须要知道什么?

热门文章

  1. python集合为什么不能用下标运算_Python的Set操作,python,集合
  2. 儿童学编程的原因以及方法
  3. 拼图、jquery拼图、javascript拼图
  4. 局域网怎么查看单位摄像头_简单易用,夜里看的更清楚,360新品水滴摄像头夜视版实测...
  5. 【C】阶乘后面0的数量
  6. Qt调用exit()、quit()不生效问题
  7. 入职第一天,HR拿了一个橙子进门说:你的学历不是统招本科,不符合公司要求,给你个橘子,走吧!...
  8. Java重载,顺序不同也算重载
  9. Java 的上溯造型和下溯造型以及举例,以及判断参数等指向的类
  10. redis 基础教程