常用彩色模型有RGB和HSV模型,有时候在RGB颜色空间进行背景分割比较困难的问题,转换为HSV模型然后对色调和饱和度图像进行处理会得到比较理想的处理结果,下面通过一个实例讲解该方法的MATLAB实现,该方法对其他图像检测也具有一定的参考价值。
主要步骤:读入RGB彩色图像,转换为灰度图像,并进行二值化,发现背景分割效果不好。故改变思路,先将RGB彩色图像转换为HSV图像,提取H(色调)和S(饱和度)分量,发现色调分量的灰度直方图具有比较明显的双峰特性且谷底平且宽,因此对其采用OTSU方法进行二值化,然后对其进行孔洞填充,取得了比较理想的图像分割效果。最后对原始RGB彩色图像分割的主要图像处理过程进行显示。
详细代码如下:
%RGB图像转HSV进行图像分割
clear all;
close all;
clc;
I=imread('h:\3.jpg');
Ir=I(:,:,1);
Ig=I(:,:,2);
Ib=I(:,:,3);
imshow(I);
Igray=rgb2gray(I);% 彩色图像转灰度图像 Gray=0.299*R+0.587*G+0.114*B
figure,imshow(Igray);
figure,imhist(Igray);%显示灰度直方图
obj=im2bw(Igray,graythresh(Igray));
figure,imshow(obj);
Ihsv=rgb2hsv(I);
figure,imshow(Ihsv);
Ih=Ihsv(:,:,1);%提取hue(色调)分量
figure,imshow(Ih);
figure,imhist(Ih);%显示色调分量的灰度直方图-发现其具有比较明显的双峰特性且谷底平且宽
imtool(Ih);
Is=Ihsv(:,:,2);%提取Saturation(饱和度)分量
figure,imshow(Is);
figure,imhist(Is);
imtool(Is)
%obj=imbinarize(Ih);
obj2=im2bw(Ih,graythresh(Ih));
figure,imshow(obj2);
obj2Fill=imfill(obj2,'holes');
figure,imshow(obj2Fill);
flower=cat(3,uint8(obj2Fill).*Ir,uint8(obj2Fill).*Ig,uint8(obj2Fill).*Ib);
figure,imshow(flower);
figure,
subplot(2,4,1),imshow(I),title('RGB彩色图像');
subplot(2,4,2),imshow(Igray),title('灰度图像');
subplot(2,4,3),imhist(Igray),title('Igray灰度直方图');
subplot(2,4,4),imshow(obj),title('二值图像');%分割效果差
subplot(2,4,5),imshow(Ihsv),title('HSV图像');
subplot(2,4,6),imshow(Ih),title('H图像');
subplot(2,4,7),imhist(Ih),title('Ih灰度直方图');
subplot(2,4,8),imshow(obj2Fill),title('二值图像');%分割效果好
%本程序在MATLAB 2018a检测通过
最后运行结果如下图所示:
原始图像:
如果觉得本文章对大家今后的编程有帮助,请点赞和收藏,谢谢!!!