基于HSV和RGB颜色空间的自然场景下草地黄花背景分割检测和计数
一、引言在农业、生态监测、智能花卉识别等场景中花朵的自动计数是一项基础且重要的任务。传统人工计数效率低、易出错而基于计算机视觉的方法可以实现快速、准确、非接触式的自动统计。本文基于 MATLAB 平台采用HSV(或RGB) 颜色空间阈值分割 形态学优化 连通域分析的方法实现黄色花朵的精准分割与自动计数代码完整可直接运行。二、基本原理整个黄花检测与计数流程遵循图像分割→区域优化→目标统计的经典视觉处理思路核心原理如下颜色特征分割黄色花朵在图像中具有明显区别于背景绿叶、土壤、阴影的颜色特征通过设定合理的颜色阈值可以将 “黄花区域” 与 “非黄花区域” 分开得到二值化掩码图像。形态学处理优化受光照、花瓣遮挡、图像噪声影响初步分割结果会出现花瓣断裂、内部空洞、细小噪点等问题。通过膨胀、填充孔洞、开运算、去除小区域等操作让每朵花形成完整、独立、平滑的连通区域。连通域分析计数经过处理后每一朵完整的黄花在二值图中对应一个独立的连通区域。使用连通域检测算法统计区域数量即可得到黄花的总数量。整体流程可概括为图像读取 → 颜色空间选择HSV或RGB → 阈值分割 → 形态学优化 → 连通域分析 → 花朵计数与结果可视化。三、原始图像和程序代码1、RGB转HSV后的黄花背景分割检测和计数代码clear; clc; close all;imtool close all;%% 1. 读取图像I imread(E:\YellowFlower.jpg);RI(:,:,1);GI(:,:,2);BI(:,:,3);figure(Name,原始图像), imshow(I), title(原始黄色花朵);%% 2. 转换为 HSV 颜色空间HSV rgb2hsv(I);H HSV(:,:,1);S HSV(:,:,2);V HSV(:,:,3);figure,subplot(2,4,1),imshow(I),title(RGB图像);subplot(2,4,2),imshow(R),title(R通道图像);subplot(2,4,3),imshow(G),title(G通道图像);subplot(2,4,4),imshow(B),title(B通道图像);subplot(2,4,5),imshow(HSV),title(HSV图像);subplot(2,4,6),imshow(H),title(H通道图像);subplot(2,4,7),imshow(S),title(S通道图像);subplot(2,4,8),imshow(V),title(V通道图像);%% 3. 黄色阈值分割根据情况调节参数可用imtool进行辅助分析yellow_mask (H 0.08) (H 0.18) ... (S 0.83) ... (V 0.90);figure,subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(yellow_mask);%% 关键修改形态学处理顺序调整 % 1. 先做轻微膨胀把断裂的花瓣连接起来解决“一朵花变两朵”的核心se_dilate strel(disk, 2); % 稍大的结构元素用于连接断开区域 %结构元素选取很关键yellow_mask_dilated imdilate(yellow_mask, se_dilate);% 2. 填充花朵内部的孔洞yellow_mask_filled imfill(yellow_mask_dilated, holes);% 3. 再做开运算去除噪点先膨胀再腐蚀不会再断开花朵se_open strel(disk, 1);yellow_mask_opened imopen(yellow_mask_filled, se_open);% 4. 去除小面积噪点保留真实花朵yellow_mask3 bwareaopen(yellow_mask_opened, 200); %修改去除非目标的区域大小至关重要%% 4. 连通域分析 计数cc bwconncomp(yellow_mask3);num_flowers cc.NumObjects;disp();disp([✅ 修正后检测到的黄色花朵数量, num2str(num_flowers), 朵]);disp();% 花朵编号可视化labeled labelmatrix(cc);rgb_label label2rgb(labeled, jet, k, shuffle);figure, imshow(rgb_label), title([黄花编号可视化 | 总数, num2str(num_flowers), 朵]);%% 5. 提取结果flower_extract uint8(yellow_mask3) .* I;%% 6. 显示结果figure(Name,优化HSV分割结果);subplot(1,3,1), imshow(I), title(RGB彩色图像);subplot(1,3,2), imshow(yellow_mask3), title([黄花掩码数量, num2str(num_flowers), 朵]);subplot(1,3,3), imshow(flower_extract), title(黄花的提取结果);figure,montage({I, yellow_mask3, rgb_label,flower_extract}, Size, [2 2]);%sgtitle(蒙太奇显示, FontSize, 14);set(gcf,Name,蒙太奇结果展示,NumberTitle,off);%titleHandle sgtitle(蒙太奇显示);%set(titleHandle,FontSize,14,Visible,on);2.RGB颜色空间下的的黄花背景分割检测和计数代码clear; clc; close all;imtool close all;%% 1. 读取图像I imread(E:\YellowFlower.jpg);R double(I(:,:,1));G double(I(:,:,2));B double(I(:,:,3));figure(Name,原始图像), imshow(I), title(原始黄色花朵);imtool(I)%% 2. 查看RGB各通道和之前HSV版本保持一致figure,subplot(1,4,1),imshow(I),title(RGB图像);subplot(1,4,2),imshow(uint8(R)),title(R通道图像);subplot(1,4,3),imshow(uint8(G)),title(G通道图像);subplot(1,4,4),imshow(uint8(B)),title(B通道图像);%% 3. 黄色花朵的RGB阈值分割核心纯RGB逻辑% 思路黄色的特点是 R 和 G 通道都比较高且明显大于 B 通道% 1) R通道、G通道都要足够亮% 2) R 略大于 G典型黄花特征% 3) R 和 G 明显大于 B避免偏绿或偏白区域被误判yellow_mask (R 200) ...(G 200) ...(B0) (B 50) ;figure,subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(yellow_mask);%yellow_maskbwareaopen(yellow_mask,50);%去除区域面积小于50个像素的区域title(RGB阈值初步分割结果);%% 形态学处理和你HSV版本保持同样的优化逻辑 % 1. 先轻微膨胀连接断裂的花瓣se_dilate strel(disk, 1); %修改圆盘结构元素yellow_mask_dilated imdilate(yellow_mask, se_dilate);% 2. 填充花朵内部的孔洞yellow_mask_filled imfill(yellow_mask_dilated, holes);% 3. 开运算去除小噪点se_open strel(disk, 1);yellow_mask_opened imopen(yellow_mask_filled, se_open);% 4. 去除小面积噪点保留真实花朵yellow_mask3 bwareaopen(yellow_mask_opened, 200);%% 4. 连通域分析 计数cc bwconncomp(yellow_mask3);num_flowers cc.NumObjects;disp();disp([✅ RGB空间检测到的黄色花朵数量, num2str(num_flowers), 朵]);disp();% 花朵编号可视化labeled labelmatrix(cc);rgb_label label2rgb(labeled, jet, k, shuffle);figure, imshow(rgb_label), title([黄花编号可视化 | 总数, num2str(num_flowers), 朵]);%% 5. 提取结果flower_extract uint8(yellow_mask3) .* I;%% 6. 显示结果figure(Name,RGB分割结果);subplot(1,3,1), imshow(I), title(RGB彩色图像);subplot(1,3,2), imshow(yellow_mask3), title([黄花掩码数量, num2str(num_flowers), 朵]);subplot(1,3,3), imshow(flower_extract), title(黄花的提取结果);figure,montage({I, yellow_mask3, rgb_label}, Size, [1 3]);sgtitle(蒙太奇显示, FontSize, 14);四、主要运行结果1. RGB转HSV后的黄花背景分割检测和计数代码主要运行结果2. RGB颜色空间下的黄花背景分割检测和计数代码主要运行结果本文采用两种方法实现了自然场景下草地黄花背景分割检测和计数方法一将RGB空间转换到HSV 空间其目的是将颜色与亮度分离使黄色目标的特征更稳定、分割更鲁棒另外一种方法是直接利用黄花的RGB颜色空间中R分量值和G分量的灰度值高而B值低的特点进行阈值分割通过程序运行表明两种方法都能较好的实现黄花分割和计数。由此可看出图像在不同的彩色空间具有不同的特性在实际图像处理任务中可以根据图像的特点选择合适的颜色空间进行图像处理。本文所提的两种方法都具有轻量、高效、易于理解适合教学、实验及小型农业视觉项目可扩展到其他颜色花朵红花、白花、紫花的检测与计数。如果你觉得本文对你的学习和研究有所帮助请点赞、收藏和关注感谢您的支持