一.图像空间转换
1.RGB颜色模型
RGB色彩空间由红色、绿色和蓝色三种基色确定,其他所有的颜色均可由三种基色通过不同比例组合产生。取值在0~255之间。
在笛卡尔坐标系下,原点位置表示黑色,白色位于其对角线另一端,黑白两点的连线表示着灰度等级的变化。
2.归一化RGB色彩模型
由于RGB色彩空间受阴影和光照强度影响较大,故都会用归一化RGB色彩空间降低光照变化对图像处理的影响
设有两个像素点的RGB分量分别为(R1,G1,B1)和(R2,G2,B2),若,则说明两点的颜色是相同的,只是亮度不同。
归一化RGB能够去掉亮度信息而只保留颜色信息,得 ,且。
3.灰度化
将R、G、B值通过等值转换合并为一个灰度分量得过程,灰度化后仅保留亮度信息,丢失饱和度和色度,同时灰度值限制在0~255内,0为全黑,255为全白
灰度转化公式:
:灰度化处理后像素点(x,y)的灰度值
4.HSV颜色空间
H:hue,表示色度
S:saturation,表示饱和度,颜色深浅
V:value,表示亮度,明暗程度
二.图像噪声处理
常用空域滤波法(对各个像素的灰度值进行处理)和频域滤波法(把图像从空间域向频域变换)
1.均值滤波
对目标像素给予一个模板,模板内含像素本身和它邻域内的像素。用模板内像素的平均值替换原来的像素值,最终实现去噪。
一般来说,选择的模板窗口越大,图像滤波后边缘就会越模糊,常见模板为3x3和5x5。同时该种滤波方式原理简单,时间复杂度低
2.高斯滤波
图像中每个像素点处与 模板匹配的邻域中各点的像素值 与模板中对应点的值进行加权平均,并用加权平均后的值代替原像素点的值。
3.中值滤波
将每一点的像素值 用 给定模板内所有像素值的中值来代替。作为非线性滤波能够保留较多的边缘细节。
三.形态学处理
1.腐蚀运算
图像A与结构元素B作腐蚀运算
结构元素B的理解:
- 结构元素B是一个小的形状(通常是矩形或圆形)或模板,它在腐蚀运算中用来控制对象的侵蚀程度。结构元素定义了腐蚀操作中的邻域范围和形状。
- 结构元素通常是二进制的,其中1表示结构元素的一部分,0表示不包括在内的部分。结构元素的大小和形状取决于特定的应用和目标,它可以是正方形、矩形、圆形或其他形状。
腐蚀运算的执行过程:
- 将结构元素B放置在图像A的一个像素位置上,通常以结构元素的中心为基准。
- 对于结构元素B中的每个元素,将其与图像A对应位置的像素值进行比较。
- 如果结构元素B中的所有元素都与图像A中的对应像素匹配(即都为1),则中心像素位置的输出值将设置为1;否则,输出值将设置为0。
- 将结构元素B沿着图像A的每个像素位置滑动,重复上述过程,直到腐蚀操作对整个图像完成。
2.膨胀运算
膨胀运算与腐蚀运算相反,膨胀运算(Dilation)是图像形态学处理中的一种基本操作,用于扩张图像中的对象或特定区域。它通常与一个称为结构元素(Structuring Element)的小模板或内核一起使用。
膨胀运算(Dilation)是图像形态学处理中的一种基本操作,用于扩张图像中的对象或特定区域。它通常与一个称为结构元素(Structuring Element)的小模板或内核一起使用。下面是膨胀运算的详细介绍:
-
结构元素B的选择:
- 结构元素B是一个小的形状或模板,它用于控制膨胀操作的扩张程度。它可以是各种形状,如矩形、圆形或自定义形状,取决于应用的需求。结构元素通常是二进制的,其中1表示结构元素的一部分,0表示不包括在内的部分。
-
膨胀操作的执行:
- 对于输入图像A中的每个像素,将结构元素B的中心放置在该像素的位置上。通常,结构元素的中心与结构元素的几何中心对齐。
- 然后,将结构元素B与图像A的对应区域进行比较。如果结构元素中的任何一个像素与图像A中的对应像素匹配(都为1),则将中心像素位置的输出值设置为1;否则,输出值保持为0。
- 重复上述步骤,将结构元素B在整个图像A上滑动,直到膨胀操作应用于整个图像。
-
膨胀的效果:
- 膨胀操作的结果是对图像中的对象或特定区域进行扩张。如果结构元素B的形状是圆形或矩形,膨胀将使对象变得更大。膨胀的程度取决于结构元素的大小和形状。
- 膨胀操作通常用于填充图像中的空洞、连接断开的物体、扩展图像的边界等应用。它也可以用于去除小的噪声或断开的细节。
3.开/闭运算
开运算:先先腐蚀再膨胀。可以断开狭窄的连接和消除噪声点
闭运算:先膨胀再腐蚀。可以消除小的孔洞,填补目标轮廓中断裂的部分
开运算代码示例:
import cv2 #导入相关包 import numpy as np import matplotlib.pyplot as plt img = cv2.imread('D:\cg\Scien2.png') #读取图像 grayImage = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #灰度化处理图像 #kernel = np.ones((5,5),np.uint8) #设置腐蚀运算的内核 kernel = np.ones((3,3),np.uint8) #先腐蚀后膨胀为开运算 erodsion = cv2.erode(grayImage,kernel,iterations=1) opening=cv2.dilate(erodsion,kernel,iterations=1) plt.imshow(opening,cmap=plt.cm.gray),plt.axis('off') #显示图形 plt.show() cv2.imwrite('D:\cg\Scien2_opening2.png',opening)#将腐蚀运算后结果图片存在对应位置