RGB图像颜色分离的MATLAB实现1.理论分析1.1程序设计的初衷自己的专业方向会可能用到图像处理的知识,作为数字图像处理的初学者,此程序完全是为实现自己兴趣并结合我们所学的MATLAB课程及GUI知识而编写的,可以实现对图中感兴趣物体颜色的提取,从而突出事物。设计的知识背景或许浅,课下希望能向研究Matlab数字图像处理的老师,同学们多多请教,交流。1.2程序实现的理论分析若想实现对RGB图像颜色提取,最为关键的也最为核心的是对R/G/B等颜色严格界定的判别规则。而对于非目标颜色则会通过掩膜覆盖,从而突出显示所要提取到的颜色。此程序中提到的判别规则是更具R/G/B中某一颜色分量明显不小于其它分量时,即判别某像素点为某种颜色,并通过设置判别阈值,来控制判别条件的颜色与否。1.2.RGB图像背景知识介绍所谓的RGB图像,RGB色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。RGB图像原理如下图1~图2:图1RGB图像原理图2RGB图像RGB三色矩阵所以RGB图像的颜色分布区间如图3:图3RGB图像的颜色分布图因此可得到六种颜色的判别规则如下:利用以上判别准则来作为程序设计的核心,通过设计判断语句,对图像的不同色域进行分离,从而实现颜色分离。3.程序设计3.1设计流程图以下是整体程序的设计流程如图4:青颜色范围的判别规则:B>128&G>128&(B-R)>diff_C&(G-R)>diff_C黄颜色范围的判别规则:R>128&G>128&(R-B)>diff_Y&(G-B)>diff_Y洋红色范围的判别规则:B>128&R>128&(R-G)>diff_M&(B-G)>diff_M蓝颜色范围的判别规则:(B-R>diff_B)&&(B-G>diff_B)绿颜色范围的判别规则:(G-R>diff_G)&&(G-B>diff_G)红颜色范围的判别规则:(R-G>diff_R)&&(R-B>diff_R)图4程序实现流程图通过此流程图,可以把握全局思想来完成图像颜色提取的框架结构,这样可以有益于对整体的把握。3.2.主要程序段分析(1)读入图像部分的程序段分析:%打开图像[FileName,FilePath]=uigetfile('*.jpg;*.png;*.tif;*.img;*.gif;','请选择图像数据');ifisequal(FilePath,0)%如果未选择图像则返回,防止报错return;endstr=[FilePathFileName];%文件的路径,文件名称NY结束保存图像颜色提取是否调节阈值选择分离的颜色(判别条件)及掩膜方式选择显示读入的图片选择图片Image=imread(str);imshow(Image)%读入图形,显示图形%%掩膜处理方式预设置Gray=rgb2gray(Image);%灰度处理Blackk=zeros(size(Gray));%黑色掩膜处理Whitee=255*ones(size(Gray));%白色掩膜处理R=Image(:,:,1);%分别分出R分量G=Image(:,:,2);%分别分出G分量B=Image(:,:,3);%分别分出B分量aa=0;%不做任何处理的原图标志位此段程序实现图片的读入并实现对掩膜方式的的初始化实现,通过对三种掩膜方式设置,后面可以直接选择。(2)掩膜方式选择及判别条件确定主要程序段分析(以红色提取为例):functionRedbutton_Callback(hObject,eventdata,handles)globalImageRGBdiff_RGrayBlackkWhiteeaa%掩膜方式的选择:从下拉菜单中选择掩膜方式str1=get(handles.popupmenu1,'String');val=get(handles.popupmenu1,'Value');switchstr1{val}case'灰度掩膜'current_data=Gray;case'黑色掩膜'current_data=Blackk;case'白色掩膜'current_data=Whitee;end%从GUI编辑界面上获取当前所选颜色的阈值diffr=get(handles.edit1,'String');diff_R=str2num(diffr);Image_R=Image;RP_R=Image(:,:,1);RP_G=Image(:,:,2);RP_B=Image(:,:,3);XYR=~((R-G)>diff_R&(R-B)>diff_R);%提取红色条件是R分量与G、B分量差值大于设定Mask=current_data(XYR);%掩膜方式RP_R(XYR)=Mask;RP_G(XYR)=Mask;RP_B(XYR)=Mask;%使得非红色区域变为选择的颜色Image_R(:,:,1)=RP_R;Image_R(:,:,2)=RP_G;Image_R(:,:,3)=RP_B;imshow(Image_R)title(strcat(['R分量阈值为',diffr,'时的图像']));aa=1;%进行红色处理的标志位其他颜色(绿色,蓝色,黄色,洋红色,青色)提取主要程序段与之类似。(3)...