【形态学变换】——图像预处理(OpenCV)

目录

[1 核](#1 核)

[2 腐蚀](#2 腐蚀)

[3 膨胀](#3 膨胀)

[4 开运算](#4 开运算)

[5 闭运算](#5 闭运算)

[6 礼帽运算](#6 礼帽运算)

[7 黑帽运算](#7 黑帽运算)

[8 形态学梯度](#8 形态学梯度)


形态学变换是一种基于形状的简单变换,处理对象是二值化后的图像。有两个输入:原图像和核,一个输出:形态学变换后的图像。基本操作有以下四种。

1 核

核就是一个小区域,通常为3*3、5*5、7*7大小,比如矩形结构、椭圆结构、十字形结构,如下图所示:

2 腐蚀

核在原图(二值化后的图像)上进行从上到下,从左到右的滑动。**在滑动过程中,令核值为1的区域与该被核覆盖的对应区域进行相乘,得到最小值,就是卷积核覆盖区域中心像素点的新像素值。**简单记忆就是只要被覆盖区域有黑色(像素值为0),那么该区域的中心像素值必定为黑色。经过腐蚀之后变"瘦"了。

通过这样的遍历方式,腐蚀操作能够逐步收缩目标物体边界,消除孤立的噪声像素以及细化连续的前景区域。

总结:二值图腐蚀后白色像素(非0)变少了

案例:

python 复制代码
import cv2 as cv
import numpy as np

long = cv.imread("./images/long.png")
# 定义一个5x5的卷积核
kernel = np.ones((5,5),np.uint8)
# print(kernel)
# 腐蚀操作:cv2.erode(img,kernel,iterations=1)iterations:迭代次数,默认值为1
dst_erode = cv.erode(long,kernel=kernel,iterations=1)
cv.imshow("long",long)
cv.imshow("dst_erode",dst_erode)
cv.waitKey(0)
cv.destroyAllWindows()

输出:

3 膨胀

核在滑动过程中,令核值为1的区域与被覆盖的对应区域进行相乘,得到最大值就是被覆盖区域中心像素点的新像素值。简单记忆就是,只要有白色(像素值为255),那么区域的中心像素点必为白色(255)。经过膨胀之后变"胖"了。

膨胀能逐步扩大物体的边界,连接断裂的前景部分,并填充内部空洞,使物体轮廓更加明显且连续。

总结:二值化膨胀后白色像素变多了。

案例:

python 复制代码
import cv2 as cv
import numpy as np

long = cv.imread("./images/long.png")
# 定义一个5x5的卷积核
kernel = np.ones((5,5),np.uint8)
# print(kernel)
# 膨胀操作:cv2.dilate(img,kernel,iterations)
dst_dilate = cv.dilate(long,kernel=kernel,iterations=2)
cv.imshow("long",long)
cv.imshow("dst_dilate",dst_dilate)
cv.waitKey(0)
cv.destroyAllWindows()

输出:

4 开运算

先腐蚀后膨胀 ,作用:分离物体,消除小区域。特点:消除噪声,去除小的干扰块,而不影响原来的图像

案例:

python 复制代码
import cv2 as cv
import numpy as np
car = cv.imread("./images/car.png")
_,car =cv.threshold(car,127,255,cv.THRESH_BINARY_INV)
# 定义一个5x5的卷积核
kernel = np.ones((5,5),np.uint8)
# 开运算(先腐蚀,后膨胀)
opening = cv.morphologyEx(car,cv.MORPH_OPEN,kernel)
cv.imshow("car",car)
cv.imshow("opening",opening)
cv.waitKey(0)
cv.destroyAllWindows()

输出:

5 闭运算

先膨胀后腐蚀,作用:消除/闭合物体里面的孔洞。特点:可以填充闭合区域。

案例:

python 复制代码
import cv2 as cv
import numpy as np
car = cv.imread("./images/car.png")
_,car =cv.threshold(car,127,255,cv.THRESH_BINARY_INV)
# 定义一个5x5的卷积核
kernel = np.ones((5,5),np.uint8)
# 闭运算(先膨胀,后腐蚀)
closing = cv.morphologyEx(car,cv.MORPH_CLOSE,kernel)
cv.imshow("car",car)
cv.imshow("closing",closing)
cv.waitKey(0)
cv.destroyAllWindows()

输出:

6 礼帽运算

原图像与开运算结果图之差。作用:用来分离比邻近点亮一些的斑块。

案例:

python 复制代码
import cv2 as cv
import numpy as np
car = cv.imread("./images/car.png")
_,car =cv.threshold(car,127,255,cv.THRESH_BINARY_INV)
# 定义一个5x5的卷积核
kernel = np.ones((5,5),np.uint8)
# 礼帽运算(原图和开运算的差):cv.morphologyEx(img,cv.MORPH_TOPHAT,kernel)
tophat = cv.morphologyEx(car,cv.MORPH_TOPHAT,kernel)
cv.imshow("car",car)
cv.imshow("tophat",tophat)
cv.waitKey(0)
cv.destroyAllWindows()

输出:

7 黑帽运算

原图与"闭运算"的结果图只差。作用:用来分离比邻近点暗一些的斑块。

案例:

python 复制代码
import cv2 as cv
import numpy as np
car = cv.imread("./images/car.png")
_,car =cv.threshold(car,127,255,cv.THRESH_BINARY_INV)
# 定义一个5x5的卷积核
kernel = np.ones((5,5),np.uint8)
# 黑帽运算(闭运算和原图之间的差):cv.morphologyEx(img,cv.MORPH_BLACKHAT,kernel)
blackhat = cv.morphologyEx(car,cv.MORPH_BLACKHAT,kernel)
cv.imshow("car",car)
cv.imshow("blackhat",blackhat)
cv.waitKey(0)
cv.destroyAllWindows()

输出:

8 形态学梯度

形态学梯度是一个基于结构元素的图像处理方法,它通过比较原图像与膨胀图和腐蚀图之间的差异来突出图像边缘特征。 对于图像中的每个像素点,其形态学梯度值是该像素点在膨胀后的图像值与其在腐蚀后的图像值之差

作用:强化图像的边缘信息,并且对噪声有一定的抑制作用

案例:

python 复制代码
import cv2 as cv
import numpy as np
car = cv.imread("./images/car.png")
_,car =cv.threshold(car,127,255,cv.THRESH_BINARY_INV)
# 定义一个5x5的卷积核
kernel = np.ones((5,5),np.uint8)
# 形态学梯度(膨胀和腐蚀的差):cv.morphologyEx(img,cv.MORPH_GRADIENT,kernel)
gradient = cv.morphologyEx(car,cv.MORPH_GRADIENT,kernel)
cv.imshow("car",car)
cv.imshow("gradient",gradient)
cv.waitKey(0)
cv.destroyAllWindows()

输出:

相关推荐
aircrushin18 小时前
从春晚看分布式实时协同算法与灵巧手工程实现
人工智能·机器人
恋猫de小郭18 小时前
Apple 的 ANE 被挖掘,AI 硬件公开,宣传的 38 TOPS 居然是"数字游戏"?
前端·人工智能·ios
银河系搭车客指南18 小时前
AI Agent 的失忆症:我是怎么给它装上"第二个大脑"的
人工智能
张拭心18 小时前
春节后,有些公司明确要求 AI 经验了
android·前端·人工智能
我的username19 小时前
极致简单的openclaw安装教程
人工智能
小锋java123419 小时前
【技术专题】嵌入模型与Chroma向量数据库 - Chroma 集合操作
人工智能
七月丶19 小时前
别再手动凑 PR 了:这个 AI Skill 会按仓库习惯自动建分支、拆提交、提 PR
人工智能·设计模式·程序员
用户51914958484519 小时前
CVE-2024-10793 WordPress插件权限提升漏洞利用演示
人工智能·aigc
chaors19 小时前
从零学RAG0x01之向量化
人工智能·aigc·ai编程
chaors19 小时前
从零学RAG0x02向量数据库
人工智能·aigc·ai编程