Python图像处理笔记——形态学处理(skimage.morphology)

文章目录

一、前言

算法类型:
膨胀、腐蚀、开运算、闭运算、梯度运算、礼帽运算、黑帽运算,击中与击不中变换

应用:

  • 消除噪声、提取边界、填充区域、提取连通分量、凸壳、细化、粗化等;
  • 分割出独立的图像元素,或者图像中相邻的元素;
  • 求取图像中明显的极大值区域和极小值区域;
  • 求取图像梯度等等

1. 腐蚀(Erode)

将物体的 边缘加以腐蚀。拿一个宽m高n的矩形作为kernel,对图像中的每一个像素进行扫描,扫描后的图像的每个像素点和原图的位置对应,同时和扫描时kernel的中心点对应。

用kernel遍历原图的所有像素,每遍历一次就将对应位置的像素点更改为kernel中的最小值。

与操作也就是最小值替换中心像素。

  • 对象大小减少1个像素(3*3)
  • 平滑对象边缘
  • 弱化或者分割图像之间的半岛型连接

2. 膨胀(Dilata)

腐蚀的反操作:膨胀能对图像的边界进行扩展,就是将图像的轮廓加以膨胀。

用kernel遍历原图的所有像素,每遍历一次就将对应位置的像素点更改为kernel中的最大值。

或操作也就是最大值替换中心像素

  • 对象大小增加一个像素(3*3)
  • 平滑对象边缘
  • 减少或者填充对象之间的距离

3. 其他

腐蚀和膨胀是图像形态学运算的基础,将膨胀和腐蚀进行组合就得出开闭运算、梯度、礼帽、黑帽等不同形式的运算:

开运算: 先腐蚀后膨胀
闭运算: 先膨胀后腐蚀
形态学梯度: 膨胀图-腐蚀图
礼帽运算: 也叫顶帽运算,原始图像-开运算结果
黑帽运算: 闭运算结果-原始图像
击中不击中: 前景、背景腐蚀运算的交集

二、Python实现

skimage库

1.引入库

from skimage.morphology import erosion, dilation, opening, closing, white_tophat
from skimage.morphology import black_tophat, skeletonize, convex_hull_image
from skimage.morphology import disk, square, diamond
from skimage.color import rgb2gray
from skimage.util import img_as_ubyte

2. 膨胀与腐蚀

im = imread('zebras.jpg', as_gray=True)
im = rgb2gray(im)
selem = square(5)

eroded = erosion(im, selem)

dilated = dilation(im, selem)

Python图像处理笔记——形态学处理(skimage.morphology)

不同类型的核腐蚀

Python图像处理笔记——形态学处理(skimage.morphology)

不同大小的核腐蚀(disk)

Python图像处理笔记——形态学处理(skimage.morphology)

3. 开运算和闭运算

开运算可以去噪、计数等。比如识别一张图像中有几个人,要先把人和人重叠的部分分开,然后再计数。

闭运算可以去除前景物内部的黑点,还可以将不同前景图像进行连接,就是实现前景图像的连接。

def showImages(images, n, m, titles):
    plt.figure(figsize=(10, 10))
    plt.gray()
    i = 1
    for image in images:
        plt.subplot(n, m, i)
        plt.imshow(image)
        plt.title(titles[i - 1])
        i += 1
    plt.show()

images = [im]
titles = ['original', 'open', 'close']
images.append(opening(im, square(5)))
images.append(closing(im, square(5)))
showImages(images, 1, 3, titles)

腐蚀、膨胀、开运算、闭运算的区别:

Python图像处理笔记——形态学处理(skimage.morphology)
Python图像处理笔记——形态学处理(skimage.morphology)

4. 形态学梯度

可以获得图像的边缘信息

gradientImage=dilation(im, square(2)) - erosion(im, square(2))

Python图像处理笔记——形态学处理(skimage.morphology)

5. 白帽和黑帽

白帽运算是原图-开运算图,可以获得图像的 噪声或者比原始图的边缘更亮的边缘信息
黑帽运算是闭运算图像-原图,可以获得图像的 内部噪声或者比原始图的边缘更暗的边缘信息。

images = [im]
titles = ['原图', '白帽', '黑帽']
images.append(im-opening(im, square(5)))

images.append(closing(im, square(5))-im)

showImages(images, 1, 3, titles)

Python图像处理笔记——形态学处理(skimage.morphology)

Original: https://blog.csdn.net/qq_43360420/article/details/125575488
Author: 霜晨月、
Title: Python图像处理笔记——形态学处理(skimage.morphology)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/641271/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球