做视觉的都知道opencv,但它只能处理2D的图像。对于医学图像处理,那就不得不祭出ITK(Insight Segmentation and Registration Toolkit)了(python下可以使用SimpleITK),这是一个非常强悍的3D分割和配准开源工具箱。下图是它所涉及的类别。

有必要花点时间对他里面的图像处理相关接口进行一次梳理,一方面可以系统性的了解整个图像处理和立体视觉相关的知识框架,也方便后面的使用。以下链接是官方函数说明手册,非常详细,本文制作部分梳理和解释,详细内容请参考以下文档。

https://itk.org/ItkSoftwareGuide.pdf​itk.org

1.Reading and Writing Images

这个就不多少了,dcm,nii.gz,nrrd,mha,mhd等几乎所有的医学影像的常见格式都支持。

2.Filtering

(1)阈值滤波器

二值阈值:BinaryThresholdImageFilter,阈值后得到二值图像
通用阈值:ThresholdImageFilter,阈值后,阈值范围内的图像保持不变,阈值范围外被设定为固定值。(有点像clip操作,更通用)

(2)边缘检测器

Canny边缘检测:CannyEdgeDetectionImageFilter,一种经典的边缘检测滤波器

(3)强制转换和灰度映射

  • 线性映射:

CastImageFilter:最简单,类型强壮,比如int转float
RescaleIntensityImageFilter:对范围进行重新映射,需输入转换后的最大值和最小值
ShiftScaleImageFilter:灰度上的平移和尺度变换,需输入平移量和尺度变化量
NormalizeImageFilter:归一化,减均值除方差。

  • 非线性映射:

SigmoidImageFilter,用Sigmoid函数进行映射,注意不是标准sigmoid函数,需要输入β和α参数:

(4)梯度

梯度幅度:GradientMagnitudeImageFilter
带平滑的梯度幅度:GradientMagnitudeRecursiveGaussianImageFilter,求梯度之前为了降低噪声的影响,通常会先做一个高斯滤波平滑,边缘提取效果会更好。
无平滑偏导:DerivativeImageFilter,计算沿某一轴方向上的偏导。

(5)二阶导

不平滑直接求导会放大很多噪声,尤其是二阶导。可以使用RecursiveGaussianImageFilter进行计算。

递归高斯滤波器:RecursiveGaussianImageFilter,一种快速的IIR高斯滤波器
拉普拉斯滤波器:LaplacianRecursiveGaussianImageFilter,直接计算二阶导

(6)邻域滤波

均值滤波:MeanImageFilter
中值滤波:MedianImageFilter

(7)数学形态学

  • 二值形态学

腐蚀:BinaryErodeImageFilter
膨胀:BinaryDilateImageFilter
可通过BinaryBallStructuringElement设置形态学操作子的大小

  • 灰度形态学:

腐蚀:GrayscaleErodeImageFilter
膨胀:GrayscaleDilateImageFilter
仍是使用BinaryBallStructuringElement设置形态学操作子的大小

(8)投票滤波器

投票的含义:领域内哪种类别多听谁,有点像投票。这叫投票操作。

二值中值滤波:BinaryMedianImageFilter,在二值图像上进行中值滤波,管用的二值图降噪(投票机制,周围相似哪个类别多就听谁,而不需要再排序)
二值空洞填充:VotingBinaryHoleFillingImageFilter,通过投票的方式实现的空洞填充操作。这种方式还有助于平滑边界。滤波效果本质上和边缘曲率有关系。
迭代空洞填充:VotingBinaryIterativeHoleFillingImageFilter,迭代运行上一个函数,有平滑边缘和空洞填充的效果。

(9)平滑滤波器

  • 模糊器

离散高斯模糊:DiscreteGaussianImageFilter,高斯分布被离散化后,用一个卷积核表示,然后卷积核在图像上进行卷积。这种方法存在的固有缺陷:方差大的高斯核需要更大的kernel size去编码,导致大方差高斯滤波计算量很大。递归IIR高斯滤波:SmoothingRecursiveGaussianImageFilter,为解决离散高斯滤波的固有缺陷,通过IIR滤波器,近似实现高斯卷积和求导。不同方差的高斯滤波都可以通过固定大小的卷积核实现。还可设置对其一阶或二阶导进行高斯滤波(可以通过这个实现二阶导)二项模糊:BinomialBlurImageFilter,计算每个维度上的最邻近平均,迭代进行,迭代次数越多结果越接近使用高斯核进行滤波的结果。

  • 局部模糊

GaussianBlurImageFunctionZ:文档中没有具体介绍

  • 边缘保持平滑

边缘保持的目的:一般的平滑,都会吧梯度大的地方削弱,所以边界信息也会丢失。保边去噪希望值去除孤立点噪声,保持边缘。

各向异性扩散:把图像看作热量场,每个pixel看做热流,根据和邻域像素的灰度差,决定是否向旁边扩散。和某个方向的邻域像素的灰度差异越大,向这个方向的扩散速度越慢。扩散过程就是在平滑图像,但是平滑的区域不会向边界扩散,从而达到保边的效果。梯度各向异性扩散:GradientAnisotropicDiffusionImageFilter,利用梯度控制扩散速率。扩散系数和梯度成反比。即传统的PM扩散。边缘增强特性,边缘对比度增加。曲率各向异性扩散:CurvatureAnisotropicDiffusionImageFilter。曲率在图像里面其实代表二阶导(梯度的变化),二阶导相比于一阶导的精细细节反映能力更好,而对大边界的反应能力差一些。因此该滤波器对对对比敏感度更低,但是可以保持更细节的结构信息。
曲率流:CurvatureFlowImageFilter,
最小最大曲率流
双边滤波

  • 向量和色彩图像的边缘保持平滑

向量梯度各向异性扩散
向量曲率各向异性扩散
彩图的梯度各向异性扩散
彩图的曲率各向异性扩散

  • 距离场

丹尼尔松距离场:DanielssonDistanceMapImageFilter,丹尼尔松提出的,

(10)几何变换

(11)频域

(12)表面提取

3.配准

4.分割

5.统计

未完待续...

阶跃函数卷积自己_ITK中的函数梳理和解释相关推荐

  1. Unity3D中的函数方法及解释

    一.刷新函数 Update 当MonoBehaviour启用时,其Update在每一帧被调用. LateUpdate 当Behaviour启用时,其LateUpdate在每一帧被调用. FixedUp ...

  2. php+imagick详解,PHP中imagick函数的中文解释_php技巧

    imagick的:: adaptiveBlurImage - 增加了自适应模糊滤镜图像 imagick的:: adaptiveResizeImage - 自适应调整图像数据依赖三角 imagick的: ...

  3. pandas中dropna函数_快速解释如何使用pandas的inplace参数

    介绍 在操作dataframe时,初学者有时甚至是更高级的数据科学家会对如何在pandas中使用inplace参数感到困惑. 更有趣的是,我看到的解释这个概念的文章或教程并不多.它似乎被假定为知识或自 ...

  4. Matlab中regress函数各参数解释

    转载博客:http://blog.csdn.net/yangss123/article/details/74008205 在matlab中regress()函数可以进行回归分析,regress()函数 ...

  5. MFC中UpdateData函数的使用解释

    解释之一 当你使用了ClassWizard建立了控件和变量之间的联系后:当你修改了变量的值,而希望对话框控件更新显示,就应该在修改变量后调用 UpdateData(FALSE):如果你希望知道用户在对 ...

  6. php imagick,PHP中imagick函数的中文解释_PHP

    imagick的:: adaptiveBlurImage - 增加了自适应模糊滤镜图像 imagick的:: adaptiveResizeImage - 自适应调整图像数据依赖三角 imagick的: ...

  7. php imagick 滤镜,PHP中imagick函数的中文解释

    imagick的:: adaptiveBlurImage - 增加了自适应模糊滤镜图像 imagick的:: adaptiveResizeImage - 自适应调整图像数据依赖三角 imagick的: ...

  8. matlab中repmat函数使用举例解释(会识字就能看懂)

    文章目录 一.repmat的其中一种基本使用方法(常用) 二.使用举例(可以参考m和n变化自行意会) 一.repmat的其中一种基本使用方法(常用) repmat(s,m,n) %repmat实为复制 ...

  9. matlab stem函数坐标轴_MATLAB中stem函数用法

    stem(Y) 将数据序列Y从x轴到数据值按照茎状形式画出,以圆圈终止.如果Y是一个矩阵,则将其每一列按照分隔方式画出. stem(X,Y)在X的指定点处画出数据序列Y.  stem(...,'fil ...

最新文章

  1. SOA的缺陷及其与微服务的关系
  2. MyBatisPlus自动生成代码springboot+mybatis+mysql 以及动态sql生成方法(测试可用版)
  3. ZZULIOJ 1060:逆序数字
  4. 利用Office Chart 制作柱图(一个柱子)
  5. Java 反射机制之 Class
  6. Stimulsoft Reports.Web 2022.2.3 Crack
  7. 斗地主系列之牌型判断
  8. html+div+动画效果,CSS3效果:animate实现点点点loading动画效果(一)
  9. 45本程序员圣经级别书籍,包邮送到家
  10. 高薪程序员面试题精讲系列23之说一下如何实现文件上传、下载以及断点续传?
  11. “过关斩将”的第一台电脑
  12. cle IMP-00015: 由于对象已存在, 下列语句失败
  13. nonlocal和global的区别
  14. C#筛选DataTable的数据
  15. 不会吧不会吧?价值“百万”的社招面试题惨遭泄露:猛补了这个,真香...
  16. 什么是域名解析?具体是如何实现的?--金万维
  17. 关于“拉丁方”的C语言程序
  18. 逐年大幅扩招,进入这所全球第24位的CS院校越来越容易?
  19. 哈夫曼树与哈夫曼编码:
  20. [附源码]java毕业设计新闻发布和评论管理系统

热门文章

  1. Matlab 线性方程拟合,求助 用matlab拟合三元线性回归方程及分析
  2. LocalDateTime 获取当前(年/月)第一天及最后一天 及 获取当天起始时间
  3. 族蚂网搭建网站最重要的因素是什么?
  4. Android MIME TYPE的基本用法
  5. 古月居机器视觉开发——ROS+opencv的图像处理方法(三)
  6. The Devops Handbook 读书笔记02 PartI
  7. DevOps整合Jenkins+k8s
  8. u盘运行linux失败,u盘安装linux失败的解决方法
  9. Chrome没有扩展程序选项怎么解决
  10. oracle的rac没有同步序列,oracle rac序列乱