ITK学习笔记(四)基于C++和ITK获取3D医学图像的最大连通区域
ITK学习笔记(四)基于C++和ITK获取3D医学图像的最大连通区域
- 1、代码
- 2、效果
- 3、主要函数介绍
1、代码
#include "itkConnectedComponentImageFilter.h"
#include "itkImage.h"
#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"
#include "itkImageRegionIterator.h"
#include "itkLabelShapeKeepNObjectsImageFilter.h"using namespace std;void print(const std::string& file, itk::Image<unsigned char, 2>* image)
{ofstream fout(file);auto size = image->GetBufferedRegion().GetSize();for (auto i = 0; i < size[0]; i++){for (auto j = 0; j < size[1]; j++){itk::Image<unsigned char, 2>::IndexType index{ {i,j} };auto c = image->GetPixel(index);fout << (int)c;}fout << std::endl;}
}int main(int argc, char *argv[])
{// 1、获取二值化的分割结果maskconst char* input_path = "D:/documents/vs2019/itk_tutorial/largestcompent/build/RelWithDebInfo/left_femur.nrrd";// 图像保存的路径using ImageType = itk::Image<unsigned char, 3>;using ReaderFilter = itk::ImageFileReader<ImageType>;auto reader = ReaderFilter::New();reader->SetFileName(input_path);reader->Update();ImageType::Pointer image = reader->GetOutput();// 2, 调用ITK的itkConnectedComponentImageFilterusing ConnectedComponentFilter = itk::ConnectedComponentImageFilter<ImageType, ImageType>;auto connnectedComponentFilter = ConnectedComponentFilter::New();connnectedComponentFilter->SetInput(image);connnectedComponentFilter->Update();// 3,调用ITK的itkLabelShapeKeepNObjectsImageFilterusing LabelShapeKeepNObjectsFilter = itk::LabelShapeKeepNObjectsImageFilter<ImageType>;auto labelShapeKeepNObjectsFilter = LabelShapeKeepNObjectsFilter::New();labelShapeKeepNObjectsFilter->SetInput(connnectedComponentFilter->GetOutput());labelShapeKeepNObjectsFilter->SetBackgroundValue(0);labelShapeKeepNObjectsFilter->SetNumberOfObjects(1);labelShapeKeepNObjectsFilter->SetAttribute(LabelShapeKeepNObjectsFilter::LabelObjectType::NUMBER_OF_PIXELS);labelShapeKeepNObjectsFilter->Update();
// 4、将Label便签转换为1typedef itk::RescaleIntensityImageFilter<ImageType, ImageType> RescaleFilterType;RescaleFilterType::Pointer rescaleFilter = RescaleFilterType::New();rescaleFilter->SetOutputMinimum(0);rescaleFilter->SetOutputMaximum(1);rescaleFilter->SetInput(labelShapeKeepNObjectsFilter->GetOutput());rescaleFilter->Update();//ImageType::Pointer largestccimage = rescaleFilter->GetOutput(); // 5,保存最大连通区域图像const char* out_path = "D:/documents/vs2019/itk_tutorial/largestcompent/build/RelWithDebInfo/output.nii.gz"; // 保存输出结果的路径using WriterFilter = itk::ImageFileWriter<ImageType>;auto writer = WriterFilter::New();writer->SetFileName(out_path);writer->SetInput(rescaleFilter->GetOutput());writer->Update();return EXIT_SUCCESS;
}
2、效果
原始图像:
去除小连通域之后
参考:基于C++和ITK获取2D或3D医学图像的最大连通区域(完整代码)
3、主要函数介绍
itk::ConnectedComponentImageFilter<ImageType, OutputImageType>;
该filter值检测连通区域,不编号,不排序。
itk::LabelShapeKeepNObjectsImageFilter;
该filter对连通区域进行排序,然后只保留最大的几个连通区域。
itk::LabelImageToShapeLabelMapFilter< OutputImageType, LabelMapType> ;
为保留的每个连通区域打上标签(标号),编号顺序为找到不同区域的顺序.
虽然LabelShapeKeepNObjectsImageFilter调用SetAttribute 之后,按照attribute对连通区域大小进行了排序,但该排序并不反映在label上。即大的label并不一定对应大的size。反映在 SetNumberOfObjects(n) 设定保留区域之后,只保留排序后前n个区域的label。
itk::RescaleIntensityImageFilter<OutputImageType, ImageType>;
上一步图像只有标签,图像上没有直接的区别,本步对保留下来的不同连通区域进行不同的染色,以示区分。
参考:二维ITK连通区域提取
ITK学习笔记(四)基于C++和ITK获取3D医学图像的最大连通区域相关推荐
- ITK学习笔记(十二) SimpleITK获取二值图像bbox
ITK学习笔记(十二) SimpleITK获取二值图像bbox sitk_ seg_ img = sitk . ReadImage( m ) bbox =get_ bbox_ from mask(si ...
- 学习笔记四.基于HAL库的stm32f103硬件读写EEPROM(CUBEMX)
基于cubemx的stm32f103硬件读写EEPROM 今天介绍一种可擦除存储器. EEPROM (Electrically Erasable Programmable read only memo ...
- Flask学习笔记(四):基于Flask网页显示图片
原图如下 代码如下 from flask import Flask, request, make_response from datetime import datetime import osapp ...
- ITK学习笔记(二)最大圆度连通域提取
ITK学习笔记(二)最大连通域提取 1.代码 1.1 code 1.2.生成的mask图片 1.3.打印信息 关于编译部分可以参考我的:VTK学习笔记(十)基于VTK和ITK程序 最大圆度概念: 圆度 ...
- ITK学习笔记(一)ITK的使用
ITK学习笔记(一)ITK的使用 第一个ITK程序 1.CMakeLists.txt 2. 测试数据 3.代码 4.结果 ITK官方文档 第一个ITK程序 1.CMakeLists.txt # Thi ...
- ITK学习笔记(九) simpleITK重采样数据到固定尺寸
ITK学习笔记(九) simpleITK重采样数据到固定尺寸 1.resampleSize 2.CT图像预处理之重采样 3.SKIMAGE.TRANSFORM-两种缩放皆可 4.Python Simp ...
- ITK学习笔记(八) ITK高斯混合模型 GMM EM
ITK学习笔记(八) ITK高斯混合模型 GMM EM 1.高斯混合模型 2.变分贝叶斯高斯混合 3.ITK中的GMM.EM 1.高斯混合模型 sklearn.mixture是一个能够学习高斯混合模型 ...
- ITK学习笔记(七) ITK旋转方向位置不变
ITK学习笔记(七) ITK旋转方向位置不变 sitk使用的使LPS坐标系,与slicer中使用的RAS坐标系不同. 在sitk中的方向(1,1,1)(1,1,1)(1,1,1),在slicer中的方 ...
- ITK学习笔记(五) ITK计算质心
ITK学习笔记(五) ITK计算质心 通过LabelGeometryImageFilter可以求Label Image各个区域的质心和BoundingBox.然而,如果图像的spacing不是1,它并 ...
最新文章
- 机器学习两大利器:Boosting 与 AdaBoost
- 南京:第三届软博会“外包”将唱主角
- java rsa 公钥加密_java – 使用公钥进行RSA解密
- 连接手表_荣耀手表2 一键连接你的手上智慧新生活
- JSP 获取Request 经常使用參数
- 阿里巴巴Java开发编码规范—注释规约
- 全国哀悼日,CSS如何把整个网页黑白显示
- 新加坡政府开放数据门户网站
- php微云上传,API - 微云
- 早餐为啥不能吃大米粥?医生:不仅是米粥,这3物也最好少吃
- python将一张图片粘贴到另外一张图片上,按照指定坐标放置
- ubuntu16.04下安装录屏软件OBS studio
- python flask实战订餐系统微信小程序-60nginx + uwsgi 实现多进程访问
- 【CentOS】CentOS7最小安装版 VMware Tools安装
- 【计算机网络】可靠传输
- php 顺丰接口实例,顺丰对接源代码
- 基于matlab的相干信号的doa 估计,基于空间平滑MUSIC算法的相干信号DOA估计(1)
- 面向对象程序设计方法概述
- Pytorch_DDC(深度网络自适应,以resnet50为例)代码解读
- 学习写华为官网网页的心得