Python圖像運(yùn)算之圖像掩膜直方圖和HS直方圖詳解_第1頁
Python圖像運(yùn)算之圖像掩膜直方圖和HS直方圖詳解_第2頁
Python圖像運(yùn)算之圖像掩膜直方圖和HS直方圖詳解_第3頁
Python圖像運(yùn)算之圖像掩膜直方圖和HS直方圖詳解_第4頁
Python圖像運(yùn)算之圖像掩膜直方圖和HS直方圖詳解_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第Python圖像運(yùn)算之圖像掩膜直方圖和HS直方圖詳解目錄一.圖像掩膜直方圖二.圖像HS直方圖三.直方圖判斷白天黑夜四.總結(jié)

一.圖像掩膜直方圖

如果要統(tǒng)計(jì)圖像的某一部分直方圖,就需要使用掩碼(蒙板)來進(jìn)行計(jì)算。假設(shè)將要統(tǒng)計(jì)的部分設(shè)置為白色,其余部分設(shè)置為黑色,然后使用該掩膜進(jìn)行直方圖繪制,其完整代碼如下所示。

#-*-coding:utf-8-*-

#By:Eastmount

importcv2

importnumpyasnp

importmatplotlib.pyplotasplt

importmatplotlib

#讀取圖像

img=cv2.imread('luo.png')

#轉(zhuǎn)換為RGB圖像

img_rgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)

#設(shè)置掩膜

mask=np.zeros(img.shape[:2],np.uint8)

mask[100:300,100:300]=255

masked_img=cv2.bitwise_and(img,img,mask=mask)

#圖像直方圖計(jì)算

hist_full=cv2.calcHist([img],[0],None,[256],[0,256])#通道[0]-灰度圖

#圖像直方圖計(jì)算(含掩膜)

hist_mask=cv2.calcHist([img],[0],mask,[256],[0,256])

plt.figure(figsize=(8,6))

#設(shè)置字體

matplotlib.rcParams['font.sans-serif']=['SimHei']

#原始圖像

plt.subplot(221)

plt.imshow(img_rgb,'gray')

plt.axis('off')

plt.title("(a)原始圖像")

#繪制掩膜

plt.subplot(222)

plt.imshow(mask,'gray')

plt.axis('off')

plt.title("(b)掩膜")

#繪制掩膜設(shè)置后的圖像

plt.subplot(223)

plt.imshow(masked_img,'gray')

plt.axis('off')

plt.title("(c)圖像掩膜處理")

#繪制直方圖

plt.subplot(224)

plt.plot(hist_full)

plt.plot(hist_mask)

plt.title("(d)直方圖曲線")

plt.xlabel("x")

plt.ylabel("y")

plt.show()

其運(yùn)行結(jié)果如圖1所示,它使用了一個(gè)200200像素的掩膜進(jìn)行實(shí)驗(yàn)。其中圖1(a)表示原始圖像,圖1(b)表示200200像素的掩膜,圖1表示原始圖像進(jìn)行掩膜處理,圖1(d)表示直方圖曲線,藍(lán)色曲線為原始圖像的灰度值直方圖分布情況,綠色波動(dòng)更小的曲線為掩膜直方圖曲線。

二.圖像HS直方圖

為了刻畫圖像中顏色的直觀特性,常常需要分析圖像的HSV空間下的直方圖特性。HSV空間是由色調(diào)(Hue)、飽和度(Saturation)、以及亮度(Value)構(gòu)成,因此在進(jìn)行直方圖計(jì)算時(shí),需要先將源RGB圖像轉(zhuǎn)化為HSV顏色空間圖像,然后將對(duì)應(yīng)的H和S通道進(jìn)行單元?jiǎng)澐?,再其二維空間上計(jì)算相對(duì)應(yīng)直方圖,再計(jì)算直方圖空間上的最大值并歸一化繪制相應(yīng)的直方圖信息,從而形成色調(diào)-飽和度直方圖(或H-S直方圖)。該直方圖通常應(yīng)用在目標(biāo)檢測(cè)、特征分析以及目標(biāo)特征跟蹤等場(chǎng)景[1-2]。

由于H和S分量與人感受顏色的方式是緊密相連,V分量與圖像的彩色信息無關(guān),這些特點(diǎn)使得HSV模型非常適合于借助人的視覺系統(tǒng)來感知彩色特性的圖像處理算法。

下面的代碼是具體的實(shí)現(xiàn)代碼,使用matplotlib.pyplot庫中的imshow()函數(shù)來繪制具有不同顏色映射的2D直方圖。

#-*-coding:utf-8-*-

#By:Eastmount

importcv2

importnumpyasnp

importmatplotlib.pyplotasplt

#讀取圖像

img=cv2.imread('luo.png')

#轉(zhuǎn)換為RGB圖像

img_rgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)

#圖像HSV轉(zhuǎn)換

hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

#計(jì)算H-S直方圖

hist=cv2.calcHist(hsv,[0,1],None,[180,256],[0,180,0,256])

#原始圖像

plt.figure(figsize=(8,6))

plt.subplot(121),plt.imshow(img_rgb,'gray'),plt.title("(a)"),plt.axis('off')

#繪制H-S直方圖

plt.subplot(122),plt.imshow(hist,interpolation='nearest'),plt.title("(b)")

plt.xlabel("x"),plt.ylabel("y")

plt.show()

圖2(a)表示原始輸入圖像,圖2(b)是原圖像對(duì)應(yīng)的彩色直方圖,其中X軸表示飽和度(S),Y軸表示色調(diào)(H)。在直方圖中,可以看到H=140和S=130附近的一些高值,它對(duì)應(yīng)于艷麗的色調(diào)。

三.直方圖判斷白天黑夜

接著講述一個(gè)應(yīng)用直方圖的案例,通過直方圖來判斷一幅圖像是黑夜或白天。常見的方法是通過計(jì)算圖像的灰度平均值、灰度中值或灰度標(biāo)準(zhǔn)差,再與自定義的閾值進(jìn)行對(duì)比,從而判斷是黑夜還是白天[3-4]。

灰度平均值:該值等于圖像中所有像素灰度值之和除以圖像的像素個(gè)數(shù)。

灰度中值:對(duì)圖像中所有像素灰度值進(jìn)行排序,然后獲取所有像素最中間的值,即為灰度中值。

灰度標(biāo)準(zhǔn)差:又常稱均方差,是離均差平方的算術(shù)平均數(shù)的平方根。標(biāo)準(zhǔn)差能反映一個(gè)數(shù)據(jù)集的離散程度,是總體各單位標(biāo)準(zhǔn)值與其平均數(shù)離差平方的算術(shù)平均數(shù)的平方根。如果一幅圖看起來灰蒙蒙的,那灰度標(biāo)準(zhǔn)差就??;如果一幅圖看起來很鮮艷,那對(duì)比度就很大,標(biāo)準(zhǔn)差也大。

下面的代碼是計(jì)算灰度Lena圖的灰度平均值、灰度中值和灰度標(biāo)準(zhǔn)差。

#-*-coding:utf-8-*-

#By:Eastmount

importcv2

importnumpyasnp

importmatplotlib.pyplotasplt

#函數(shù):獲取圖像的灰度平均值

deffun_mean(img,height,width):

sum_img=0

foriinrange(height):

forjinrange(width):

sum_img=sum_img+int(img[i,j])

mean=sum_img/(height*width)

returnmean

#函數(shù):獲取中位數(shù)

deffun_median(data):

length=len(data)

data.sort()

if(length%2)==1:

z=length//2

y=data[z]

else:

y=(int(data[length//2])+int(data[length//2-1]))/2

returny

#讀取圖像

img=cv2.imread('lena-hd.png')

#圖像灰度轉(zhuǎn)換

grayImage=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

#獲取圖像高度和寬度

height=grayImage.shape[0]

width=grayImage.shape[1]

#計(jì)算圖像的灰度平均值

mean=fun_mean(grayImage,height,width)

print("灰度平均值:",mean)

#計(jì)算圖像的灰度中位數(shù)

value=grayImage.ravel()#獲取所有像素值

median=fun_median(value)

print("灰度中值:",median)

#計(jì)算圖像的灰度標(biāo)準(zhǔn)差

std=np.std(value,ddof=1)

print("灰度標(biāo)準(zhǔn)差",std)

其運(yùn)行結(jié)果如圖3所示,圖3(a)為原始圖像,圖3(b)為處理結(jié)果。其灰度平均值為123,灰度中值為129,灰度標(biāo)準(zhǔn)差為48.39。

下面講解另一種用來判斷圖像是白天還是黑夜的方法,其基本步驟如下:

(1)讀取原始圖像,轉(zhuǎn)換為灰度圖,并獲取圖像的所有像素值;

(2)設(shè)置灰度閾值并計(jì)算該閾值以下的像素個(gè)數(shù)。比如像素的閾值設(shè)置為50,統(tǒng)計(jì)低于50的像素值個(gè)數(shù);

(3)設(shè)置比例參數(shù),對(duì)比該參數(shù)與低于該閾值的像素占比,如果低于參數(shù)則預(yù)測(cè)為白天,高于參數(shù)則預(yù)測(cè)為黑夜。比如該參數(shù)設(shè)置為0.8,像素的灰度值低于閾值50的個(gè)數(shù)占整幅圖像所有像素個(gè)數(shù)的90%,則認(rèn)為該圖像偏暗,故預(yù)測(cè)為黑夜;否則預(yù)測(cè)為白天。

具體實(shí)現(xiàn)的代碼如下所示。

#-*-coding:utf-8-*-

#By:Eastmount

importcv2

importnumpyasnp

importmatplotlib.pyplotasplt

#函數(shù):判斷黑夜或白天

deffunc_judge(img):

#獲取圖像高度和寬度

height=grayImage.shape[0]

width=grayImage.shape[1]

piexs_sum=height*width

dark_sum=0#偏暗像素個(gè)數(shù)

dark_prop=0#偏暗像素所占比例

foriinrange(height):

forjinrange(width):

ifimg[i,j]50:#閾值為50

dark_sum+=1

#計(jì)算比例

print(dark_sum)

print(piexs_sum)

dark_prop=dark_sum*1.0/piexs_sum

ifdark_prop=0.8:

print("Thispictureisdark!",dark_prop)

else:

print("Thispictureisbright!",dark_prop)

#讀取圖像

img=cv2.imread('day.png')

#轉(zhuǎn)換為RGB圖像

img_rgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)

#圖像灰度轉(zhuǎn)換

grayImage=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

#計(jì)算256灰度級(jí)的圖像直方圖

hist=cv2.calcHist([grayImage],[0],None,[256],[0,255])

#判斷黑夜或白天

func_judge(grayImage)

#顯示原始圖像和繪制的直方圖

plt.subplot(121),plt.imshow(img_rgb,'gray'),plt.axis('off'),plt.title("(a)")

plt.subplot(122),plt.plot(hist,color='r'),plt.xlabel("x"),plt.ylabel("y"),plt.title("(b)")

plt.show()

第一張測(cè)試圖輸出的結(jié)果如圖4所示,其中圖4(a)為原始圖像,圖4(b)為對(duì)應(yīng)直方圖曲線。

最終輸出結(jié)果為(Thispictureisbright!,0.010082704388303882),該預(yù)測(cè)為白天。

第二張測(cè)試圖輸出的結(jié)果如圖6

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論