美文网首页
灰度形态学算法的实现

灰度形态学算法的实现

作者: 此间不留白 | 来源:发表于2020-09-22 15:50 被阅读0次
前言

灰度形态学算法中介绍了灰度形态学算法的相关原理,本篇文章将会利用python结合numpyopencv实现灰度形态学的一些基本算法,包括,膨胀,腐蚀,开运算,闭运算以及OBR算法和CBR算法。

如下图所示,是一个3×3的Structure Element的基本结构,本次实践中,以中心点坐标[2,2]作为SE的坐标原点。

实现灰度形态学算法之前,首先,需要将原始图像转换为灰度图像,,如下代码所示:

import cv2
import numpy as np
img = cv2.imread("./1582516629222.jpg")
cv2.imshow("original image",img)
cv2.waitKey(0)
img_gray = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)
cv2.imshow("Gray image",img_gray)
cv2.waitKey(0)

灰度膨胀和腐蚀算法的实现

实现灰度膨胀的代码和结果如下所示:

def GrayDialtion(img,SE):
    w,h = img.shape
    s_w,s_h = SE.shape
    img_d = np.zeros((w,h))
    img_d = img.copy()
    pos_i,pos_j = int(s_w/2),int(s_h/2)
    for i in range(pos_i,w-pos_i):
        for j in range(pos_j,h-pos_j):
            img_d[i,j] = int(np.max(img[i-pos_i:i+pos_i+1,j-pos_j:j+pos_j+1]))       
    return img_d

SE = np.ones([3,3])
img_dial = GrayDialtion(img_gray,SE)
cv2.imshow("Dial image",img_dial)
cv2.waitKey(0)

灰度腐蚀的相关代码和效果如下所示:

def GrayErosion(img,SE):
    w,h = img.shape
    s_w,s_h = SE.shape
    img_d = np.zeros((w,h))
    img_d = img.copy()
    pos_i,pos_j = int(s_w/2),int(s_h/2)
    for i in range(pos_i,w-pos_i):
        for j in range(pos_j,h-pos_j):
            img_d[i,j] = int(np.min(img[i-pos_i:i+pos_i+1,j-pos_j:j+pos_j+1]))       
    return img_d
img_erosion = GrayErosion(img_gray,SE)
cv2.imshow("Gray image",img_erosion)
cv2.waitKey(0)

灰度开运算和闭运算的实现

与二值形态学一样,灰度开运算和闭运算的也是通过灰度膨胀和腐蚀运算的组合而来,灰度开运算代码和效果如下图所示:

def GrayOpen(img,SE):
    img_e = GrayErosion(img,SE)
    img_o = GrayDialtion(img_e,SE)
    return img_o
img_o = GrayOpen(img_gray,SE)
cv2.imshow("open image",img_o)
cv2.waitKey(0)

灰度闭运算的代码和实现效果,如下所示:

def GrayClose(img,SE):
    img_d = GrayDialtion(img,SE)
    img_c = GrayErosion(img_d,SE)
    return img_c
img_c = GrayClose(img_gray,SE)
cv2.imshow("Closing Image",img_c)
cv2.waitKey(0)

OBR和CBR算法的实现

利用灰度形态学算法的组合,可以实现OBR和CBR算法,如下代码所示:

def OBRorCBR(img,SE,mode="OBR"):
    (w,h) = img.shape
    img_R = np.empty([w,h])
    img_copy = img.copy()
    if mode=="OBR":
        img_O = cv2.morphologyEx(img,cv2.MORPH_OPEN,SE)
    elif mode=="CBR":

        img_O = cv2.morphologyEx(img,cv2.MORPH_CLOSE,SE)
    
    while(True):
        img_O = GrayDialtion(img_O,SE)
        for i in range(w):
            for j in range(h):
                if(img_O[i,j]>img[i,j]):
                    img_copy[i,j] = img_O[i,j]
                    
                    
        if(img_copy==img_O).any():
            break
    return img_copy

相关文章

  • 灰度形态学算法的实现

    前言 灰度形态学算法中介绍了灰度形态学算法的相关原理,本篇文章将会利用python结合numpy和opencv实现...

  • 灰度形态学的基本应用

    上海交通大学 医学图像处理技术 形态学边缘检测(Edge Detection) 用灰度形态学实现的边缘检测,按照...

  • 灰度形态学基本运算

    上海交通大学 医学图像处理 与二值形态学相对应另一种形态学运算是灰度形态学。灰度形态学与二值形态学相比,不仅在图像...

  • 大米个数opencv

    算法思路: 1图片灰度化 2ostu阈值分割 3形态学处理,去除细小噪声 4使用canny轮廓提取,根据面积大小作...

  • 2022-01-28

    算法思路:1图片灰度化2ostu阈值分割3形态学处理,去除细小噪声4使用canny轮廓提取,根据面积大小作为约束条...

  • 39. 边缘检测

    本文解释Canny和sobel边缘检测算法。 1)Canny算法实现 步骤: 读取灰度图 高斯滤波 Canny算法...

  • 第 5 章 用形态学运算变换图像

    本章包括以下内容: 用形态学滤波器腐蚀和膨胀图像; 用形态学滤波器开启和闭合图像; 在灰度图像中应用形态学运算; ...

  • Android NDK开发:利用OpenCV实现图形验证码的提取

    目录 效果演示 实现原理 首先将图像转换为灰度图像,然后将图像转换为二值图像,然后利用形态学操作的开操作(先膨胀后...

  • 分水岭算法的应用

    上海交通大学医学图像处理 数学形态学一个应用是分水岭算法,为了便于理解,可以将图像的灰度空间与地球表面的地形高度相...

  • 34. 灰度处理

    本文解释灰度处理的方法实现与算法的优化 1) 灰度处理的三种方法: 灰度读取 颜色转换 求均值法 心理学公式 法1...

网友评论

      本文标题:灰度形态学算法的实现

      本文链接:https://www.haomeiwen.com/subject/emewyktx.html