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:
圖1 RGB圖像原理 圖2 RGB圖像RGB三色矩陣
所以RGB圖像的顏色分布區間如圖3:
圖3 RGB圖像的顏色分布圖
因此可得到六種顏色的判別規則如下:
利用以上判別準則來作為程序設計的核心,通過設計判斷語句,對圖像的不同色域進行分離,從而實現顏色分離。
3.程序設計
3.1設計流程圖
以下是整體程序的設計流程如圖4:
圖4 程序實現流程圖
通過此流程圖,可以把握全局思想來完成圖像顏色提取的框架結構,這樣可以有益于對整體的把握。
3.2.主要程序段分析
(1)讀入圖像部分的程序段分析:
%打開圖像
[FileName, FilePath]=uigetfile('*.jpg;*.png;*.tif;*.img;*.gif;','請選擇圖像數據');
if isequal(FilePath,0) %如果未選擇圖像則返回,防止報錯
return;
end
str=[FilePath FileName]; %文件的路徑,文件名稱
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)掩膜方式選擇及判別條件確定主要程序段分析(以紅色提取為例):
function Redbutton_Callback(hObject, eventdata, handles)
global Image R G B diff_R Gray Blackk Whitee aa
%掩膜方式的選擇:從下拉菜單中選擇掩膜方式
str1=get(handles.popupmenu1,'String');
val=get(handles.popupmenu1,'Value');
switch str1{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)保存圖片部分的主要程序段分析:
function pushbutton6_Callback(hObject, eventdata, handles)
global aa rrnum ggnum bbnum yynum mmnum ccnum
switch aa
case 0 %%%%%0,代表著所摁下按鈕的代號,即原圖
picname='原圖.jpg';
case 1 %%%%%1,代表著所摁下按鈕的代號,即紅色
rrname=int2str(rrnum); %%%%此數據代表著當前是第幾次保存紅色
rrrname=get(handles.edit1,'string');%%%%此數據代表著當前保存時的閾值
picname=strcat(['Red',rrname,'-',rrrname,'.jpg']);%%保存的路徑及名字
rrnum=rrnum+1; %%%% 每按下按鈕一次,次數加1
case 2 %%%%%2,代表著所摁下按鈕的代號,即綠色
ggname=int2str(ggnum);
gggname=get(handles.edit4,'string');
picname=strcat(['Green',ggname,'-',gggname,'.jpg']);
ggnum=ggnum+1; %%%% 每按下按鈕一次,次數加1
case 3 %%%%%3,代表著所摁下按鈕的代號,即藍色
bbname=int2str(bbnum);
bbbname=get(handles.edit5,'string');
picname=strcat(['Blue',bbname,'-',bbbname,'.jpg']);
bbnum=bbnum+1; %%%% 每按下按鈕一次,次數加1
case 4 %%%%%4,代表著所摁下按鈕的代號,即洋色
yyname=int2str(yynum);
yyyname=get(handles.edit7,'string');
picname=strcat(['Yellow',yyname,'-',yyyname,'.jpg']);
yynum=yynum+1; %%%% 每按下按鈕一次,次數加1
case 5 %%%%5,代表著所摁下按鈕的代號,即黃色
mmname=int2str(mmnum);
mmmname=get(handles.edit8,'string');
picname=strcat(['Mag',mmname,'-',mmmname,'.jpg']);
mmnum=mmnum+1; %%%% 每按下按鈕一次,次數加1
case 6 %%%%%6,代表著所摁下按鈕的代號,即青色
ccname=int2str(ccnum);
cccname=get(handles.edit10,'string');
picname=strcat(['Cyan',ccname,'-',cccname,'.jpg']);
ccnum=ccnum+1; %%%% 每按下按鈕一次,次數加1
end
pix=getframe(handles.axes1); %%%%獲取當前的坐標軸圖像
%%%%%%生成圖片到設定路徑
imwrite(pix.cdata,strcat(['C:\Users\Administrator\Desktop\',picname]));
%%%%%%保存成功時通知框提示
msgbox(strcat(['已成功保存當前圖片為',picname,'到默認路徑']))
通過此程序,可以實現對選取提取顏色的圖像進行保存處理,并將適應度,顏色序號等信息以文件名等保存。
4. GUI界面設計及程序仿真效果演示
4.1.GUI簡介及使用優點
圖形用戶接口(Graphical User Interface,簡稱GUI),其是有窗口,菜單和對話框等各種圖形元素組成的用戶界面。在這種用戶界面中,可以使操作形象生動,方便靈活。
對于圖形顏色分離,由于對不同的圖片,其對顏色的閾值要求不同,即對非指定顏色掩膜要求不同,有時不可能一次調整參數就能達到滿意結果,而是需要對其選擇不同的參數,因此可以做出GUI界面,對修改參數方面,且具有實時預覽功能,使交互性更方便,極大滿足用戶體驗。
如下圖即為GUI界面的功能區按鍵如下圖5:
圖5 GUI界面功能
4.2. 程序仿真效果演示
圖片提取效果仿真過程效果如下圖所示演示,圖6:
圖6 GUI界面讀入要處理的圖片
如下圖為掩膜方式分別選擇為:灰度掩膜,黑色掩膜,白色掩膜等三種方式來實現六種顏色的處理,其中紅色,綠色使用灰度掩膜方式,藍色,洋紅色使用黑色掩膜,黃色,青色采用白色掩膜,其效果圖如圖7~圖12:
圖7 使用灰度掩膜的紅色提取 圖8 使用灰度掩膜的紅色提取
圖9 使用黑色掩膜的藍色提取 圖10 使用黑色掩膜的品紅色提取
圖10 使用白色掩膜的青色提取 圖11 使用白色掩膜的青色提取
五.課程總結
缺點:只能暫時對六種基本顏色分離出來,相對來說仍是比較單一,對于過渡地帶顏色無法準確利用判別規則提取。
展望:作為圖像處理初學者,自己所研究的方向可能會用到這方面知識,所涉及的知識背景尚淺,希望對同學們起到拋磚引玉的作用,一起探討,共同努力!
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:
圖1 RGB圖像原理 圖2 RGB圖像RGB三色矩陣
所以RGB圖像的顏色分布區間如圖3:
圖3 RGB圖像的顏色分布圖
因此可得到六種顏色的判別規則如下:
利用以上判別準則來作為程序設計的核心,通過設計判斷語句,對圖像的不同色域進行分離,從而實現顏色分離。
3.程序設計
3.1設計流程圖
以下是整體程序的設計流程如圖4:
圖4 程序實現流程圖
通過此流程圖,可以把握全局思想來完成圖像顏色提取的框架結構,這樣可以有益于對整體的把握。
3.2.主要程序段分析
(1)讀入圖像部分的程序段分析:
%打開圖像
[FileName, FilePath]=uigetfile('*.jpg;*.png;*.tif;*.img;*.gif;','請選擇圖像數據');
if isequal(FilePath,0) %如果未選擇圖像則返回,防止報錯
return;
end
str=[FilePath FileName]; %文件的路徑,文件名稱
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)掩膜方式選擇及判別條件確定主要程序段分析(以紅色提取為例):
function Redbutton_Callback(hObject, eventdata, handles)
global Image R G B diff_R Gray Blackk Whitee aa
%掩膜方式的選擇:從下拉菜單中選擇掩膜方式
str1=get(handles.popupmenu1,'String');
val=get(handles.popupmenu1,'Value');
switch str1{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)保存圖片部分的主要程序段分析:
function pushbutton6_Callback(hObject, eventdata, handles)
global aa rrnum ggnum bbnum yynum mmnum ccnum
switch aa
case 0 %%%%%0,代表著所摁下按鈕的代號,即原圖
picname='原圖.jpg';
case 1 %%%%%1,代表著所摁下按鈕的代號,即紅色
rrname=int2str(rrnum); %%%%此數據代表著當前是第幾次保存紅色
rrrname=get(handles.edit1,'string');%%%%此數據代表著當前保存時的閾值
picname=strcat(['Red',rrname,'-',rrrname,'.jpg']);%%保存的路徑及名字
rrnum=rrnum+1; %%%% 每按下按鈕一次,次數加1
case 2 %%%%%2,代表著所摁下按鈕的代號,即綠色
ggname=int2str(ggnum);
gggname=get(handles.edit4,'string');
picname=strcat(['Green',ggname,'-',gggname,'.jpg']);
ggnum=ggnum+1; %%%% 每按下按鈕一次,次數加1
case 3 %%%%%3,代表著所摁下按鈕的代號,即藍色
bbname=int2str(bbnum);
bbbname=get(handles.edit5,'string');
picname=strcat(['Blue',bbname,'-',bbbname,'.jpg']);
bbnum=bbnum+1; %%%% 每按下按鈕一次,次數加1
case 4 %%%%%4,代表著所摁下按鈕的代號,即洋色
yyname=int2str(yynum);
yyyname=get(handles.edit7,'string');
picname=strcat(['Yellow',yyname,'-',yyyname,'.jpg']);
yynum=yynum+1; %%%% 每按下按鈕一次,次數加1
case 5 %%%%5,代表著所摁下按鈕的代號,即黃色
mmname=int2str(mmnum);
mmmname=get(handles.edit8,'string');
picname=strcat(['Mag',mmname,'-',mmmname,'.jpg']);
mmnum=mmnum+1; %%%% 每按下按鈕一次,次數加1
case 6 %%%%%6,代表著所摁下按鈕的代號,即青色
ccname=int2str(ccnum);
cccname=get(handles.edit10,'string');
picname=strcat(['Cyan',ccname,'-',cccname,'.jpg']);
ccnum=ccnum+1; %%%% 每按下按鈕一次,次數加1
end
pix=getframe(handles.axes1); %%%%獲取當前的坐標軸圖像
%%%%%%生成圖片到設定路徑
imwrite(pix.cdata,strcat(['C:\Users\Administrator\Desktop\',picname]));
%%%%%%保存成功時通知框提示
msgbox(strcat(['已成功保存當前圖片為',picname,'到默認路徑']))
通過此程序,可以實現對選取提取顏色的圖像進行保存處理,并將適應度,顏色序號等信息以文件名等保存。
4. GUI界面設計及程序仿真效果演示
4.1.GUI簡介及使用優點
圖形用戶接口(Graphical User Interface,簡稱GUI),其是有窗口,菜單和對話框等各種圖形元素組成的用戶界面。在這種用戶界面中,可以使操作形象生動,方便靈活。
對于圖形顏色分離,由于對不同的圖片,其對顏色的閾值要求不同,即對非指定顏色掩膜要求不同,有時不可能一次調整參數就能達到滿意結果,而是需要對其選擇不同的參數,因此可以做出GUI界面,對修改參數方面,且具有實時預覽功能,使交互性更方便,極大滿足用戶體驗。
如下圖即為GUI界面的功能區按鍵如下圖5:
圖5 GUI界面功能
4.2. 程序仿真效果演示
圖片提取效果仿真過程效果如下圖所示演示,圖6:
圖6 GUI界面讀入要處理的圖片
如下圖為掩膜方式分別選擇為:灰度掩膜,黑色掩膜,白色掩膜等三種方式來實現六種顏色的處理,其中紅色,綠色使用灰度掩膜方式,藍色,洋紅色使用黑色掩膜,黃色,青色采用白色掩膜,其效果圖如圖7~圖12:
圖7 使用灰度掩膜的紅色提取 圖8 使用灰度掩膜的紅色提取
圖9 使用黑色掩膜的藍色提取 圖10 使用黑色掩膜的品紅色提取
圖10 使用白色掩膜的青色提取 圖11 使用白色掩膜的青色提取
五.課程總結
缺點:只能暫時對六種基本顏色分離出來,相對來說仍是比較單一,對于過渡地帶顏色無法準確利用判別規則提取。
展望:作為圖像處理初學者,自己所研究的方向可能會用到這方面知識,所涉及的知識背景尚淺,希望對同學們起到拋磚引玉的作用,一起探討,共同努力!
|