【ITK库学习】使用itk库进行图像滤波ImageFilter:二阶微分

目录

  • 1、itkRecursiveGaussianImageFliter 递归高斯滤波器
  • 2、itkLapacianRecursiveGaussianImageFiter 拉普拉斯高斯滤波器

1、itkRecursiveGaussianImageFliter 递归高斯滤波器

该类用于计算具有高斯核近似值的 IIR 卷积的基类。

在这里插入图片描述
该类是递归滤波器的基类,它与高斯核近似卷积。

与 itkDiscreteGaussianImageFilter相比,此滤波器对于大内核往往更快,并且它可以一步获取模糊图像的导数。 另外,请注意,itkRecursiveGaussianImageFilter 有 SetSigma(),itkDiscreteGaussianImageFilter 有 SetVariance()。

常用的成员函数

  • Set/GetSigma():设置/获取高斯核的Sigma(以世界坐标测量),默认值为 1.0。 如果 Sigma 值小于或等于 0,则会生成异常
  • Set/GetOrder():设置/获取要进行卷积的高斯阶数,ZeroOrder 相当于与高斯卷积,是默认设置;FirstOrder 相当于与高斯的一阶导数进行卷积;SecondOrder 相当于与高斯的二阶导数进行卷积
  • SetZeroOrder():明确设置零阶导数
  • SetFirstOrder():明确设置一阶导数
  • SetSecondOrder():明确设置二阶导数
  • SetNormalizeAcrossScale():设置/获取用于在尺度空间上标准化高斯的标志
  • SetUp():设置滤波器的系数以近似特定的内核,这里它用于近似高斯或其导数之一,参数是沿要过滤的维度的间距
  • VerifyPreconditions():验证过程对象是否已正确配置、所有必需的输入是否已设置以及所需的参数是否已正确设置, 如果无效,将抛出异常

示例代码

(1) 二阶高斯递归

#include "itkImage.h"
#include "itkRecursiveGaussianImageFilter.h"typedef itk::Image<float, 3> FloatImageType;bool recursiveGaussianImage(FloatImageType* image, FloatImageType* outputImage, double sigma)
{typedef itk::RecursiveGaussianImageFilter<FloatImageType, FloatImageType> RecursiveGaussianFilterType;typename RecursiveGaussianFilterType::Pointer filterA = RecursiveGaussianFilterType::New();typename RecursiveGaussianFilterType::Pointer filterB = RecursiveGaussianFilterType::New();typename RecursiveGaussianFilterType::Pointer filterC = RecursiveGaussianFilterType::New();filterA->SetInput(image);filterB->SetInput(filterA->GetOutput());filterC->SetInput(filterB->GetOutput());filterA->SetSigma(sigma);filterB->SetSigma(sigma);filterC->SetSigma(sigma);filterA->SetDirection(0); // 0 --> X directionfilterB->SetDirection(1); // 1 --> Y directionfilterC->SetDirection(2); // 1 --> Z directionfilterA->SetZeroOrder();    //ZeroOrder  FirstOrder  SecondOrderfilterB->SetZeroOrder();filterC->SetSecondOrder();try{filterC->Update();}catch (itk::ExceptionObject& ex){//读取过程发生错误std::cerr << "Error: " << ex << std::endl;return false;}outputImage = filterC->GetOutput();return true;
}

(2) 拉普拉斯滤波器

#include "itkImage.h"
#include "itkRecursiveGaussianImageFilter.h"
#include "itkAddImageFilter.h"typedef itk::Image<float, 3> FloatImageType;//拉普拉斯滤波器
bool laplacianRecursiveGaussian(FloatImageType* image, FloatImageType* outputImage, double sigma)
{const bool normalizeAcrossScale = false;typedef itk::RecursiveGaussianImageFilter<FloatImageType, FloatImageType> RecursiveGaussianFilterType;typename RecursiveGaussianFilterType::Pointer filterX1 = RecursiveGaussianFilterType::New();typename RecursiveGaussianFilterType::Pointer filterY1 = RecursiveGaussianFilterType::New();typename RecursiveGaussianFilterType::Pointer filterX2 = RecursiveGaussianFilterType::New();typename RecursiveGaussianFilterType::Pointer filterY2 = RecursiveGaussianFilterType::New();filterX1->SetInput(image);filterY1->SetInput(filterX1->GetOutput());filterY2->SetInput(image);filterX2->SetInput(filterY2->GetOutput());filterX1->SetDirection(0); // 0 --> X directionfilterY1->SetDirection(1); // 1 --> Y directionfilterX2->SetDirection(0); // 0 --> X directionfilterY2->SetDirection(1); // 1 --> Y directionfilterX1->SetZeroOrder();filterY1->SetSecondOrder();filterX2->SetSecondOrder();filterY2->SetZeroOrder();filterX1->SetNormalizeAcrossScale(normalizeAcrossScale);filterY1->SetNormalizeAcrossScale(normalizeAcrossScale);filterX2->SetNormalizeAcrossScale(normalizeAcrossScale);filterY2->SetNormalizeAcrossScale(normalizeAcrossScale);filterX1->SetSigma(sigma);filterY1->SetSigma(sigma);filterX2->SetSigma(sigma);filterY2->SetSigma(sigma);typedef itk::AddImageFilter<FloatImageType, FloatImageType> AddFiterType;typename AddFiterType::Pointer addFilter = AddFiterType::New();addFilter->SetInput1(filterY1->GetOutput());addFilter->SetInput2(filterX2->GetOutput());try{addFilter->Update();}catch (itk::ExceptionObject& ex){//读取过程发生错误std::cerr << "Error: " << ex << std::endl;return false;}outputImage = addFilter->GetOutput();return true;
}

2、itkLapacianRecursiveGaussianImageFiter 拉普拉斯高斯滤波器

该类主要用于计算图像的拉普拉斯高斯 (LoG)。

通过与高斯的二阶导数卷积来计算图像的拉普拉斯高斯 (LoG),该滤波器是使用递归高斯滤波器实现的。

它是包含itkRecursiveGaussianImageFiter的一个便捷的滤波器,可以简化它的使用。

常用的成员函数

  • Set/GetSigma():设置/获取Sigma值, Sigma以图像间距为单位进行测量
  • SetNormalizeAcrossScale():设置/获取用于在尺度空间上归一化的高斯因子

示例代码

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

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

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

相关文章

Netty详细文档

Netty教程 文章目录 Netty教程 Netty简介Netty 的介绍Netty 的应用场景互联网行业游戏行业大数据领域其它开源项目使用到 Netty Netty 的学习资料参考 Java BIO编程I/O 模型BIO、NIO、AIO 使用场景分析Java BIO 基本介绍Java BIO 工作机制Java BIO 应用实例问题分析 Java NIO编…

不得不知的Aspera替代方案,让文件传输变得更轻松

aspera作为一款高效的文件传输工具&#xff0c;可以让用户在网络状况不佳时仍然能够进行快速的大文件传输。然而&#xff0c;由于aspera的高昂价格和复杂的部署难度&#xff0c;很多用户开始寻找aspera替代方案来解决文件传输问题。 1、CFT CFT是一款由BMC Software公司开发的…

中国法拍房数量统计预测模型_2023年法拍房数量竟是。。

法拍房主要平台 法拍房主要平台有3家&#xff0c;分别是阿里、京东和北交互联平台。目前官方认定纳入网络司法拍卖的平台共有7家&#xff0c;其中阿里资产司法拍卖平台的挂拍量最大。 阿里法拍房数据显示2017年&#xff0c;全国法拍房9000套&#xff1b;2018年&#xff0c;法…

mybatis与oracle数据库jdbcType类型对应关系

之前都是百度上搜的&#xff0c;各种对应的都有&#xff0c;总觉得有问题&#xff0c;最后直接通过跑代码查看了一下对应关系&#xff0c;我用的oracle是19c。 常见的对应关系如下 oracle类型jdbcTypeVARCHAR2JdbcType.VARCHARNVARCHARJdbcType.NVARCHARCHARJdbcType.CHARCLOB…

机器学习中的混沌工程:拥抱不可预测性以增强系统鲁棒性埃

一、介绍 在动态发展的技术世界中&#xff0c;机器学习 (ML) 已成为一股革命力量&#xff0c;推动各个领域的创新。然而&#xff0c;随着机器学习系统的复杂性不断增加&#xff0c;确保其可靠性和鲁棒性已成为首要问题。这就是混沌工程发挥作用的地方&#xff0c;混沌工程是一门…

Android Compose Transition 动画

Transition 是一种动画效果&#xff0c;用于在组件的状态之间进行平滑的过渡。它可以帮助我们在状态变化时&#xff0c;以一种流畅的方式更新 UI。通过使用 Compose 的 Transition API&#xff0c;您可以在应用中创建各种各样的动画效果&#xff0c;从而增强用户体验并提高应用…

Axure元件库使用与ProcessOn流程图

Axure元件库 自定义Axure元件库&#xff1a; 打开Axure RP软件&#xff0c;并点击菜单栏中的“元件库”选项&#xff0c;选择“新建元件库”。 在弹出的对话框中&#xff0c;选择一个文件夹来保存您的自定义元件库&#xff0c;并给它一个名称。 在Axure RP的主界面上&#x…

四、Java流程控制

第一章 流程控制语句 在一个程序执行的过程中&#xff0c;各条语句的执行顺序对程序的结果是有直接影响的。所以&#xff0c;我们必须清楚每条语句的执行流程。而且&#xff0c;很多时候要通过控制语句的执行顺序来实现我们想要的功能。 1.1 流程控制语句分类 ​ 顺序结构 …

机器学习---逻辑回归算法

1、逻辑回归 逻辑回归又叫logistic回归分析&#xff0c;是一种广义的线性回归分析模型。线性回归要求因变量必须是连续性的数据变量&#xff0c;逻辑回归要求因变量必须是分类变量&#xff0c;可以是二分类或者多分类(多分类都可以归结到二分类问题)&#xff0c;逻辑回归的输出…

深入理解 Go 语言 Goroutine 的工作原理

一、设计思路 1、设计描述 启动服务之时先初始化一个 Goroutine Pool 池&#xff0c;这个 Pool 维护了一个类似栈的 LIFO 队列&#xff0c;里面存放负责处理任务的 Worker然后在 client 端提交 task 到 Pool 中之后&#xff0c;在 Pool 内部&#xff0c;接收 task 之后的核心…

数据库数据恢复—Mysql数据库误删表数据的数据恢复案例

mysql数据库数据恢复环境&#xff1a; 本地服务器&#xff0c;windows server操作系统 &#xff0c;部署有mysql单实例&#xff0c;数据库引擎类型为innodb&#xff0c;独立表空间&#xff0c;无数据库备份&#xff0c;未开启binlog。 mysql数据库故障&#xff1a; 工作人员使…

勒索病毒最新变种.mallox勒索病毒来袭,如何恢复受感染的数据?

导言&#xff1a; 威胁着我们数据安全的勒索病毒如.mallox已经变得愈发狡猾和具有挑战性。本文91数据恢复将深入介绍.mallox勒索病毒的特征、恢复受害数据的方法&#xff0c;以及一些预防措施&#xff0c;助您更好地应对这一威胁。 如果受感染的数据确实有恢复的价值与必要性&…

HarmonyOS应用开发初体验

9月25日华为秋季全场景新品发布会上&#xff0c;余承东宣布&#xff0c;全面启动鸿蒙原生应用&#xff0c;HarmonyOS NEXT开发者预览版将在2024年第一季度面向开发者开放。 最近鸿蒙开发可谓是火得一塌糊涂&#xff0c;各大培训平台都开设了鸿蒙开发课程。美团发布了鸿蒙高级工…

ZLMediaKit 编译以及测试(Centos 7.9 环境)

文章目录 一、前言二、编译器1、获取代码2、编译器2.1 编译器版本要求2.2 安装编译器 3、安装cmake4、依赖库4.1 依赖库列表4.2 安装依赖库4.2.1 安装libssl-dev和libsdl-dev4.2.2 安装 ffmpeg-devel依赖和ffmpeg依赖 三、构建和编译项目&#xff08;启用WebRTC功能&#xff09…

JavaWeb笔记之MySQL数据库

#Author 流云 #Version 1.0 一、引言 1.1 现有的数据存储方式有哪些&#xff1f; Java程序存储数据&#xff08;变量、对象、数组、集合&#xff09;&#xff0c;数据保存在内存中&#xff0c;属于瞬时状态存储。 文件&#xff08;File&#xff09;存储数据&#xff0c;保存…

电商类app如何进行软件测试?有必要进行第三方软件测试吗?

电商类app在开发过程中&#xff0c;软件测试是一个非常重要的环节。通过软件测试&#xff0c;可以确保app在发布和使用过程中的稳定性和安全性。那么&#xff0c;电商类app究竟如何进行软件测试?是否有必要进行第三方软件测试? 一、电商类app如何进行软件测试?   1. 内部…

武汉小程序开发全攻略:从创意到上线,10个必备步骤详解

在移动互联网快速发展的今天&#xff0c;武汉小程序开发成为越来越受关注的领域。作为专业从业者&#xff0c;我将为您详细解读武汉小程序开发的全攻略&#xff0c;从创意到上线的十个必备步骤&#xff0c;助您轻松掌握小程序开发的要点。 步骤一&#xff1a;明确小程序定位与…

python numpy 两种方法将相同shape的一维数组合并为二维数组

1 np.column_stack 最简单的一种方法 将多个一维数据按【列】合并为二维数组 import numpy as np# a b 都是一维数组 a np.array((1,2,3)) b np.array((2,3,4))# 变成二维 merge np.column_stack((a,b)) # array([[1, 2],[2, 3],[3, 4]])2 np.hstack 尽管该函数也是对【列…

FPGA乒乓操作详解,知道与FIFO的区别吗?

FPGA乒乓操作是一种高效的数据流控制处理技巧&#xff0c;它主要应用于需要快速且连续数据处理和缓冲的场合。乒乓操作的核心在于利用两个缓冲区交替存储数据流&#xff0c;从而实现数据的无缝实时传输和处理。 本文将详细介绍乒乓操作的基本原理、应用场景以及与FIFO的区别。…

超越GPT-4!谷歌AI大模型Gemini震撼发布

原创 | 文 BFT机器人 在Open AI风头正盛之际&#xff0c;谷歌大杀器终于上线&#xff01; 当地时间12月6日&#xff0c;谷歌CEO桑达尔・皮查伊宣布正式推出其规模最大、功能最强大的新大型语言模型Gemini 1.0版。 据悉&#xff0c;Gemini 1.0是谷歌筹备了一年之久“对抗”GPT-…