基于OpenCV實(shí)戰(zhàn)的圖像處理:色度分割
點(diǎn)擊上方“小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時(shí)間送達(dá)

通過HSV色階使用彩色圖像可以分割來分割圖像中的對象,但這并不是分割圖像的唯一方法。為什么大多數(shù)人偏愛色度而不是RGB / HSV分割?
可以獲得RGB / HSV通道之間的比率。
可以使用由輔助顏色和其他顏色的混合物組成的目標(biāo)色塊。
我們將色度分割定義為利用RG通道的色度空間從圖像中提取目標(biāo)的過程。后者構(gòu)成了一個(gè)二維顏色表示,它忽略了與強(qiáng)度值相關(guān)的圖像信息。我們通過觀察不同顏色通道的比例來實(shí)現(xiàn)這一點(diǎn),并使用標(biāo)準(zhǔn)化的RGB空間來映射它。因此,為了計(jì)算圖像的RG色度,我們使用以下方程式:

我們主要只看r和g方程,因?yàn)閺哪抢镂覀兛梢灾庇^地計(jì)算b通道,讓我們使用我們的老朋友Python將色度分割付諸實(shí)踐。在繼續(xù)執(zhí)行之前,請安裝以下庫:
from skimage.io import imread, imshowimport matplotlib.pyplot as pltimport numpy as np
本文實(shí)踐操作將使用此圖像:

圖像處理步驟:
步驟1:計(jì)算圖像的RG色度
這是通過使用引言中定義的方程式完成的。
步驟2:計(jì)算顏色值的2D直方圖(原始圖像)
這是通過使R和色度值均變平并將其輸入hist2d函數(shù)中來實(shí)現(xiàn)的。
通過這一點(diǎn),可以注意到什么顏色或一組顏色構(gòu)成了我們的圖像。
步驟3:選擇參考圖片補(bǔ)丁
從感興趣的對象生成補(bǔ)丁。在這種情況下,我們將草莓細(xì)分。因此,將要選擇的補(bǔ)丁將是草莓的補(bǔ)丁。
步驟4:計(jì)算補(bǔ)丁的RG色度
重復(fù)步驟1,但在步驟3中使用圖像補(bǔ)丁
步驟5:計(jì)算顏色值的2D直方圖(色標(biāo))
重復(fù)步驟2,但在步驟3中使用圖像
到目前為止,我們已經(jīng)獲得了相關(guān)圖像的RG色度值?,F(xiàn)在,我們進(jìn)行下一步-參數(shù)分割。
第6步:參數(shù)細(xì)分
此步驟要求我們擬合高斯分布,該分布將確定屬于感興趣顏色的像素。在執(zhí)行此操作之前,應(yīng)從感興趣的對象(參考補(bǔ)?。┯?jì)算平均值和標(biāo)準(zhǔn)偏差。然后將這些反饋給高斯分布函數(shù)。
步驟1-6的代碼實(shí)現(xiàn)如下實(shí)現(xiàn):
#image chromaticity valuesfruits_R = fruits[:,:,0]*1.0/fruits.sum(axis=2)fruits_G = fruits[:,:,1]*1.0/fruits.sum(axis=2)#patchpatch_strw = fruits[60:90,50:90,:]#patch chromaticity valuespatch_R = patch_strw[:,:,0]*1.0/patch_strw.sum(axis=2)patch_G = patch_strw[:,:,1]*1.0/patch_strw.sum(axis=2)#mean and stdev calculation of patchstd_patch_R = np.std(patch_R.flatten())mean_patch_R = np.mean(patch_R.flatten())std_patch_G = np.std(patch_G.flatten())mean_patch_G = np.mean(patch_G.flatten())#gaussian functiondef gaussian(p,mean,std):return np.exp(-(p-mean)**2/(2*std**2))*(1/(std*((2*np.pi)**0.5)))x = np.linspace(0,1)y = gaussian(x,mean_patch_R,std_patch_R)#plottingfig, ax = plt.subplots(2, 3, figsize=(20, 7))ax[0,0].scatter(fruits_R.flatten(),fruits_G.flatten())ax[0,0].set_title('RG Chromaticity', size=14)ax[0,1].hist2d(fruits_R.flatten(), fruits_G.flatten(),bins=100,cmap='binary');ax[0,1].set_title('Color Values 2D Histogram', size=14)ax[0,2].imshow(patch_strw)ax[0,2].set_title('Strawberry Patch', size=14)ax[1,0].scatter(patch_R.flatten(),patch_G.flatten())ax[1,0].set_title('Patch RG Chromaticity', size=14)ax[1,1].hist2d(patch_R.flatten(), patch_G.flatten(),bins=100,cmap='binary')ax[1,1].set_title('Patch Color Values 2D Histogram', size=14)ax[1,2].plot(x,y)ax[1,2].set_title('Gaussian Plot', size=14)fig.suptitle('Strawberry', size = 30)

綜上所述,類似于彩色圖像分割方法,存在一個(gè)任意確定的閾值。嘗試并嘗試使用這些值,然后選擇將返回最理想輸出的值。同樣,在最終圖中,盡管草莓被清楚地分割了,但仍然捕獲了無關(guān)的信息。這是進(jìn)行形態(tài)學(xué)操作以方便進(jìn)一步清潔圖像的地方,因此分割與以往一樣準(zhǔn)確。
— — 完 — —

交流群
歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計(jì)算攝影、檢測、分割、識別、醫(yī)學(xué)影像、GAN、算法競賽等微信群(以后會逐漸細(xì)分),請掃描下面微信號加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進(jìn)入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~

