openCV【實(shí)踐系列】2——OpenCV方向梯度直方圖

什么是特征描述符

特征描述符是圖像或圖像塊的表示浪册,其通過提取有用信息和丟棄無關(guān)信息來簡化圖像咸产。

通常疲迂,特征描述符將一個(gè)width*height* 3(通道)的圖像轉(zhuǎn)換為長度為n的特征向量或數(shù)組昼汗。在HOG特征描述符的情況下毯焕,輸入圖像的大小為64×128×3菠齿,輸出特征向量的長度為3780剥槐。

在HOG特征描述符中损谦,梯度方向(定向梯度)的分布(直方圖)被用作特征。圖像的梯度(x和y導(dǎo)數(shù))是有用的找颓,因?yàn)樵谶吘壓徒锹洌ㄍ蝗粡?qiáng)度變化的區(qū)域)周圍的梯度幅度很大合愈,并且我們知道邊緣和角落包含關(guān)于物體形狀的更多信息而不是平坦區(qū)域。

如何計(jì)算方向梯度的直方圖?

在本節(jié)中佛析,我們將詳細(xì)介紹計(jì)算HOG特征描述符益老。為了說明每個(gè)步驟,我們將使用圖像的塊寸莫。

第1步:預(yù)處理

如前所述捺萌,用于行人檢測的HOG特征描述符是在圖像的64×128塊上計(jì)算的。當(dāng)然膘茎,圖像可以是任何尺寸桃纯。通常,在多個(gè)圖像位置處分析多個(gè)尺度的貼片披坏。唯一的限制是被分析的塊具有固定的寬高比态坦。在我們的例子中,塊需要具有1:2的寬高比棒拂。例如伞梯,它們可以是100×200,128×256或1000×2000但不是101×205。

為了說明這一點(diǎn)帚屉,我展示了一個(gè)大小為720×475的圖像谜诫。我們選擇了一個(gè)大小為100×200的塊來計(jì)算我們的HOG特征描述符。將這個(gè)塊從圖像中裁剪并調(diào)整為64×128」サ現(xiàn)在我們準(zhǔn)備為這個(gè)圖像塊計(jì)算HOG描述符喻旷。


圖1:提取-裁剪-resize過程

Dalal和Triggs的論文也提到了伽馬校正作為預(yù)處理步驟,但性能提升很小敬特,因此我們正在跳過這一步。

第2步:計(jì)算漸變圖像

要計(jì)算HOG描述符牺陶,我們需要首先計(jì)算水平和垂直梯度;?畢竟伟阔,我們想要計(jì)算梯度的直方圖。通過使用以下核來對圖像進(jìn)行濾波可以輕松實(shí)現(xiàn)這一點(diǎn)掰伸。

圖2:濾波核

在OpenCV中使用核大小為1的Sobel運(yùn)算符皱炉,我們也可以獲得相同的結(jié)果。

# Python 梯度計(jì)算

# 讀圖像

im = cv2.imread('bolt.png')

im = np.float32(im) / 255.0

# 計(jì)算梯度

gx = cv2.Sobel(img, cv2.CV_32F, 1, 0, ksize=1)

gy = cv2.Sobel(img, cv2.CV_32F, 0, 1, ksize=1)

復(fù)制代碼

接下來狮鸭,我們可以使用以下公式找到梯度的大小和方向:

在opencv中可以使用cartToPolar函數(shù)來實(shí)現(xiàn)


# Python 計(jì)算梯度大小和方向 (度為單位)

mag, angle = cv2.cartToPolar(gx, gy, angleInDegrees=True)

復(fù)制代碼

下圖顯示了梯度:


圖3:左:x-梯度的絕對值 中:y-梯度的絕對值 右梯度的大小

請注意合搅,x-gradient在垂直線上觸發(fā),y-gradient在水平線上觸發(fā)歧蕉。梯度的大小會隨著強(qiáng)度的急劇變化而發(fā)生灾部。當(dāng)該區(qū)域光滑時(shí),它們都不會產(chǎn)生惯退。我故意省略了顯示漸變方向的圖像赌髓,因?yàn)橐詧D像的方向傳達(dá)的信息不會太多。

梯度圖像刪除了許多非必要信息(例如恒定的彩色背景),但突出顯示了輪廓锁蠕。換句話說夷野,你可以查看梯度圖像,并且仍然可以輕松地說出圖片中有人荣倾。

在每個(gè)像素處悯搔,梯度具有幅度和方向。對于彩色圖像舌仍,評估三個(gè)通道的梯度(如圖3所示)妒貌。一個(gè)像素處的梯度的大小是三個(gè)通道的梯度的最大值,并且角度是對應(yīng)于最大梯度的角度抡笼。

步驟3:計(jì)算8×8單元中梯度的直方圖

在該步驟中苏揣,將圖像分成8×8個(gè)單元,并計(jì)算每個(gè)8×8單元的梯度直方圖推姻。

圖4:HOG的8*8cell

我們將在一瞬間了解直方圖平匈,但在我們做之前讓我們先了解為什么我們將圖像分成8×8個(gè)單元格。使用特征描述符描述圖像塊的一個(gè)重要原因是它提供了緊湊的表現(xiàn)藏古。8×8圖像塊包含8×8×3 = 192個(gè)像素值增炭。此塊的每個(gè)像素的梯度包含2個(gè)值(幅度和方向),最多可添加8x8x2 = 128個(gè)數(shù)字拧晕。到本節(jié)結(jié)束時(shí)隙姿,我們將看到如何使用9-bin直方圖表示這128個(gè)數(shù)字,這些直方圖可以存儲為9個(gè)數(shù)字的數(shù)組厂捞。不僅表示更緊湊输玷,計(jì)算塊上的直方圖使得這種表示對噪聲更加魯棒。個(gè)別的梯度可能有噪聲靡馁,但超過8×8塊的直方圖使得表示對噪音的敏感性降低欲鹏。

但為什么8×8塊呢?為什么不是32×32臭墨?它是我們正在尋找的特征尺度的設(shè)計(jì)選擇赔嚎。HOG最初用于行人檢測。行人照片中的8×8個(gè)cell縮放到64×128胧弛,足以捕捉有趣的特征(例如尤误,臉部,頭頂?shù)龋?/p>

直方圖的本質(zhì)是一個(gè)由9個(gè)bin組成的數(shù)組或向量结缚,每個(gè)bin對應(yīng)于角度0,20,40,60 ... 160损晤。

讓我們看看圖像中的一個(gè)8×8塊,看看梯度的外觀红竭。

圖5:中:箭頭表示RGB塊和梯度?右:同一塊中的數(shù)字表示梯度

如果你是計(jì)算機(jī)視覺的初學(xué)者沉馆,那么圖像中心的信息非常豐富码党。它顯示圖像的塊用箭頭表示梯度-箭頭顯示梯度的方向,其長度顯示幅度斥黑。注意箭頭的方向如何指向強(qiáng)度變化的方向揖盘,幅度表示差異有多大。

在右側(cè)锌奴,我們看到原始數(shù)字代表8×8單元格中的梯度兽狭,只有一個(gè)小差異-角度介于0和180度之間,而不是0到360度鹿蜀。這些被稱為“無符號”梯度箕慧,因?yàn)樘荻鹊呢?fù)方向也由相同的數(shù)字表示。換句話說茴恰,一個(gè)梯度箭頭和與其相對的180度的箭頭被認(rèn)為是相同的颠焦。但是,為什么不使用0 - 360度往枣?根據(jù)經(jīng)驗(yàn)伐庭,已經(jīng)表明無符號梯度比行人檢測的有符號梯度更有效。HOG的某些實(shí)例將允許你指定是否要使用帶符號的漸變分冈。

下一步是在這些8×8單元格中創(chuàng)建梯度直方圖圾另。直方圖包含9個(gè)bin對應(yīng)于角度0,20,40 ...... 160。

下圖說明了該過程雕沉。我們正在尋找與上圖相同的8×8塊的梯度的大小和方向集乔。基于方向選擇bin坡椒,并且基于幅度選擇投票(進(jìn)入bin中的值)扰路。讓我們首先關(guān)注藍(lán)色環(huán)繞的像素。它的角度(方向)為80度倔叼,幅度為2.所以它在第5個(gè)箱子中加2汗唱。使用紅色環(huán)繞的像素處的梯度具有10度的角度和4的大小。由于10度是0到20之間的一半缀雳,因此像素的投票均勻地分成兩個(gè)bin渡嚣。


圖6:梯度直方圖

還有一個(gè)細(xì)節(jié)需要注意梢睛。如果角度大于160度肥印,則介于160和180之間,我們知道角度包圍0和180等效绝葡。因此深碱,在下面的示例中,角度為165度的像素與0度箱和160度bin成比例藏畅。

圖7:梯度直方圖示例

將8×8cell中的所有像素的貢獻(xiàn)相加以創(chuàng)建9-bin直方圖敷硅。對于上面的塊功咒,它看起來像這樣

圖8:梯度直方圖化

在我們的表示中,y軸是0度绞蹦。你可以看到直方圖在0度和180度附近有很多權(quán)重力奋,這只是另一種說法,即塊的梯度要么方向向上要么方向向下幽七。

步驟4:16×16塊標(biāo)準(zhǔn)化

在上一步中景殷,我們基于圖像的梯度創(chuàng)建了直方圖。圖像的梯度對整體光照很敏感澡屡。如果將所有像素值除以2則使圖像變暗猿挚,則梯度幅度將改變一半,因此直方圖值將改變一半驶鹉。理想情況下绩蜻,我們希望描述符與光照變化無關(guān)。換句話說室埋,我們希望“標(biāo)準(zhǔn)化”直方圖办绝,以便它們不受照明變化的影響。

在我解釋直方圖是如何規(guī)范化之前词顾,讓我們看看長度為3的向量是如何規(guī)范化的八秃。

假設(shè)我們有一個(gè)RGB顏色矢量[128,64,32]。這個(gè)向量的長度是

肉盹。這也稱為向量的L2范數(shù)昔驱。將該向量的每個(gè)元素除以146.64得到歸一化向量[0.87,0.43,0.22]。現(xiàn)在考慮另一個(gè)向量上忍,其中元素是第一個(gè)向量2 x [128,64,32] = [256,128,64]的值的兩倍骤肛。你可以自己解決這個(gè)問題,看看規(guī)范化[256,128,64]會產(chǎn)生[0.87,0.43,0.22]窍蓝,這與原始RGB矢量的標(biāo)準(zhǔn)化版本相同.

現(xiàn)在我們知道如何規(guī)范化矢量腋颠,你可能會想到在計(jì)算HOG時(shí)可以簡單地將9×1直方圖歸一化,就像我們對上面的3×1矢量進(jìn)行歸一化一樣吓笙。這不是一個(gè)壞主意淑玫,但更好的想法是在更大尺寸的16×16塊上進(jìn)行標(biāo)準(zhǔn)化。16×16塊具有4個(gè)直方圖面睛,它們可以連接形成36×1元素向量絮蒿,并且可以按照3×1向量歸一化的方式進(jìn)行歸一化。然后將窗口以8個(gè)元素進(jìn)行移動(dòng)叁鉴,并在該窗口上計(jì)算歸一化的36×1矢量土涝,并重復(fù)該過程。

步驟5:計(jì)算HOG特征向量

為了計(jì)算整個(gè)圖像塊的最終特征向量幌墓,將36×1向量連接成一個(gè)大矢量但壮。這個(gè)載體的大小是多少冀泻?讓我們計(jì)算一下

1.我們有多少個(gè)16×16塊的位置?

有7個(gè)水平位置和15個(gè)垂直位置蜡饵,總共7 x 15 = 105個(gè)位置弹渔。

2.每個(gè)16×16塊由36×1向量表示。所以當(dāng)我們將它們?nèi)窟B接成一個(gè)大向量時(shí)溯祸,我們得到一個(gè)36×105 = 3780維向量捞附。

可視化方向梯度直方圖

通常通過在8×8的cell中繪制9×1標(biāo)準(zhǔn)化直方圖來可視化圖像塊的HOG描述符。如圖8所示您没,你會注意到直方圖的主導(dǎo)方向捕捉了人的形狀鸟召,特別是在軀干和腿部周圍。

不幸的是氨鹏,沒有簡單的方法可視化OpenCV中的HOG描述符欧募。


圖9:可視化方向梯度直方圖

openCV【實(shí)踐系列】2——OpenCV方向梯度直方圖

https://bbs.easyaiforum.cn/thread-672-1-1.html

(出處: 易學(xué)智能)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市仆抵,隨后出現(xiàn)的幾起案子跟继,更是在濱河造成了極大的恐慌,老刑警劉巖镣丑,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舔糖,死亡現(xiàn)場離奇詭異,居然都是意外死亡莺匠,警方通過查閱死者的電腦和手機(jī)金吗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來趣竣,“玉大人摇庙,你說我怎么就攤上這事∫B疲” “怎么了卫袒?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長单匣。 經(jīng)常有香客問我夕凝,道長,這世上最難降的妖魔是什么户秤? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任码秉,我火速辦了婚禮,結(jié)果婚禮上虎忌,老公的妹妹穿的比我還像新娘泡徙。我一直安慰自己橱鹏,他們只是感情好膜蠢,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布堪藐。 她就那樣靜靜地躺著,像睡著了一般挑围。 火紅的嫁衣襯著肌膚如雪礁竞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天杉辙,我揣著相機(jī)與錄音模捂,去河邊找鬼。 笑死蜘矢,一個(gè)胖子當(dāng)著我的面吹牛狂男,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播品腹,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼岖食,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了舞吭?” 一聲冷哼從身側(cè)響起泡垃,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎羡鸥,沒想到半個(gè)月后蔑穴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡惧浴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年存和,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片衷旅。...
    茶點(diǎn)故事閱讀 38,650評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡哑姚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出芜茵,到底是詐尸還是另有隱情叙量,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布九串,位于F島的核電站绞佩,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏猪钮。R本人自食惡果不足惜品山,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望烤低。 院中可真熱鬧肘交,春花似錦、人聲如沸扑馁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至复罐,卻和暖如春涝登,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背效诅。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工胀滚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人乱投。 一個(gè)月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓咽笼,卻偏偏與公主長得像,于是被迫代替她去往敵國和親戚炫。 傳聞我的和親對象是個(gè)殘疾皇子褐荷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評論 2 349