今天将给大家分享医学图像常见两种图像边缘检测算法。

1、Sobel算子操作

Sobel算子的思想,邻域的像素对当前像素产生的影响不是等价的,所以距离不同的像素具有不同的权值,对算子结果产生的影响也不同。一般来说,距离越远,产生的影响越小。Sobel算子计算原理,对传进来的图像像素做卷积,卷积的实质是在求梯度值,或者说给了一个加权平均,其中权值就是所谓的卷积核;然后对生成的新像素灰度值做阈值运算,以此来确定边缘信息。

我们使用SobelEdgeDetectionImageFilter()函数来计算图像梯度,梯度是有幅值和方向的,返回的Sobel梯度结果是梯度幅值。没有需要输入的参数,直接输入2d或3d图像就可以了,这边还要提醒一下,输入的图像必须是float类型的图像才可以计算。

image_float = sitk.Cast(image, sitk.sitkFloat32)# sobelsobel_op = sitk.SobelEdgeDetectionImageFilter()sobel_sitk = sobel_op.Execute(image_float)sobel_sitk = sitk.Cast(sobel_sitk, sitk.sitkInt16)sitk.WriteImage(sobel_sitk, "sobel_sitk.mha")

2、Canny边缘检测操作

Canny边检检测算法由4步组成的,(1)、对输入图像进行高斯滤波平滑,(2)、计算平滑图像的导数包括幅值和方向,(3)、导数幅值非最大值抑制:判断领域中心处与相邻像素导数赋值比大小,抑制非极大值,(4)、双边阈值算法检测和连接边缘。

(1)、为了尽可能减少噪声对边缘检测结果的影响,所以必须滤除噪声以防止由噪声引起的错误检测。为了平滑图像,使用高斯滤波器与图像进行卷积,该步骤将平滑图像,以减少边缘检测器上明显的噪声影响。重要的是需要理解,高斯卷积核大小的选择将影响Canny检测器的性能。尺寸越大,检测器对噪声的敏感度越低,但是边缘检测的定位误差也将略有增加。一般5x5是一个比较不错选择。

(2)、图像中的边缘可以指向各个方向,因此Canny算法使用四个算子来检测图像中的水平、垂直和对角边缘。边缘检测的算子(如Roberts,Prewitt,Sobel等)返回水平Gx和垂直Gy方向的一阶导数值,由此便可以确定像素点的梯度G和方向theta 。

(3)、非极大值抑制是一种边缘稀疏技术,非极大值抑制的作用在于“瘦”边。对图像进行梯度计算后,仅仅基于梯度值提取的边缘仍然很模糊。但是边缘有且应当只有一个准确的响应。而非极大值抑制则可以帮助将局部最大值之外的所有梯度值抑制为0,对梯度图像中每个像素进行非极大值抑制的算法是:将当前像素的梯度强度与沿正负梯度方向上的两个像素进行比较;如果当前像素的梯度强度与另外两个像素相比最大,则该像素点保留为边缘点,否则该像素点将被抑制。

(4)、在施加非极大值抑制之后,剩余的像素可以更准确地表示图像中的实际边缘。然而,仍然存在由于噪声和颜色变化引起的一些边缘像素。为了解决这些杂散响应,必须用弱梯度值过滤边缘像素,并保留具有高梯度值的边缘像素,可以通过选择高低阈值来实现。如果边缘像素的梯度值高于高阈值,则将其标记为强边缘像素;如果边缘像素的梯度值小于高阈值并且大于低阈值,则将其标记为弱边缘像素;如果边缘像素的梯度值小于低阈值,则会被抑制。阈值的选择取决于给定输入图像的内容。被划分为强边缘的像素点已经被确定为边缘,因为它们是从图像中的真实边缘中提取出来的。然而,对于弱边缘像素,将会有一些争论,因为这些像素可以从真实边缘提取也可以是因噪声或颜色变化引起的。为了获得准确的结果,应该抑制由后者引起的弱边缘。通常,由真实边缘引起的弱边缘像素将连接到强边缘像素,而噪声响应未连接。为了跟踪边缘连接,通过查看弱边缘像素及其8个邻域像素,只要其中一个为强边缘像素,则该弱边缘点就可以保留为真实的边缘。

我们使用CannyEdgeDetectionImageFilter()函数提取图像的边缘。参数有4个需要人为设置,双边阈值的上限阈值和下限阈值,高斯平滑由两个参数来控制高斯核参数大小,高斯最大误差,必须设置在0~1之间。这边还要提醒一下,输入的图像必须是float类型的图像才可以计算。

# cannycanny_op = sitk.CannyEdgeDetectionImageFilter()canny_op.SetLowerThreshold(40)canny_op.SetUpperThreshold(120)canny_op.SetVariance(3)canny_op.SetMaximumError(0.5)canny_sitk = canny_op.Execute(image_float)canny_sitk = sitk.Cast(canny_sitk, sitk.sitkInt16)sitk.WriteImage(canny_sitk, "canny_sitk.mha")

图像像素点赋值_医学图像处理教程(五)——医学图像边缘检测算法相关推荐

  1. 【图像处理】——Python图像分割边缘检测算法之二阶梯度算子(laplace、log、dog算子)

    目录 一.二阶算子简介 二.laplace(拉普拉斯算子) 1.什么是拉普拉斯算子 (1)连续二维函数的二阶导 (2)离散二维函数的二阶导数 2.常用算子模块及代码 3.结果 三.log算子 1.什么 ...

  2. 【图像处理】——Python图像分割边缘检测算法之一阶梯度算子(Roberts、Prewitt、Sobel、 Kirsch、Canny算子)

    目录 前言 一.边缘检测算法 1.一阶算子 2.二阶算子 二.一阶算子 原图像lena 1.Roberts算子 不同方向的算子模板 梯度的计算 系统代码: 自定义函数代码 结果 2.Prewitt 不 ...

  3. python灰度图片格式_[Python图像处理] 十五.图像的灰度线性变换

    [Python图像处理] 十五.图像的灰度线性变换 发布时间:2019-03-28 00:08, 浏览次数:619 , 标签: Python 该系列文章是讲解Python OpenCV图像处理知识,前 ...

  4. 如何给图片赋值_医学数据的变量类型及在SPSS中的赋值方法(医学统计前的重要步骤)——【杏花开医学统计】...

    杏花开生物医药统计 一号在手,统计无忧! 关 注 医学数据的变量类型 及在SPSS中的赋值方法 关键词:医学数据,变量类型,赋值,spss 下方为视频版和音频版,含软件操作步骤 导  读 不同的医学数 ...

  5. 图像处理:推导Canny边缘检测算法

    目录 概述 最优边缘检测 算法实现的步骤 1.灰度化与高斯滤波 2.计算图像的梯度和梯度方向 3.非极大值抑制 4.双阈值筛选边缘 5.利用滞后的边界跟踪 6.在图像中跟踪边缘 数学推导 Opencv ...

  6. 图像像素点赋值_Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像...

    普通操作 1. 读取像素 读取像素可以通过行坐标和列坐标来进行访问,灰度图像直接返回灰度值,彩色图像则返回B.G.R三个分量. 需要注意的是, OpenCV 读取图像是 BGR 存储显示. 灰度图片读 ...

  7. python与医学图像处理_医学图像处理与深度学习(一)

    从本文开始,作者将开始介绍图像处理的基础知识,基本的医学图像数据,并且对这些数据进行可视化处理. 利用深度学习技术,分析图像与视频,并且将之应用在诸如自动驾驶,无人机等等领域已经成为最新研究方向.在最 ...

  8. python图像腐蚀处理_[Python图像处理]八.图像腐蚀和图像膨胀

    图像腐蚀 1.基础理论 形态学转换主要针对的是二值图像(0/1)图像类似于领域被蚕食,将图像中的高亮区域白色部分进行缩减细化,其运行结果图比原图的高亮区域更小.主要包括两个输入对对象: 二值图像,卷积 ...

  9. matlab 通过矩阵变换使图像旋转平移_数字图像处理|P11 第三章 第四节 图像的几何变换...

    第四节 几何变换 图像生成过程中,由于系统本身具有非线性或拍摄角度不同,会使生成的图像产生几何失真.几何失真一般分为系统失真和非系统失真,系统失真是有规律的.能预测的:非系统失真则是随机的.例如:(1 ...

最新文章

  1. [原]SSL 开发简述(Delphi)
  2. 导入Flex/Flash项目后的一个简单错误:无法创建 HTML 包装器
  3. C# 加载 SQLite DLL问题
  4. 学习Java第一个月
  5. 在C#代码中应用Log4Net 中配置文件的解释
  6. Bash : 索引数组
  7. 经典面试题(34):以下代码将输出的结果是什么?
  8. arch linux 进入黑屏,无法从Arch Linux进入Beaglebone Black
  9. 远程多台前置机连接服务器上配置作业,得到作业运行历史记录
  10. 俗话说开店容易,守店难,这句话是错的,百分之一万是错的,守店怎么会难?
  11. 谁说国产编译器没救了?这个 C/C++ 和 JavaScript 编译器来了 | 程序人生 2020
  12. python编程入门-Python编程入门经典pdf(Python编程入门教程) 高清中文版
  13. C#网络编程(异步传输字符串) - Part.3
  14. uchar与char
  15. 指向API的函数指针定义方法
  16. 【神器】这三款网络抓包工具在手,同事想甩锅都难!
  17. 软著申请详细图文步骤(附模板)
  18. 课程设计(银行叫号机系统)
  19. ajax die,check_ajax_referer()
  20. 视频二维码在线生成器怎么用?

热门文章

  1. 卷积学习与图像识别的技术发展
  2. 用OpenCV实现页面扭曲矫正
  3. 竟有内鬼!北理工硕士生「复制粘贴」论文,旷视研究员最新声明
  4. OpenCV寻找复杂背景下物体的轮廓
  5. Nginx 安装及配置
  6. linux交换分区的优化-参数优化必选
  7. 1.2 CentOS6 命令行配置静态IP地址步骤
  8. 抢红包要当心!钱盾反诈平台专家揭秘3类假红包骗局
  9. 使用Maven管理Java项目
  10. centos查看cached内部文件