当前位置: 首页 > news >正文

ITK-高斯滤波

作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

高斯滤波原理

       高斯滤波(Gaussian Blur)是数字图像处理中常见的一种平滑滤波器,旨在通过模糊处理来减少图像中的噪声或细节。它基于高斯函数(Gaussian function),模拟了自然界中模糊的物理现象,如相机失焦、运动模糊等。

       它的数学表达式:

G(x, y)=\frac{1}{2 \pi \sigma^{2}} e^{-\frac{x^{2}+y^{2}}{2 \sigma^{2}}}

       其中G(x, y)是在坐标(x,y)处的高斯权重值,\sigma是高斯核的标准差,它决定了模糊的强度。较大的\sigma值会产生更强的模糊效果。

       高斯模糊是通过用这个高斯核对图像进行卷积操作来实现的。高斯核的值决定了每个像素周围邻域像素的权重,离中心越远的像素权重越小。它可以让图像变得更加平滑,去除细小的噪声。与简单的均值滤波器不同,高斯模糊会更加自然地保留图像的边缘和结构,不会造成突兀的平滑过渡。它被广泛应用于各种场景,比如:

  • 图像去噪:减少随机噪声对图像的影响。
  • 预处理:在执行边缘检测等操作之前,可以通过高斯模糊来消除噪声,减少误检。
  • 图像效果:高斯模糊还常用于生成背景模糊、柔化图像等效果。

       相比其他滤波器(如均值滤波器或中值滤波器),高斯模糊的特点是:

  • 平滑效果更自然:高斯模糊遵循正态分布,因此对图像细节的模糊处理更加平滑和自然。
  • 权重分布考虑空间距离:高斯模糊根据空间距离来调整像素的权重,而均值滤波器只是对邻域像素做简单平均。
  • 更适合处理噪声:在一些有较多噪声的图像中,高斯模糊能较好地保留图像主要结构,同时去除随机噪声。

       高斯模糊滤波器是图像处理中的一个重要工具,通过调整方差,你可以灵活控制图像的模糊程度,既适用于去噪,也适用于制造柔化效果。ITK中的高斯模糊滤波器简单易用,可以很好地处理图像平滑和噪声问题。

环境准备

参见:Windows下用CMake编译ITK及配置测试_itk配置-CSDN博客

功能解析

1.引入必要的头文件:

#include <itkImage.h>
#include <itkImageFileReader.h>
#include <itkImageFileWriter.h>
#include <itkDiscreteGaussianImageFilter.h>
#include <itkRescaleIntensityImageFilter.h>
#include <itkJPEGImageIOFactory.h>
#include <itkCastImageFilter.h>

2.初始化图像类型和读写器:

// 定义图像类型
typedef itk::Image<unsigned char, 2> CharImageType;
typedef itk::Image<float, 2> FloatImageType;
typedef itk::ImageFileReader<CharImageType> ReaderType;
typedef itk::ImageFileWriter<CharImageType> WriterType;
// 注册JPEG格式支持
itk::JPEGImageIOFactory::RegisterOneFactory();
// 创建读取器和写入器
ReaderType::Pointer reader = ReaderType::New();
WriterType::Pointer writer = WriterType::New();

3.设置文件名:

// 设置要读取和写入的文件
reader->SetFileName("test.jpg");
writer->SetFileName("gaussian_output.jpg");

4.类型转换:

// 将unsigned char类型转换为float类型的图像
typedef itk::CastImageFilter<CharImageType, FloatImageType> CastFilterType;
CastFilterType::Pointer castfilter = CastFilterType::New();
castfilter->SetInput(reader->GetOutput());

5.创建高斯滤波器,并配置参数:

// 创建高斯模糊滤波器
typedef itk::DiscreteGaussianImageFilter<FloatImageType, FloatImageType> GaussianFilterType;
GaussianFilterType::Pointer gaussianFilter = GaussianFilterType::New();
gaussianFilter->SetInput(castfilter->GetOutput());
// 设置高斯模糊的方差,控制模糊程度
gaussianFilter->SetVariance(2.0);  // 方差越大,模糊程度越高

6.类型转换:

// 将浮点图像转换回unsigned char类型
typedef itk::RescaleIntensityImageFilter<FloatImageType, CharImageType> RescaleFilterType;
RescaleFilterType::Pointer rescaleFilter = RescaleFilterType::New();
rescaleFilter->SetInput(gaussianFilter->GetOutput());

7.连接过滤器输出到写入器并执行写入操作:

// 设置输出图像
writer->SetInput(rescaleFilter->GetOutput());
// 执行更新
try
{writer->Update();
}
catch (itk::ExceptionObject &error)
{std::cerr << "Error: " << error << std::endl;return EXIT_FAILURE;
}

完整代码

#include <itkImage.h>
#include <itkImageFileReader.h>
#include <itkImageFileWriter.h>
#include <itkDiscreteGaussianImageFilter.h>
#include <itkRescaleIntensityImageFilter.h>
#include <itkJPEGImageIOFactory.h>
#include <itkCastImageFilter.h>int main()
{// 定义图像类型typedef itk::Image<unsigned char, 2> CharImageType;typedef itk::Image<float, 2> FloatImageType;typedef itk::ImageFileReader<CharImageType> ReaderType;typedef itk::ImageFileWriter<CharImageType> WriterType;// 注册JPEG格式支持itk::JPEGImageIOFactory::RegisterOneFactory();// 创建读取器和写入器ReaderType::Pointer reader = ReaderType::New();WriterType::Pointer writer = WriterType::New();// 设置要读取和写入的文件reader->SetFileName("test.jpg");writer->SetFileName("gaussian_output.jpg");// 将unsigned char类型转换为float类型的图像typedef itk::CastImageFilter<CharImageType, FloatImageType> CastFilterType;CastFilterType::Pointer castfilter = CastFilterType::New();castfilter->SetInput(reader->GetOutput());// 创建高斯模糊滤波器typedef itk::DiscreteGaussianImageFilter<FloatImageType, FloatImageType> GaussianFilterType;GaussianFilterType::Pointer gaussianFilter = GaussianFilterType::New();gaussianFilter->SetInput(castfilter->GetOutput());// 设置高斯模糊的方差,控制模糊程度gaussianFilter->SetVariance(2.0);  // 方差越大,模糊程度越高// 将浮点图像转换回unsigned char类型typedef itk::RescaleIntensityImageFilter<FloatImageType, CharImageType> RescaleFilterType;RescaleFilterType::Pointer rescaleFilter = RescaleFilterType::New();rescaleFilter->SetInput(gaussianFilter->GetOutput());// 设置输出图像writer->SetInput(rescaleFilter->GetOutput());// 执行更新try{writer->Update();}catch (itk::ExceptionObject &error){std::cerr << "Error: " << error << std::endl;return EXIT_FAILURE;}std::cout << "Gaussian blur filtering completed successfully." << std::endl;return EXIT_SUCCESS;
}

测试效果 

       通过调整参数,可以实现不同的滤波效果。

       如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【数据结构与算法】——学习笔记
  • liunx io模型多路复用
  • 2024年【甘肃省安全员C证】报名考试及甘肃省安全员C证考试总结
  • MyBatis详解
  • ios签名怎么找靠谱的服务商
  • 睿考网:中级经济师考试题型有哪些?
  • 小米嵌入式面试题目RTOS面试题目 嵌入式面试题目
  • 【QT Creator】基本使用
  • 2025通信硕士找工作纪实
  • Scratch中秋节——嫦娥奔月
  • 如何从0到1本地搭建whisper语音识别模型
  • OpenHarmony鸿蒙开发( Beta5.0)无感配网详解
  • 「大数据分析」Pandas图形可视化,基本绘图:折线图及实践
  • SpringBoot教程(二十八) | SpringBoot集成Elasticsearch(Java High Level Rest Client方式)
  • Prometheus+Grafana普罗米修斯,搭建和使用
  • @angular/forms 源码解析之双向绑定
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • echarts的各种常用效果展示
  • JavaScript类型识别
  • JavaScript新鲜事·第5期
  • java多线程
  • leetcode98. Validate Binary Search Tree
  • MySQL几个简单SQL的优化
  • Redis 懒删除(lazy free)简史
  • Service Worker
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 前端攻城师
  • 嵌入式文件系统
  • 数据可视化之 Sankey 桑基图的实现
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • ​低代码平台的核心价值与优势
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #数学建模# 线性规划问题的Matlab求解
  • (33)STM32——485实验笔记
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (转)iOS字体
  • (转)关于多人操作数据的处理策略
  • (转)树状数组
  • (自用)交互协议设计——protobuf序列化
  • .NET CLR Hosting 简介
  • .NET HttpWebRequest、WebClient、HttpClient
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .net 发送邮件
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET 中创建支持集合初始化器的类型
  • .net中调用windows performance记录性能信息
  • .skip() 和 .only() 的使用
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • @基于大模型的旅游路线推荐方案
  • [ 云计算 | AWS ] AI 编程助手新势力 Amazon CodeWhisperer:优势功能及实用技巧
  • [1]从概念到实践:电商智能助手在AI Agent技术驱动下的落地实战案例深度剖析(AI Agent技术打造个性化、智能化的用户助手)
  • [2024-06]-[大模型]-[Ollama] 0-相关命令