栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

文章目录
  • 一、前言
    • 1. 腐蚀(Erode)
    • 2. 膨胀(Dilata)
    • 3. 其他
  • 二、Python实现
    • 1.引入库
    • 2. 膨胀与腐蚀
    • 3. 开运算和闭运算
    • 4. 形态学梯度
    • 5. 白帽和黑帽


一、前言

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

应用:

  • 消除噪声、提取边界、填充区域、提取连通分量、凸壳、细化、粗化等;
  • 分割出独立的图像元素,或者图像中相邻的元素;
  • 求取图像中明显的极大值区域和极小值区域;
  • 求取图像梯度等等
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) #square(2)  # #square(4) #disk(6)
# 腐蚀
eroded = erosion(im, selem)
# 膨胀
dilated = dilation(im, selem)

不同类型的核腐蚀

不同大小的核腐蚀(disk)

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)

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

4. 形态学梯度

可以获得图像的边缘信息

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

5. 白帽和黑帽

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

images = [im]
titles = ['原图', '白帽', '黑帽']
images.append(im-opening(im, square(5)))
# images.append(white_tophat(im,square(5)))
images.append(closing(im, square(5))-im)
# images.append(black_tophat(im,square(5)))
showImages(images, 1, 3, titles)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1001800.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号