Matlab影象處理-RGB色彩提取原理方法

來源:酷知科普網 1.1W

本教程適合Matlab數字影象處理的初學者。目前有一些手機相機軟體有“魔法色彩”功能,可以將彩色照片變為只顯示某一種具體顏色的灰色照片。本文中所提到的RGB色彩提取純粹為實現個人興趣而編寫,正規教材中可能並無相關資料。文中較為全面直觀地給出在Matlab中對影象進行RGB色彩提取的方法原理和Matlab原始碼,並配合必要的程式碼註釋,希望能幫助Matlab和數字影象處理的初學者入門。

Matlab影象處理-RGB色彩提取原理方法
Matlab影象處理-RGB色彩提取原理方法 第2張
Matlab影象處理-RGB色彩提取原理方法 第3張
Matlab影象處理-RGB色彩提取原理方法 第4張

操作方法

(01)開啟影象[FileName, FilePath]=uigetfile('*.jpg;*.png;*.tif;*.img;*.gif;','請選擇影象資料');str=[FilePath FileName];Image=imread(str);% 以對話方塊的形式選擇開啟一幅影象

(02)設定引數Gray=rgb2gray(Image);R=Image(:,:,1); G=Image(:,:,2); B=Image(:,:,3);diff_R=0; diff_G=0; diff_B=0;  % 設定紅、綠、藍三種顏色提取閾值(越大越嚴格)

(03)紅色提取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=Gray(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;

(04)綠色提取Image_G=Image;GP_R=Image(:,:,1); GP_G=Image(:,:,2); GP_B=Image(:,:,3);XYG=~((G-R)>diff_G&(G-B)>diff_G);  % 提取綠色條件是G分量與R、B分量差值大於設定Mask=Gray(XYG);  % 灰照片掩膜GP_R(XYG)=Mask; GP_G(XYG)=Mask; GP_B(XYG)=Mask;  % 使得非綠色區域變為灰色Image_G(:,:,1)=GP_R; Image_G(:,:,2)=GP_G; Image_G(:,:,3)=GP_B;

(05)藍色提取Image_B=Image;BP_R=Image(:,:,1);BP_G=Image(:,:,2);BP_B=Image(:,:,3);XYB=~((B-R)>diff_B&(B-G)>diff_B);  % 提取綠色條件是G分量與R、B分量差值大於設定Mask_B=Gray(XYB);  % 灰照片掩膜BP_R(XYB)=Mask_B; BP_G(XYB)=Mask_B; BP_B(XYB)=Mask_B;  % 使得非藍色區域變為灰色Image_B(:,:,1)=BP_R; Image_B(:,:,2)=BP_G; Image_B(:,:,3)=BP_B;

(06)顯示結果subplot(2,2,1),imshow(Image); title('Image');subplot(2,2,2),imshow(Image_R); title('Red Pass');subplot(2,2,3),imshow(Image_G); title('Green Pass');subplot(2,2,4),imshow(Image_B); title('Blue Pass');% 顯示原圖與R/G/B三色提取結果對比圖並顯示標籤

Matlab影象處理-RGB色彩提取原理方法 第5張

(07)儲存結果imwrite(Image_R,'Image_R.jpg','jpeg');imwrite(Image_G,'Image_G.jpg','jpeg');imwrite(Image_B,'Image_B.jpg','jpeg');% 將R/G/B三色提取結果寫成jpg檔案儲存到當前目錄

原理詳解

(01)本文中提到的RGB色彩提取方法最為關鍵的也最為難以嚴格界定的地方是對於R/G/B三種顏色的判別規則,本文中提到的判別規則是更具R/G/B中某一顏色分量明顯不小於其它分量時,即判別某畫素點為某種顏色,並通過設定判別閾值,來控制判別條件的顏色與否。為了保持圖片的完整性(即三種色彩提取結果中彩色相加後能得到原圖),本例中預設設定閾值為0,為了得到更為單純的顏色,可適當增大閾值。如下圖是將R/G/B三色提取閾值設定為0的提取結果:

Matlab影象處理-RGB色彩提取原理方法 第6張

(02)如下圖是將R/G/B三色提取閾值設定為128的提取結果,從圖中可看到,當閾值設定越大(判定條件愈加嚴格),提取結果更接近R/G/B純色。

Matlab影象處理-RGB色彩提取原理方法 第7張

特別提示

本文中提出的R/G/B三色判別規則為個人想法,更好的顏色判別規則有待大家發現,歡迎大家對本文提出的方法進行互動討論。

熱門標籤