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 = 1for image in images:plt.subplot(n, m, i)plt.imshow(image)plt.title(titles[i - 1])i += 1plt.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)
Python图像处理笔记——形态学处理(skimage.morphology)相关推荐
- python图像处理笔记-十二-图像聚类
python图像处理笔记-十二-图像聚类 学习内容 这一章主要在学习的是聚类算法以及其在图像算法中的应用,主要学习的聚类方法有: KMeans 层次聚类 谱聚类 并将使用他们对字母数据及进行聚类处理, ...
- Python图像处理笔记——卷积
Python图像处理--卷积 一.什么是卷积? 1. 数学定义 2. 引入库 3. python实现对图像的卷积 二.相关与卷积 1. 相关的定义 2. Python实现 扩展阅读 一.什么是卷积? ...
- [Python图像处理] 十.形态学之图像顶帽运算和黑帽运算
该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...
- [Python图像处理] 九.形态学之图像开运算、闭运算、梯度运算
该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...
- Python图像处理:形态学操作
来源:DeepHub IMBA本文约1400字,建议阅读5分钟 形态学的操作主要是去除影响图像形状和信息的噪声.形态学运算在图像分割中非常有用,可以得到无噪声的二值图像. 形态学方法 当图像经过预处理 ...
- Python图像处理笔记——傅里叶变换
文章目录 一.前言 二.傅里叶变换在图像中的应用 0. 本文用到的库 1. 图像的傅里叶变换和逆变换 2. 高斯模糊 3. 傅里叶变换频域滤波 (1)低通滤波 (2)高通滤波 (3)带通滤波 一.前言 ...
- python图像处理笔记(六):手动获取坐标标注图像
引言 之前的两篇文章有提到图片标注,但一个是用yolo算法给识别到的图像加框,一个是根据霍夫变换做直线与圆的检测,本篇想总结一下根据鼠标点击来对图像做一些填充处理的方式. opencv鼠标事件 介绍的 ...
- 万字长文告诉新手如何学习Python图像处理(上篇完结 四十四) | 「Python」有奖征文
该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...
- [Python图像处理] 三十三.图像各种特效处理及原理万字详解(毛玻璃、浮雕、素描、怀旧、流年、滤镜等)...
此文转载自:https://blog.csdn.net/Eastmount/article/details/111568397#commentBox 该系列文章是讲解Python OpenCV图像处理 ...
- python低通滤波器_[Python图像处理] 二十三.傅里叶变换之高通滤波和低通滤波
[Python图像处理] 二十三.傅里叶变换之高通滤波和低通滤波 发布时间:2019-04-28 20:35, 浏览次数:2739 , 标签: Python 该系列文章是讲解Python OpenCV ...
最新文章
- 机器学习中qa测试_机器学习自动化单元测试平台
- S2SH框架入门之使用struts2
- 适时选择getDeclaredxxx和getxxx
- 标准C程序设计七---46
- C++工作笔记-对二级指针的进一步理解(获取调用者的地址)
- Java基本语法格式
- 高数教材班复习Hint(3.1-3.6)
- python学习之面对对象程序设计作业
- antd 时间选择器,设置显示为中文
- Error: not authorized on admin to execute command
- AD603+MCP4725+STM32-----自动增益控制电路
- OpenCV开发笔记(四十四):红胖子8分钟带你深入了解霍夫圆变换(图文并茂+浅显易懂+程序源码)
- 写一个程序,判断能否形成三角形,若能,判断是等腰三角形、等边三角形、直角三角形、锐角三角形还是钝角三角形。
- 格式化日期之YYYY与yyyy
- c v开发语言,被质疑的 V 语言
- linux如何编写crontab定时脚本,linux下编写定时任务crontab
- python26章_44G-26章节Python盖世修炼最新实战 全新升级版Python全栈架构师高级课程 从零实战...
- 程序员课外拓展007:强烈推荐一个自学网:可汗学院
- Java 实现数据库读写分离竟如此简单?
- java c 速度_Java和C#运行速度对比:Java比C#快约3倍
热门文章
- vue中头像加载不出来,怎样设置默认头像
- 年轻人不再去菜市场,互联网如何拯救菜场摊贩?
- [NOI2002]贪吃的九头龙(树形dp)
- 1162. 【NOI2002】贪吃的九头龙 (Standard IO)
- win10动态壁纸无法通过右击属性的个性化来换掉
- 外星人17r4原版系统_外星人17r4重装系统
- 太过伤心,小王被这 10 道 Java 面试题虐哭了
- 《大慈恩寺三藏法师传》简介
- 音效算法学习笔记(一)fader 增益调节器
- 计算机中丢失audiodsp,AudioDsp.dll(缺失AudioDsp.dll文件修复工具)V1.0 免费版