眼底图像- 图像边缘检测-拉普拉斯算法

在眼底图像处理时,先进行图像的预处理,需要提取血管灰度图像进行分析,但图像可能比较暗,还有噪音。

需要进行灰度图像增强,对噪音区采取图像平滑,消除图像中噪声的干扰,或者降低对比度。

对眼底血管的边缘末梢,需要进行图像锐化,提高对比度。

即当邻域中心像素灰度低于它所在的领域内其它像素的平均灰度时,将此中心像素的灰度应进一步降低,

当邻域中心像素灰度高于它所在的邻域内其它像素的平均灰度时,将此中心像素的灰度应被进一步提高,

以此实现图像的锐化处理。

大家知道,函数的一阶微分描述了函数图像是变化方向,即增长或者降低;

而二阶微分描述的则是图像变化的速度,急剧增长下降还是平缓的增长下降。

图像的一阶偏微分和推出的二元函数微分:

眼底图像- 图像边缘检测-拉普拉斯算法_第1张图片

一阶微分法能够用来检测图像边缘是否存在。

那么二阶微分法,也就是拉普拉斯算子就可以确定边缘的位置。(有的文章中称下式为拉普拉斯掩膜中心系数)

据此我们可以推出依据二阶微分能够找到图像的色素的过渡程度,例如白色到黑色的过渡就是比较急剧的。

拉普拉斯锐化图像处理就是这个思想。

根据图像中某个像素的周围像素到此像素的突变程度有关,我们可以进行图像边缘检测。运用拉普拉斯增强图像的细节,找到图像的边缘。但是有时候会把噪音也给增强了,所以在锐化前对图像进行平滑处理。

这样可以找到一个模板矩阵:

这个成为四邻域也就是上面的二阶微分法

这个是八邻域。

从上面的两种模板中就可以看出,如果一个黑色平面中有一个白点,那么模板矩阵可以使这个白点更亮。

由于图像边缘就是灰度发生跳变的区域,所以拉普拉斯模板对边缘检测很有用。

八邻域的表示法为:将算得的值替换原(x,y)处的像素值,可以得到类似边界的地方,然后根据下式得到锐化图像:

 

大家下面可以从选取各拉普拉斯算子和执行的结果图像中体会。图1是源图

图2中间有亮区,因为kernel1算子是小数。图3 没有这个问题,其kernel2算子是整数,

图6 中部分血管有反常的白点,kernel 5算子中有-1的原因

def laplasFilter(img_src):

    kernel1 = np.array(([0.0625, 0.125, 0.0625],
                       [0.125, 0.25, 0.125],
                       [0.0625, 0.125, 0.0625]),
                      dtype="float32"
                      )
    kernel2 = np.array(([1, 2, 1],
                       [2, 4, 2],
                       [1, 2, 1]),
                      dtype="float32"
                      )

    kernel3 = np.array(([1, 2, 1],
                       [2, 8, 2],
                       [1, 2, 1]),
                      dtype="float32"
                      )

    kernel4 = np.array(([0, 1, 0],
                       [1, 8, 1],
                       [0, 1, 0]),
                      dtype="float32"
                      )
    kernel5 = np.array(([-1, 1, -1],
                       [-1, 8, -1],
                       [-1, 1, -1]),
                      dtype="float32"
                      )

    img_dst1 = cv2.filter2D(img_src, -1, kernel1)      
    image_Enhance1 = img_src + img_dst1
    cv2.imshow("laplas1", image_Enhance1)

    img_dst2 = cv2.filter2D(img_src, -1, kernel2)     
    image_Enhance2 = img_src + img_dst2
    cv2.imshow("laplas2", image_Enhance2)

    img_dst3 = cv2.filter2D(img_src, -1, kernel3)      
    image_Enhance3 = img_src + img_dst3
    cv2.imshow("laplas3", image_Enhance3)

    img_dst4 = cv2.filter2D(img_src, -1, kernel4)     
    image_Enhance4 = img_src + img_dst4
    cv2.imshow("laplas4", image_Enhance4)

    img_dst5 = cv2.filter2D(img_src, -1, kernel5)     
    image_Enhance5 = img_src + img_dst5
    cv2.imshow("laplas5", image_Enhance5)
源图像

眼底图像- 图像边缘检测-拉普拉斯算法_第2张图片

眼底图像- 图像边缘检测-拉普拉斯算法_第3张图片

眼底图像- 图像边缘检测-拉普拉斯算法_第4张图片

眼底图像- 图像边缘检测-拉普拉斯算法_第5张图片

眼底图像- 图像边缘检测-拉普拉斯算法_第6张图片眼底图像- 图像边缘检测-拉普拉斯算法_第7张图片

       
 

你可能感兴趣的:(眼底图像- 图像边缘检测-拉普拉斯算法)