ITK基础(一) —— 二值化分割!

ITK 全称为 Insight Toolkit ,是一款开源、跨平台、用于图像分析工具包,开发遵循极限编程,主流使用语言为 C++,但目前开发团队已经提供了面向 Python 的接口。

ITK 内部封装了许多优秀算法。ITK 可用于图像处理、配准、分割等领域,处理维度面向二维、三维或者更高维度

原理讲解

本文为 ITK 系列教程的第一篇文章,主要介绍该工具包中二值化分割功能的实现;图像分割的目的通过改变图像像素值,来提取我们想要的区域,一般是图像处理的大前提;

ITK 中的二值化分割主要用到 itk::BinaryThresholdImageFilter 过滤器,其分割原理图如下:

Snipaste_2020-05-03_15-50-50.png

二值化分割是分割方法中最基础的,通过定义 Lower 和 Upper 两个像素临界点,只要图像中像素在

P = { I n s i d e v a l u e L o w e r T h r e s h o l d < = P < = U p p e r T h r e s h o l d O u t s i d e v a l u e l o w e r T h r e s h o l d > P ; P > U p p e r T h r e s h o l d P = \left\{ \begin{aligned} Inside value & &{LowerThreshold<= P <= UpperThreshold}\\ Outside value & & {lowerThreshold>P; P> UpperThreshold}\\ \end{aligned} \right. P={InsidevalueOutsidevalueLowerThreshold<=P<=UpperThresholdlowerThreshold>P;P>UpperThreshold
只要图像像素值在这两个值之间,则该像素值将改编为 Insidevalue;否则将改为 Outsidevalue;最终图像的像素值只有两种:Insidevalue 或者是 Outsidevalue;

注:上面的 Insidevalue、Outsidevalue、Lowervalue、Uppervalue 四个参数是用户自己设定的。

代码实现

上文已经提到了,二值化分割主要用到的头文件为 itkBinaryThresholdImageFilter ,该过滤器主要通过设置四个参数来完成分割效果。

下面的代码部分就是关于二值分割的功能实现,代码中,依次进行图像读取、参数设定、二值化处理、图像写出等一系列步骤

#include<itkBinaryThresholdImageFilter.h>
#include<itkImage.h>
#include<itkImageFileReader.h>
#include<itkImageFileWriter.h>
#include<itkPNGImageIOFactory.h>
#include<string.h>

using namespace std;

int Binary_Threshold()
{

	itk::PNGImageIOFactory::RegisterOneFactory();

	string input_name = "D:/ceshi1/ITK/Filter/Threshold_Seg/input.png";
	string output_name = "D:/ceshi1/ITK/Filter/Threshold_Seg/output.png";


	using InputPixelType = unsigned char;
	using OutputPixelType = unsigned char;
	
	using InputImageType = itk::Image<InputPixelType, 2>;
	using OutputImageType = itk::Image<OutputPixelType, 2>;
	
	using FilterType = itk::BinaryThresholdImageFilter<InputImageType, OutputImageType>;
	
	using ReaderType = itk::ImageFileReader<InputImageType>;
	using WriterType = itk::ImageFileWriter<OutputImageType>;
	
	ReaderType::Pointer reader = ReaderType::New();
	WriterType::Pointer writer = WriterType::New();
	
	FilterType::Pointer filter = FilterType::New();
	
	reader->SetFileName(input_name);

	filter->SetInput(reader->GetOutput());
	writer->SetInput(filter->GetOutput());
	writer->SetFileName(output_name);
	
	const OutputPixelType  outsidevalue = 0;
	const InputPixelType  insidevalue = 255;
	
	filter->SetOutsideValue(outsidevalue);
	filter->SetInsideValue(insidevalue);
	
	const InputPixelType lowerThreshold = 150;
	const OutputPixelType upperThreshold = 180;


	filter->SetUpperThreshold(upperThreshold);
	filter->SetLowerThreshold(lowerThreshold);
	
	try
	{
		filter->Update();// Running Filter;
		writer->Update();//Runing Writer;

	}
	catch(exception &e)
	{
		cout << "Caught Error!" << endl;
		cout << e.what() << endl;

		return EXIT_FAILURE;
	}

	return EXIT_SUCCESS;
	
}

这里 Insidevalue 设置为 0 (黑色),Outsidevalue 设置为 255(白色);阈值分割区间设为 (150,180 );选取的分割图像为 ITK 官方提供的脑部切片 PNG 图片,最终的分割结果如下

Snipaste_2020-05-03_16-29-53.png

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: ITK(Insight Segmentation and Registration Toolkit)是一个广泛应用于医学图像分割领域的开源软件库。对于零基础入门ITK医学图像分割,我们可以通过以下资料进行学习和掌握。 首先,可以阅读ITK官方文档。ITK官方网站提供了详细的教程、示例代码和文档,包括了从基本概念到高级应用的内容,非常适合新手入门。官方文档提供了ITK基础知识、安装指南、示例代码以及常见问题解答等。 其次,可以参考ITK的官方例子。ITK官方示例包含了许多不同领域的应用案例,其中包括医学图像分割。通过实际的示例代码,可以帮助我们理解和掌握ITK的使用方法和技巧。 此外,还可以参考相关的学术论文和教材。许多学术论文和教材介绍了ITK在医学图像分割方面的应用,其中包含了分割算法的原理和实现方法。这些资源对于理解医学图像分割的基本原理和ITK的具体应用具有重要的参考价值。 此外,网络上也有一些ITK的教学视频和博客文章。通过观看教学视频和阅读博客文章,可以系统地学习和了解ITK的各方面知识。 最后,为了更好地掌握ITK医学图像分割,建议进行实践。通过自己动手实现一些简单的医学图像分割任务,可以更深入地了解ITK的使用方法和功能。 总之,对于零基础入门ITK医学图像分割,通过阅读官方文档、参考示例、学习论文和教材、观看教学视频以及实践操作,可以逐步掌握ITK的使用方法和医学图像分割的基本原理,从而能够独立完成一些简单的医学图像分割任务。 ### 回答2: ITK(Insight Toolkit)是一种开源的、跨平台的图像处理库,广泛应用于医学图像分割领域。针对零基础入门ITK医学图像分割的资料汇总,可以从以下几个方面进行总结: 1. 官方文档:ITK官方网站提供了详细的文档和教程,包括ITK的安装、基本使用、图像分割算法等方面的介绍。官方文档对于初学者来说是学习和理解ITK基础资料。 2. 书籍:有一些关于ITK的图书介绍了ITK的基本原理和使用方法,其中包括医学图像分割的内容。例如《ITK软件指南》(Insight into Images, Augustin et al.),该书详细介绍了ITK的基本原理和使用,并提供了一些医学图像分割实例。 3. GitHub仓库:在GitHub上,可以找到一些ITK相关的项目和代码仓库。这些仓库中包含了实际应用ITK进行医学图像分割的代码和示例。可以通过查看这些代码仓库来学习如何使用ITK进行医学图像分割。 4. MOOC课程:一些在线教育平台提供了关于ITK医学图像分割的课程。通过参加这些课程,可以系统学习ITK基础知识和医学图像分割的相关算法。 5. 论坛和社区:在ITK的官方论坛和其他一些相关的论坛或社区上,可以与其他ITK用户和开发者进行交流和讨论。在这些论坛和社区中,可以提问问题、学习新的技术和解决问题。 以上是零基础入门ITK医学图像分割资料的汇总。通过学习相关的资料和参与实际的项目或讨论,可以逐步掌握ITK的基本原理和医学图像分割的技术。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员大飞1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值