SimpleITK笔记本中ITK细分(Segmentation)介绍

目标:熟悉ITK中可用的基本分割算法,并以交互方式探索其参数空间。

图像分割滤波器处理图像,将其分割成(希望)有意义的区域。输出通常是整数的图像,其中每个整数可以表示一个对象。值0通常用于背景,值1(有时为255)用于前景对象。

%matplotlib inline
import matplotlib.pyplot as plt
from ipywidgets import interact, FloatSlider
import SimpleITK as sitk
# Download data to work on
%run update_path_to_download_script
from downloaddata import fetch_data as fdata
from myshow import myshow, myshow3d
<Figure size 640x480 with 0 Axes>
img_T1 = sitk.ReadImage(fdata("nac-hncma-atlas2013-Slicer4Version/Data/A1_grayT1.nrrd")
img_T2 = sitk.ReadImage(fdata("nac-hncma-atlas2013-Slicer4Version/Data/A1_grayT2.nrrd"))# 要可视化RGB中的标签图像,需要0-255范围的图像
img_T1_255 = sitk.Cast(sitk.RescaleIntensity(img_T1), sitk.sitkUInt8) # 将图像转换为sitkUInt8类型img_T2_255 = sitk.Cast(sitk.RescaleIntensity(img_T2), sitk.sitkUInt8)myshow3d(img_T1)
Fetching nac-hncma-atlas2013-Slicer4Version/Data/A1_grayT1.nrrdFetching nac-hncma-atlas2013-Slicer4Version/Data/A1_grayT2.nrrd

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KPqemDXI-1680056431591)(SimpleITK笔记本中ITK细分.fld/image001.png)]

阈值

阈值是最基本的分割形式。它只是根据强度范围对图像的像素进行标记,而不考虑几何形状或连通性。

seg = img_T1 > 200 # 阈值分割
myshow(sitk.LabelOverlay(img_T1_255, seg), "Basic Thresholding") # sitk.LabelOverlay()函数将标签图像与原始图像叠加

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ama6eTt2-1680056431595)(SimpleITK笔记本中ITK细分.fld/image002.png)]

seg = sitk.BinaryThreshold(
img_T1, lowerThreshold=100, upperThreshold=400, insideValue=1, outsideValue=0) # 二值化阈值分割
myshow(sitk.LabelOverlay(img_T1_255, seg), "Binary Thresholding")

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VgWusIqB-1680056431596)(SimpleITK笔记本中ITK细分.fld/image003.png)]

ITK有许多基于直方图的自动阈值滤波器,包括Huang,MaximumEntropy,Triangle和流行的Otsu方法。这些方法创建一个直方图,然后使用启发式方法来确定阈值。

Otsu’s method: https://en.wikipedia.org/wiki/Otsu%27s_method 大津算法的基本思想是:对于给定的图像,计算图像中所有像素的灰度值的直方图,然后从中找到一个阈值,使得在该阈值下前景和背景的类间方差最大。

otsu_filter = sitk.OtsuThresholdImageFilter() # Otsu阈值分割
otsu_filter.SetInsideValue(0) # 设置内部值
otsu_filter.SetOutsideValue(1) # 设置外部值
seg = otsu_filter.Execute(img_T1) # 执行Otsu阈值分割
myshow(sitk.LabelOverlay(img_T1_255, seg), "Otsu Thresholding") # sitk.LabelOverlay()函数将标签图像与原始图像叠加
print(otsu_filter.GetThreshold()) # 打印阈值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fa6Gl2Uc-1680056431597)(SimpleITK笔记本中ITK细分.fld/image004.png)]

236.40869140625

区域生长分割(Region Growing Segmentation)

首先改进朴素阈值的第一步是一类称为区域生长的算法。这包括:

· 连接阈值(ConnectedThreshold)

· 连接置信(ConfidenceConnected)

· 向量置信(VectorConfidenceConnected)

· 邻域连接(NeighborhoodConnected)

我们之前使用3D_Slicer来确定索引:(132,142,96)是左侧侧腔的一个好种子。

seed = (132, 142, 96) # 设置种子点
seg = sitk.Image(img_T1.GetSize(), sitk.sitkUInt8) # 创建一个与img_T1相同大小的图像
seg.CopyInformation(img_T1) # 复制图像信息
seg[seed] = 1 # 设置种子点
seg = sitk.BinaryDilate(seg, [3] * 3) # 二值膨胀
myshow(sitk.LabelOverlay(img_T1_255, seg), "Initial Seed") # sitk.LabelOverlay()函数将标签图像与原始图像叠加

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hZzwg9f6-1680056431598)(SimpleITK笔记本中ITK细分.fld/image005.png)]

seg = sitk.ConnectedThreshold(img_T1, seedList=[seed], lower=100, upper=190) # 连通阈值分割
myshow(sitk.LabelOverlay(img_T1_255, seg), "Connected Threshold") # 【译】标图叠加

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cIDf6vef-1680056431599)(SimpleITK笔记本中ITK细分.fld/image006.png)]

更好的是,置信连接滤波器使用初始种子或当前分割来估计阈值范围。

seg = sitk.ConfidenceConnected(img_T1, seedList=[seed], numberOfIterations=1, multiplier=2.5, initialNeighborhoodRadius=1, replaceValue=1) # 置信度连通分割
myshow(sitk.LabelOverlay(img_T1_255, seg), "ConfidenceConnected") # 标图叠加

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AzMUTIwj-1680056431601)(SimpleITK笔记本中ITK细分.fld/image007.png)]

img_multi = sitk.Compose(img_T1, img_T2) # 将两幅图像合并为一个多通道图像
seg = sitk.VectorConfidenceConnected(img_multi, seedList=[seed], numberOfIterations=1, multiplier=2.5, initialNeighborhoodRadius=1) # 多通道置信度连通分割
myshow(sitk.LabelOverlay(img_T1_255, seg), "VectorConfidenceConnected") # 标图叠加

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gUlYxOw7-1680056431602)(SimpleITK笔记本中ITK细分.fld/image008.png)]

快进分割(Fast Marching Segmentation)

快进图像滤波器实现了一个快速行进的简单水平集演化问题(欧几里得方程)的解决方案。在这个例子中,微分方程中使用的速度项以图像的形式提供。速度图像基于梯度幅度,并映射为有界倒数1/(1+

SimpleITK笔记本中ITK细分(Segmentation)介绍相关推荐

  1. Java基础-JAVA中常见的数据结构介绍

    Java基础-JAVA中常见的数据结构介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是数据结构 答:数据结构是指数据存储的组织方式.大致上分为线性表.栈(Stack) ...

  2. nullmax纽劢科技:《行泊一体中的感知方案介绍》

    行泊一体中的感知能力介绍,数据闭环.BEV感知方案等,nullmax纽劢科技CV首席科学家成二康博士的分享 Nullmax 感知部总监兼计算机视觉首席科学家成二康博士,前段时间做客汽车之心·行家说栏目 ...

  3. ThinkPad T460p笔记本中Win10+Ubuntu17.04双系统安装方法(UEFI引导模式)

    ThinkPad T460p笔记本中Win10+Ubuntu17.04双系统安装方法(UEFI引导模式) 本人有一台ThinkPad T460p型笔记本电脑,只有一块硬盘,需在该硬盘上同时安装Win1 ...

  4. 笔记本拆c面_笔记本如何正确拆解 笔记本拆解方法【步骤介绍】

    在 笔记本 使用的过程中总会出现更换键盘.更换固态硬盘.内存条等情况,有时还需对笔记本进行清灰.改造散热处理,升级SSD更是眼下最流行的改造,这个时候就需要对笔记本进行拆解.那么,笔记本电脑如何正确拆 ...

  5. 笔记本保养技巧的详细介绍

        内容提要:笔记本保养技巧的详细介绍,刚买的笔记本我们应该好好爱惜它,那么如何保养笔记本电脑?本文小编就为大家介绍几种常见的笔记本电脑不正当使用方式. 刚买的笔记本我们应该好好爱惜它,那么如何保 ...

  6. 拆解计算机步骤,笔记本如何正确拆解 笔记本拆解方法【步骤介绍】

    在 笔记本 使用的过程中总会出现更换键盘.更换固态硬盘.内存条等情况,有时还需对笔记本进行清灰.改造散热处理,升级SSD更是眼下最流行的改造,这个时候就需要对笔记本进行拆解.那么,笔记本电脑如何正确拆 ...

  7. Blender中的Python脚本介绍学习教程

    Blender中的Python脚本介绍学习教程 MP4 |视频:h264,1280×720 |音频:AAC,48000 Hz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:1.63 ...

  8. django中使用celery简单介绍

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 本章节我们重点在于实现,如何存储任务的结果. 我们将任务函数改为: from celery_demo.celery im ...

  9. pythonexcel介绍_Python 中pandas.read_excel详细介绍

    Python 中pandas.read_excel详细介绍 #coding:utf-8 import pandas as pd import numpy as np filefullpath = r& ...

最新文章

  1. 用 JS 做一个数独游戏(二)
  2. ajax 返回数组某个属性值,js中sort方法根据数组中对象的某一个属性值进行排序...
  3. SAP HANA中的SLT简介
  4. ubuntu 12.04 /sbin/ldconfig.real: /usr/local/lib/*.so.8 不是符号连接 解决办法
  5. 有多个python版本_python 多版本共存
  6. spring-boot项目打war包并部署到本地的tomcat容器
  7. python猜猜我是几,我在python中猜数游戏的问题
  8. sqlyog for MySQL远程连接的时候报错mysql 1130的解决方法
  9. 魅族 linux 手机,魅族flyme开源,能否再现linux辉煌,为什么要开源
  10. java高质量图片压缩
  11. raft算法_golang-raft算法理论与实践
  12. Windows平台下使用GoLand生成Linux可执行文件
  13. Javaweb面试题及答案
  14. 开根号的笔算算法图解_怎么用笔算开根号?
  15. 我的世界神秘时代研究笔记计算机,我的世界神秘时代5教程全研究笔记连线一览...
  16. 【转换输出流小练习 】现有一字符串:”我爱Java”。将该字符串保存到当前项目根目录下的a.txt文件中。​
  17. python房地产_如何用Python爬虫投资房产,走向人生巅峰?
  18. Axure计算器原型
  19. 一加android系统用电量大,一加6T被曝将预装Android P 这一点其它品牌比不了
  20. MATLAB的乘法函数,Matlab乘法函数

热门文章

  1. 使用ASP.NET Core构建RESTful API的技术指南
  2. 新华三杯复赛实验-虚拟局域网与IPv4 IGP路由部署解析
  3. 配置数据源(DataSource)
  4. 分布式中间件──断路器
  5. 【转发】微信小程序详细图文教程
  6. 某航空公司客户价值分析
  7. linux获取偶数行内容,linux命令(39):shell 打印偶数行,奇数行 ,行号
  8. Pytorch的model.train() model.eval() torch.no_grad() 为什么测试的时候不调用loss.backward()计算梯度还要关闭梯度
  9. 关于SQL语句的左连接和右连接,内连接和外连接的区别
  10. Linux之基础IO