【ITK库学习】使用itk库进行图像滤波ImageFilter:提取区域/切片/裁剪

本文主要是介绍【ITK库学习】使用itk库进行图像滤波ImageFilter:提取区域/切片/裁剪,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 1、itkRegionOfInterestImageFilter 提取区域
  • 2、itkExtractImageFilter 提取切片
  • 3、itkCropImageFilter 裁剪图像区域

1、itkRegionOfInterestImageFilter 提取区域

该类可以从输入图像中提取感兴趣的区域。

该滤波器产生与输入图像具有相同尺寸的输出图像。

如果想更改图像的尺寸,可以考虑使用ExtractImageFilter,例如,用于从3D图像的切片中提取2D图像。

常用的成员函数

  • Set/GetRegionOfInterest():设置/获取要提取的区域

示例代码

#include "itkImage.h"
#include "itkRegionOfInterestImageFilter.h"typedef itk::Image<short, 3> ShortImageType;bool regionOfInterestImageFilter(ShortImageType* image, ShortImageType* outImage)
{ShortImageType::IndexType start;start.Fill(50);ShortImageType::SizeType size;size.Fill(25);ShortImageType::RegionType desiredRegion;desiredRegion.SetSize(size);desiredRegion.SetIndex(start);// Software Guide : EndCodeSnippettypedef itk::RegionOfInterestImageFilter<ShortImageType, ShortImageType> RegionOfInterestFilterType;typename RegionOfInterestFilterType::Pointer regionInterestFilter = RegionOfInterestFilterType::New();regionInterestFilter->SetInput(image);regionInterestFilter->SetRegionOfInterest(desiredRegion);try{regionInterestFilter->Update();}catch (itk::ExceptionObject& ex){//读取过程发生错误std::cerr << "Error: " << ex << std::endl;return false;}outImage = regionInterestFilter->GetOutput();return true;
}

2、itkExtractImageFilter 提取切片

该滤波器通过将图像裁剪到选定的区域边界来减小图像大小。

它通过移除目标区域之外的像素来更改图像的图像边界,必须指定目标区域。

该滤波器还折叠维度,使得输入图像可以具有比输出图像更多的维度(即,从nD输入图像到n-1D输出图像)。若要指定要折叠的尺寸,必须指定ExtractionRegion,对于ExtractionRegion,Size[dim]=0,则该维度被折叠,要折叠的索引由ExtractionRegion指定,索引[dim],例如,我们有一个图像4D=4x4x4x4图像,并且我们想要从4D(即4D的第三个“时间”切片)获得一个3D图像,3D=4x4x4的图像,指定为[x,y,z,2],提取区域的size=[4,4,4,0]和Index=[0,0,0,2]。

ExtractionRegion中的维度数,size和index必须=InputImageDimension,ExtractionRegion中非零维度的数目,必须size=OutputImageDimension。

此滤波器生成的输出图像将与输入图像具有相同的原点,而输出图像的ImageRegion将从ExtractRegion参数中提供的起始索引值开始。

从更大维度的输入空间折叠的输出图像的方向通常是一个定义不清的问题,要求应用程序开发人员为折叠方向余弦选择所需的转换策略。需要明确请求策略(即没有工作默认值)。

此滤波器实现为多线程筛选器,它为其实现提供了一个DynamicThreadGenerateData() 方法。

此筛选器源自InPlaceImageFilter,当该过滤器的输入与输出请求区域匹配时,就像流式过滤器用于输入一样,将该过滤器设置为就地运行将不会复制大容量像素数据。

常用的成员函数

  • Set/GetExtractionRegion():设置/获取输出图像区域,如果Size=0即折叠该 dimension,这意味着输出图像的c维度将小于输入图像,其中c = number of 提取Size = 0

示例代码

#include "itkImage.h"
#include "itkExtractImageFilter.h"typedef itk::Image<short, 3> ShortImageType;bool extractImageFilter(ShortImageType* image, ShortImageType* outImage)
{//GetBufferedRegion:获取区域对象,该对象定义当前加载在内存中的图像区域的大小和起始索引ShortImageType::RegionType inputRegion = image->GetBufferedRegion();ShortImageType::SizeType size = inputRegion.GetSize();size[2] = 0;ShortImageType::IndexType start = inputRegion.GetIndex();start[2] = 10;   //slice NumberShortImageType::RegionType desiredRegion;desiredRegion.SetSize(size);desiredRegion.SetIndex(start);typedef itk::ExtractImageFilter<ShortImageType, ShortImageType> ExtractFilterType;typename ExtractFilterType::Pointer extractFilter = ExtractFilterType::New();extractFilter->SetInput(image);extractFilter->SetDirectionCollapseToSubmatrix();extractFilter->SetExtractionRegion(desiredRegion);extractFilter->SetNumberOfThreads(8);    //设置多线程try{extractFilter->Update();}catch (itk::ExceptionObject& ex){//读取过程发生错误std::cerr << "Error: " << ex << std::endl;return false;}outImage = extractFilter->GetOutput();return true;
}

3、itkCropImageFilter 裁剪图像区域

该滤波器通过在最大可能区域的上限和下限按itk::size裁剪图像来减小图像大小。

它通过移除目标区域之外的像素来更改图像的图像边界,目标区域不是预先指定的,而是在BeforeThreadGenerateData()中计算的。

此过滤器使用ExtractImageFilter执行裁剪。

常用的成员函数

  • Set/GetUpperBoundaryCropSize():设置/获取上边界的裁剪尺寸
  • Set/GetLowerBoundaryCropSize():设置/获取下边界的裁剪尺寸
  • SetBoundaryCropSize():设置/获取边界的裁剪尺寸

示例代码

#include "itkImage.h"
#include "itkCropImageFilter.h"typedef itk::Image<short, 3> ShortImageType;bool cropImageFilter(ShortImageType* image, ShortImageType* outImage)
{//GetBufferedRegion:获取区域对象,该对象定义当前加载在内存中的图像区域的大小和起始索引ShortImageType::SizeType cropSize;cropSize[0] = 100;cropSize[1] = 100;cropSize[2] = 50;ShortImageType::SizeType upperCrop;upperCrop[0] = 200;upperCrop[1] = 200;upperCrop[2] = 100;ShortImageType::SizeType lowerCrop;lowerCrop[0] = 100;lowerCrop[1] = 100;lowerCrop[2] = 50;typedef itk::CropImageFilter<ShortImageType, ShortImageType> CropFilterType;typename CropFilterType::Pointer cropFilter = CropFilterType::New();cropFilter->SetInput(image);cropFilter->SetBoundaryCropSize(cropSize);//cropFilter->SetUpperBoundaryCropSize(upperCrop);//cropFilter->SetLowerBoundaryCropSize(lowerCrop);cropFilter->SetNumberOfThreads(8);    //设置多线程try{cropFilter->Update();}catch (itk::ExceptionObject& ex){//读取过程发生错误std::cerr << "Error: " << ex << std::endl;return false;}outImage = cropFilter->GetOutput();return true;}

itkRegionOfInterestImageFilter通过指定一个t特定区域来提取感兴趣的区域,该滤波器接受一个输入图像和一个Region区域,在输出图像中将只保留该Region区域内的像素,该滤波器通常用于向下采样或裁剪图像。

itkExtractImageFilter通过指定一个区域起始点和多个起始点以及一个步进值来提取多个子图像,该滤波器接受一个输入图像,并通过设置Index、Size、Direction和SetNumberOfThreads方法来设置子图像的起始点、大小、方向和线程数,该滤波器通常用于分割图像、提取感兴趣的图像区域以及对图像进行配准等。

itkCropImageFilter用于从一个输入图像中裁剪出一个子图像,它接受一个输入图像、一个起始点和一个大小作为输入参数,并输出裁剪后的子图像。起始点表示裁剪后子图像的左上角像素的坐标,大小表示子图像的尺寸。它与itkExtractImageFilter的不同是使用起始点和大小来指定子图像的位置和尺寸,而itkExtractImageFilter使用索引范围来指定子图像在输入图像中的范围。

综上所述,itkRegionOfInterestImageFilter适用于提取一个感兴趣的矩形区域,而itkExtractImageFilter适用于提取多个子图像,itkCropImageFilter适用于需要按照给定的起始点和大小裁剪图像的场景,例如将图像的一部分移动到另一个位置;根据具体的应用场景,可以选择合适的滤波器来提取所需的图像。

这篇关于【ITK库学习】使用itk库进行图像滤波ImageFilter:提取区域/切片/裁剪的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/513376

相关文章

springboot security快速使用示例详解

《springbootsecurity快速使用示例详解》:本文主要介绍springbootsecurity快速使用示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录创www.chinasem.cn建spring boot项目生成脚手架配置依赖接口示例代码项目结构启用s

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为

Spring Boot3虚拟线程的使用步骤详解

《SpringBoot3虚拟线程的使用步骤详解》虚拟线程是Java19中引入的一个新特性,旨在通过简化线程管理来提升应用程序的并发性能,:本文主要介绍SpringBoot3虚拟线程的使用步骤,... 目录问题根源分析解决方案验证验证实验实验1:未启用keep-alive实验2:启用keep-alive扩展建

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

GORM中Model和Table的区别及使用

《GORM中Model和Table的区别及使用》Model和Table是两种与数据库表交互的核心方法,但它们的用途和行为存在著差异,本文主要介绍了GORM中Model和Table的区别及使用,具有一... 目录1. Model 的作用与特点1.1 核心用途1.2 行为特点1.3 示例China编程代码2. Tab

SpringBoot使用OkHttp完成高效网络请求详解

《SpringBoot使用OkHttp完成高效网络请求详解》OkHttp是一个高效的HTTP客户端,支持同步和异步请求,且具备自动处理cookie、缓存和连接池等高级功能,下面我们来看看SpringB... 目录一、OkHttp 简介二、在 Spring Boot 中集成 OkHttp三、封装 OkHttp

使用Python实现获取网页指定内容

《使用Python实现获取网页指定内容》在当今互联网时代,网页数据抓取是一项非常重要的技能,本文将带你从零开始学习如何使用Python获取网页中的指定内容,希望对大家有所帮助... 目录引言1. 网页抓取的基本概念2. python中的网页抓取库3. 安装必要的库4. 发送HTTP请求并获取网页内容5. 解

使用Python实现网络设备配置备份与恢复

《使用Python实现网络设备配置备份与恢复》网络设备配置备份与恢复在网络安全管理中起着至关重要的作用,本文为大家介绍了如何通过Python实现网络设备配置备份与恢复,需要的可以参考下... 目录一、网络设备配置备份与恢复的概念与重要性二、网络设备配置备份与恢复的分类三、python网络设备配置备份与恢复实