【ITK库学习】使用itk库进行图像滤波ImageFilter:梯度Gradient

目录

  • 1、itkGradientImageFilter
  • 2、itkGradientMagnitudeImageFilter 梯度强度
  • 3、itkGradientMagnitudeRecursiveGaussianImageFilter 带滤波的梯度强度
  • 4、itkDerivativeImageFilter 不带滤波的导函数

1、itkGradientImageFilter

该类是一个基类,用于使用方向导数计算图像的梯度向量。

每个像素位置的方向导数是通过与一阶导数算子卷积来计算的。

itk::GradientImageFilter< TInputImage, TOperatorValueType, TOutputValueType,TOutputImageType >

TOperatorValueType:定义导数运算符中使用的值类型(默认为浮点型),TOutputValueType定义用于输出图像的值类型(默认为浮点型), 输出图像被定义为协变矢量图像,其值类型被指定为第三个模板参数。

示例代码

#include "itkImage.h"
#include "itkGradientImageFilter.h"typedef itk::Image<float, 2> FloatImageType;
typedef itk::Image<unsigned char, 2> UnsignedCharImageType;bool gradientImage(UnsignedCharImageType* image)
{using GradientFilterType = itk::GradientImageFilter<UnsignedCharImageType, float>;auto gradientFilter = GradientFilterType::New();gradientFilter->SetInput(image);try{gradientFilter->Update();}catch (itk::ExceptionObject& ex){//读取过程发生错误std::cerr << "Error: " << ex << std::endl;return false;}return true;
}

2、itkGradientMagnitudeImageFilter 梯度强度

该类是itk::GradientImageFilter的一个具体实现,用于计算图像的梯度的幅值,即对应每个像素位置处的梯度的长度。

该类只计算梯度幅值,不涉及梯度向量的方向,主要用来帮助检测对象轮廓和分离均匀区域。

它使用一个简单的有限差分方式进行计算梯度强度。该滤波器在计算梯度前不会对图像进行任何滤波,因此结果对噪声非常敏感,而且不一定是尺度空间分析的最佳选择。

示例代码

#include "itkImage.h"
#include "itkGradientMagnitudeImageFilter.h"typedef itk::Image<float, 3> FloatImageType;bool gradientMagnitudeImage(FloatImageType* image, FloatImageType* outputImage)
{typedef itk::GradientMagnitudeImageFilter<FloatImageType, FloatImageType> GradientMagnitudeFilterType;typename GradientMagnitudeFilterType::Pointer gradientMagnitudeFilter = GradientMagnitudeFilterType::New();gradientMagnitudeFilter ->SetInput(image);try{gradientMagnitudeFilter ->Update();}catch (itk::ExceptionObject& ex){//读取过程发生错误std::cerr << "Error: " << ex << std::endl;return false;}outputImage = gradientMagnitudeFilter->GetOutput();return true;
}

3、itkGradientMagnitudeRecursiveGaussianImageFilter 带滤波的梯度强度

该类通过与高斯的一阶导数卷积来计算图像的梯度大小。

通过选择一个特定的高斯标准差,就可以选择一个相应的比例来去除通常被认为是噪声的高频部分。

该滤波器是使用递归高斯滤波器实现的。首先通过将图像和一个高斯核卷积来平滑图像,然后应用一个查分操作。

常用的成员函数

  • SetImage():设置输入图像
  • Set/GetSigma():设置/获取Sigma值, Sigma以图像间距为单位进行测量
  • Set/GetNumberOfWorkUnits():获取/设置执行时要创建的工作单元数
  • Set/GetNormalizeAcrossScale():设置/获取将用于高斯的归一化因子

注:梯度强度图像的动态范围往往比输入图像的动态范围小,必须注意选择用来输出图像的图像类型。

示例代码

#include "itkImage.h"
#include "itkGradientMagnitudeRecursiveGaussianImageFilter.h"typedef itk::Image<float, 3> FloatImageType;bool gradientMagnitudeRecursiveImage(FloatImageType* image, FloatImageType* outputImage)
{const double sigma = 3;typedef itk::GradientMagnitudeRecursiveGaussianImageFilter<FloatImageType, FloatImageType> GradMagnRecFilterType;typename GradMagnRecFilterType::Pointer  gradMagnRecFilter = GradMagnRecFilterType::New();gradMagnRecFilter->SetInput(image);gradMagnRecFilter->SetSigma(sigma);try{gradMagnRecFilter->Update();}catch (itk::ExceptionObject& ex){//读取过程发生错误std::cerr << "Error: " << ex << std::endl;return false;}outputImage = gradMagnRecFilter->GetOutput();return true;
}

4、itkDerivativeImageFilter 不带滤波的导函数

该类主要用于计算图像的方向导数。

每个像素位置的方向导数是通过与用户指定阶数的导数运算符进行卷积来计算的。

常用的成员函数

  • SetImage():设置输入图像
  • SetOrder():设置/获取导数的阶数,输出像素类型必须有符号
  • SetDirection():设置/获取导数相对于图像坐标轴的方向,输出像素类型必须有符号

示例代码

#include "itkImage.h"
#include "itkDerivativeImageFilter.h"typedef itk::Image<float, 3> FloatImageType;bool derivativeImage(FloatImageType* image, FloatImageType* outputImage)
{const unsigned int order = 1;const unsigned int direction = 0;    //dimension number,0:x; 1:y; 2:z;typedef itk::DerivativeImageFilter<FloatImageType, FloatImageType> DerivativeFilterType;typename DerivativeFilterType::Pointer derivativeFilter = DerivativeFilterType::New();derivativeFilter->SetInput(image);derivativeFilter->SetDirection(direction);derivativeFilter->SetOrder(order);try{derivativeFilter->Update();}catch (itk::ExceptionObject& ex){//读取过程发生错误std::cerr << "Error: " << ex << std::endl;return false;}outputImage = derivativeFilter->GetOutput();return true;
}

综上所述,几个滤波器均适用于计算二维和三维图像的计算,如果只需要计算图像的梯度幅值可以选择itkGradientMagnitudeImageFilter或itkGradientMagnitudeRecursiveGaussianImageFilter;如果需要计算图像的导数,可以选择itkDerivativeImageFilter可以用于图像边缘检测、角点检测等应用,具体选择哪个滤波器还需根据具体应用场景和需求来确定。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/209757.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++笔试题之回文数的判断

“回文”是指正读反读都能读通的句子&#xff0c;它是古今中外都有的一种修辞方式和文字游戏&#xff0c;如“我为人人&#xff0c;人人为我”等。在数学中也有这样一类数字有这样的特征&#xff0c;成为回文数&#xff08;palindrome number&#xff09;。 设n是一任意自然数…

MSSQL 程序集使用方法

1.C# 写一个程序 1.1新建一个项目【类库【.Net FrameWork】 1.2编写代码 删除 namespace ApiSQLClass { } 代码如下&#xff1a;【具体调用API模式根据具体编写】 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.…

1. 使用poll或epoll创建echo服务器

1. 说明&#xff1a; 此篇博客主要记录一种客户端实现方式&#xff0c;和两种使用poll或者epoll分别创建echo服务器的方式&#xff0c;具体可看代码注释&#xff1a; 2. 相关代码&#xff1a; 2.1 echoClient.cpp #include <iostream> #include <cstdio> #incl…

C语言中的 sizeof 运算符

在 C 语言中&#xff0c;sizeof 是一个运算符&#xff0c;用于获取给定类型或变量的字节大小。它返回一个 size_t 类型的值&#xff0c;表示以字节为单位的对象大小。 sizeof 运算符有以下特点&#xff1a; 用法&#xff1a;sizeof 运算符可以应用于数据类型或表达式。计算静…

酷开科技以创新为动力用大数据提升品牌认知

在21世纪的今天&#xff0c;我们生活在一个被互联网深深改变的世界。互联网不仅改变了我们的生活方式&#xff0c;也正在改变我们的思维方式和工作方式。而互联网作为一种新的发展趋势&#xff0c;更是为我们提供了无数的机会和无限可能性&#xff0c;从电子商务时代到社交网络…

CSP-何以包邮?

题目描述 新学期伊始&#xff0c;适逢顿顿书城有购书满 x 元包邮的活动&#xff0c;小 P 同学欣然前往准备买些参考书。 一番浏览后&#xff0c;小 P 初步筛选出 n 本书加入购物车中&#xff0c;其中第 i 本&#xff08;1≤i≤n&#xff09;的价格为 ai 元。 考虑到预算有限&am…

scala编码

1、Scala高级语言 Scala简介 Scala是一门类Java的多范式语言&#xff0c;它整合了面向对象编程和函数式编程的最佳特性。具体来讲Scala运行于Java虚拟机&#xff08;JVM)之上&#xff0c;井且兼容现有的Java程序&#xff0c;同样具有跨平台、可移植性好、方便的垃圾回收等特性…

ubuntu server 20.04 备份和恢复 系统 LTS

ubuntu server 20.04 备份和恢复 系统 LTS tar命令系统备份与恢复&#xff08;还原or新装&#xff09; 备份系统 cd / su root tar cvpzf backup.tgz --exclude/tmp --exclude/run --exclude/dev --exclude/snap --exclude/proc --exclude/lostfound --exclude/backup.tgz …

启动游戏出现concrt140.dll错误的8种解决方法

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是找不到concrt140.dll文件。这个错误通常会导致程序无法正常运行&#xff0c;给用户带来困扰。本文将介绍找不到concrt140.dll无法继续执行代码的8个方法&#xff0c;同时探讨concrt140.dll丢…

LinuxBasicsForHackers笔记 -- 文件系统和存储设备管理

设备目录/dev Linux 有一个特殊的目录&#xff0c;其中包含代表每个连接设备的文件&#xff1a;相应命名的 /dev 目录。 /dev中有很多设备列表。 特别令人感兴趣的是设备 sda1、sda2、sda3、sdb 和 sdb1&#xff0c;它们通常是硬盘驱动器及其分区以及 USB 闪存驱动器及其分区…

理解基于 Hadoop 生态的大数据技术架构

转眼间&#xff0c;一年又悄然而逝&#xff0c;时光荏苒&#xff0c;岁月如梭。当回首这段光阴&#xff0c;不禁感叹时间的匆匆&#xff0c;仿佛只是一个眨眼的瞬间&#xff0c;一年的旅程已成为过去&#xff0c;而如今又到了画饼的时刻了 &#xff01; 基于 Hadoop 生态的大数…

固态硬盘SSD

目录 1.2 组成1.3 读写性能特性1.4 与机械硬盘相比的特点1.5 磨损均衡技术 \quad \quad SSD基于闪存技术Flash Memory, 属于电可擦除ROM, 即EEPROM \quad 1.2 组成 \quad \quad \quad 系统对固态硬盘的读写是以页为单位的 固态硬盘里的块相当于机械硬盘里的磁道 固态硬盘里的页…

Redis基础系列-持久化

Redis基础系列-持久化 文章目录 Redis基础系列-持久化1. 什么是持久化2. 为什么要持久化3. 持久化的两种方式3.1 持久化方式1&#xff1a;RDB(redis默认持久化方式)3.11 配置步骤-自动触发3.12 配置步骤-手动触发3.12 优点3.13 缺点3.14 检查和修复RDB快照文件3.15 哪些情况会触…

每天一个Linux命令 -- (7)more命令

欢迎阅读《每天一个Linux命令》系列&#xff01;在本篇文章中&#xff0c;将介绍Linux系统下的more命令&#xff0c;它用于逐屏显示文件的内容。 概念 more命令是Linux系统下的文件逐屏显示命令&#xff0c;用于逐屏显示文件的内容。 命令操作 more命令的语法如下&#xff1…

ubuntu22.04 安装cuda

CUDA&#xff08;Compute Unified Device Architecture&#xff09;是由 NVIDIA 开发的一种并行计算平台和编程模型。它允许开发者利用 NVIDIA 的 GPU&#xff08;图形处理单元&#xff09;进行高效的计算处理。CUDA 通过提供一系列的 C、C 和 Fortran 扩展&#xff0c;使得开发…

我的NPI项目之Android电源系列 -- 关于剩余充满时间的问题(一)

我的新项目是基于高通最新的5G平台&#xff0c;但是由于还没有拿到EVT。所以&#xff0c;就在目旧的平台和OS上进行学习。遇到第一个问题就是插上type-c之后&#xff0c;充满剩余时间异常的问题。 问题描述&#xff0c;在充电过程中&#xff0c;显示充满时间为“0 min left unt…

9.基于SpringBoot3+I18N实现国际化

1. 新建资源文件 在resources目录下新建目录i18n, 然后 新建messages_en.properties文件 user.login.erroraccount or password error&#xff01;新建messages_zh_CN.properties文件 user.login.error帐户或密码错误&#xff01;2. 新建LocaleConfig.java文件 Configurati…

2004-2021年上市公司环境规制强度相关数据

2004-2021年上市公司环境规制强度相关数据 1、时间&#xff1a;2004-2021年 2、指标&#xff1a;年份、股票代码、股票简称、行业名称、行业代码、省份、城市、区县、行政区划代码、城市代码、区县代码、首次上市年份、上市状态、所属省份-工业增加值_亿元、所属省份-治理废气…

Flink流批一体计算(24):Flink SQL之mysql维表实时关联

目录 1.维表 2.数据准备 创建源数据 创建维度表 创建Sink表 3.配置任务 Flink SQL创建kafka源表 Flink SQL创建MySQL维表 Flink SQL创建MySQL结果表 编写计算任务 核验数据 1.维表 目前在实时计算的场景中&#xff0c;大多数都使用过MySQL、Hbase、redis作为维表引擎…

PTA:计算总分

题干 请编写一个函数sum&#xff0c;函数的功能是&#xff1a;计算一个由结构体表示的包含多门课程成绩组成的学生的总成绩。 函数接口定义&#xff1a; double sumScore(struct student stu); 其中 stu是用户传入的参数。函数须返回学生的总成绩。 裁判测试程序样例&#x…