首頁 > 軟體

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

2019-12-25 18:51:46

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


1

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

2

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

3

紅色提取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;

4

綠色提取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;

5

藍色提取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;

6

顯示結果

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三色提取結果對比圖並顯示標籤


7

儲存結果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檔案儲存到當前目錄

1

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

    如下圖是將R/G/B三色提取閾值設定為0的提取結果:


2

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



IT145.com E-mail:sddin#qq.com