实验任务
彩色图像分割—香蕉提取
利用香蕉和其它水果及其背景颜色在R,G,B分量上的差异进行识别,根据香
蕉和其它水果在R,G,B分量的二值化处理,获得特征提取的有效区域,然后提取
特征,达到提取香蕉的目的。附:统计各种水果及个数。
以下处理过程仅供参考:
1) 分别截取图像中香蕉和其它水果的感兴趣区域,并将其转换为R分量、
G分量、B分量的灰度图像;
2) 对各个分量进行灰度值统计,画出灰度直方图;
3) 设定阈值对其进行二值化。.
4) 特征提取。根据香蕉、草莓、奇异果的特征统计出各自的个数
报告
一、 彩色图像分割—香蕉提取
1、 实验目的
利用香蕉和其它水果及其背景颜色在R,G,B分量上的差异进行识别,根据香
蕉和其它水果在R,G,B分量的二值化处理,获得特征提取的有效区域,然后提取
特征,达到提取香蕉的目的。附:统计各种水果及个数。
2、 实验工具
本实验使用Python编程语言(3.9.0)、cv2、numpy和matplotlib等一系列支持库,在Windows 10 x64系统环境实现,IDE是Pycharm 2021.2.3
3、 实验内容
[1] 高斯模糊
[2] 颜色空间转换以及颜色阈值
[3] 形态学操作
[4] 寻找连通操作及轮廓检测
[5] 灰度直方图绘制
4、 实验步骤
4.1高斯模糊
4.1.1 算法原理
服从高斯分布的一类噪声。高斯模糊是通过使用高斯函数对图像中的每个像素进行加权平均来实现的。高斯函数具有钟形曲线,这意味着中心像素具有最高的权重,而远离中心的像素权重逐渐减小。这样可以有效地平滑图像,同时减少边缘模糊的效果。
4.1.2目的
减少图像中的噪声,同时保留图像的主要结构信息。这对于后续的颜色分割、边缘检测等处理步骤是非常有益的,因为减少了噪声可以使这些处理更加准确。
4.1.3参数设置
ksize:高斯核的大小,必须是正的奇数。例如 (5, 5) 表示一个 5x5 的高斯核。
sigmaX:高斯核在 X 方向的标准差。如果设置为 0,那么 OpenCV 会根据 ksize 自动计算标准差。
4.1.4操作处理
读取输入图像
应用高斯模糊
4.1.5关键实现代码
4.1.6处理结果
颜色空间转换以及颜色阈值
4.2.1目的
颜色空间转换是为了将图像从一种颜色模型转换到另一种颜色模型,使得颜色的识别更为直观和鲁棒。颜色阈值是一种基于颜色范围来分割图像的技术。通过设定颜色范围,可以从图像中提取出特定颜色的区域,生成二值掩膜。
4.2.2参数设置
无
4.2.3操作处理
1.颜色空间转换:
通过 cv2.cvtColor 将图像从 BGR 转换到 HSV 色彩空间,这样可以更好地利用颜色信息进行分割。
转换后的 hsv_image 可以用于后续的颜色阈值处理。
2.颜色阈值:
cv2.inRange 函数根据给定的颜色范围创建二值掩膜。例如,banana_mask 将图像中黄色像素设置为白色(255),其他像素设置为黑色(0)。
对于红色,由于其在 HSV 色彩空间中跨越了两个区间,所以需要分别创建两个掩膜 strawberry_mask1 和 strawberry_mask2,然后使用 cv2.bitwise_or 合并这两个掩膜。
对于奇异果,根据您提供的颜色范围创建 kiwi_mask。
4.2.4关键实现代码
形态学操作
4.3.1原理
形态学操作是一系列基于形状的图像处理操作,主要用于处理二值图像,主要包括膨胀、腐蚀、开运算和闭运算。这些操作通常用于去除噪声、填充孔洞、连接断开的部分等。
膨胀(Dilation):将图像中的白色区域扩大,常用于连接相近的物体。
腐蚀(Erosion):将图像中的白色区域缩小,常用于去除小的噪声点。
开运算(Opening):先腐蚀后膨胀,可以去除小的噪声点,同时保持大的物体不变。
闭运算(Closing):先膨胀后腐蚀,可以填充孔洞,同时保持大的物体不变。
4.3.1目的
去除噪声
填充孔洞
连接断开的部分
平滑边界
4.3.2参数设置
• 结构元素(Kernel):定义一个用于形态学操作的结构元素。结构元素通常是一个小的矩阵,本次实验5x5 的方形矩阵。
• 迭代次数(Iterations):执行形态学操作的次数,默认为 1。
4.3.3操作处理
应用于各个水果的掩膜上,以去除噪声并改善掩膜的质量。
4.3.4关键实现代码
寻找连通操作及轮廓检测
4.4.1原理
连通域是指图像中相互连接且具有相同属性(如颜色或灰度值)的像素集合。在二值图像中,连通域指的是所有相连的非零像素。
4.4.2目的
计数物体数量。
标记每个单独的对象。
获取每个连通域的属性
4.4.3参数设置
无
4.4.4操作处理
cv2.connectedComponents 函数用于寻找二值掩膜中的连通域,并返回每个连通域的标签图像。然后,通过遍历这些连通域来统计每个水果的数量,并在图像上标记它们。
4.4.5关键实现代码
4.4.6检测结果
灰度直方图绘制
4.5.1操作处理
展示图像中红、绿、蓝三个颜色通道的像素分布情况。通过 matplotlib 库,可以方便地绘制和展示这些直方图。
4.5.2关键示例代码
4.5.3结果展示