形态学操作—膨胀与腐蚀(Dilation and Erosion)

膨胀和腐蚀被称为形态学操作。它们通常在二进制图像上执行,类似于轮廓检测。通过将像素添加到该图像中的对象的感知边界,扩张放大图像中的明亮白色区域。侵蚀恰恰相反:它沿着物体边界移除像素并缩小物体的大小。

通常这两个操作是按顺序执行的,以增强重要的对象特征!

膨胀

要在OpenCV中扩展图像,您可以使用该dilate函数和三个输入:原始二进制图像,确定扩张大小的内核(无将导致默认大小),以及执行扩张的多次迭代(通常= 1)

在下面的例子中,我们有一个5x5的内核,它们在图像上移动,就像一个滤波器一样,如果任何周围的像素在5x5窗口中都是白色,则将像素变成白色!我们将使用草书字母“j”的简单图像作为示例。腐蚀

为了侵蚀图像,我们采用erode函数。代码语言:javascript复制# Reads in a binary image

image = cv2.imread(‘j.png’, 0)

# Create a 5x5 kernel of ones

kernel = np.ones((5,5),np.uint8)

# Dilate the image

dilation = cv2.dilate(image, kernel, iterations = 1)

# Erode the image

erosion = cv2.erode(image, kernel, iterations = 1)OPENING如上所述,这些操作通常组合在一起以获得理想的结果!一种这样的组合称为Opening,其是侵蚀,然后是膨胀

这在降噪中是有用的,其中侵蚀首先消除噪声(并收缩物体)然后扩张再次扩大物体,但噪声将从先前的侵蚀中消失!

为了在OpenCV中实现这一点,我们将函数morphologyEx与原始图像,我们想要执行的操作以及传入的内核一起使用。

代码语言:javascript复制opening = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)ClosingClosing 是Opening的反向组合,它是膨胀,然后是侵蚀。这对于关闭物体内的小孔或暗区很有用

它可用于关闭前景对象内的小孔或对象上的小黑点。

closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

Opening和Closing 操作试图提取关于物体形状的更好(更少噪声)信息或放大重要特征,如角点检测的情况!