失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 图像像素点赋值_医学图像处理教程(五)——医学图像边缘检测算法

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

时间:2022-08-31 22:32:57

相关推荐

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

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

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")

如果觉得《图像像素点赋值_医学图像处理教程(五)——医学图像边缘检测算法》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。