欧美日韩国产一区二区三区不卡,欧洲一区二区三区精品,日韩一区不卡,成人国产二区

hog(圖像特征工程:HOG特征描述子介紹)

時(shí)間:2024-05-05 16:04:42 閱讀:7

圖像特性工程:HOG特性形貌子先容

先容

在機(jī)器學(xué)習(xí)算法的天下里,特性工程好壞常緊張的。實(shí)踐上,作為一名數(shù)據(jù)封建家,這是我最喜好的方面之一!從現(xiàn)有特性中計(jì)劃新特性并改良模子的功能,這就是我們舉行最多實(shí)行的場(chǎng)合。

天下上一些頂級(jí)數(shù)據(jù)封建家依托特性工程來(lái)提高他們?cè)诒荣惻判邪竦梅帧N倚刨嚹隳酥習(xí)诓季只瘮?shù)據(jù)上使用種種特性工程武藝。

我們可以將此武藝擴(kuò)展到非布局化數(shù)據(jù)(比如圖像)嗎?關(guān)于盤(pán)算機(jī)視覺(jué)喜好者來(lái)說(shuō),這是一個(gè)幽默的成績(jī),我們將在本文中處理這個(gè)成績(jī)。準(zhǔn)備好對(duì)圖像數(shù)據(jù)舉行特性提取情勢(shì)的特性工程吧!

在本文中,我將向你先容一種盛行的圖像特性提取武藝——朝向梯度直方圖(Histogram of Oriented Gradients),或俗稱的HOG。我們將了解什么是HOG特性形貌子,它是怎樣事情的(算法眼前的完備數(shù)學(xué)原理),最初,用Python完成它。

目次

  1. 什么是特性形貌子?
  2. HOG特性形貌子簡(jiǎn)介
  3. HOG的盤(pán)算歷程
  4. 預(yù)處理數(shù)據(jù)
  5. 盤(pán)算梯度
  6. 盤(pán)算幅值和朝向
  7. 使用梯度和朝向創(chuàng)建直方圖的辦法
  8. HOG的盤(pán)算歷程
  9. 盤(pán)算梯度直方圖
  10. 標(biāo)準(zhǔn)化梯度
  11. 一幅完備圖像的特性
  12. 在Python中完成HOG特性形貌子

什么是特性形貌子?

你約莫在閱讀標(biāo)題時(shí)就以前碰到了這個(gè)成績(jī)。以是,在我們跳進(jìn)文章的HOG局部之前,起主要清晰這一點(diǎn)。

看看底下體現(xiàn)的兩個(gè)圖像。你能區(qū)分出圖像中的物體嗎?

我們可以清晰地看到這里的右圖有狗,左圖有車。如今,讓我讓這項(xiàng)職責(zé)略微繁復(fù)一點(diǎn),區(qū)分下圖所示的目標(biāo):

照舊挺容易的。你能猜出第一種和第二種情況之間有什么區(qū)別嗎?第一對(duì)圖像有很多信息,好比物體的外形,顏色,邊沿,背景等。

另一方面,第二對(duì)信息少得多(僅有外形和邊沿),但它仍舊足以區(qū)分這兩個(gè)圖像。

你曉得我想說(shuō)什么嗎?在第二種情況下,我們照舊很容易區(qū)分目標(biāo),由于它具有識(shí)別目標(biāo)所需的必要信息。這正是特性形貌子的作用:

它是圖像的簡(jiǎn)化表現(xiàn),僅包含有關(guān)圖像的最緊張信息。

以下是一些最受接待的的特性形貌子。

  • HOG:朝向梯度直方圖
  • SIFT:標(biāo)準(zhǔn)安定的特性變動(dòng)
  • SURF:增速妥當(dāng)特性

在本文中,我們將重點(diǎn)眷注HOG特性形貌子及其事情原理。讓我們開(kāi)頭吧!

HOG特性形貌子簡(jiǎn)介

HOG(Histogram of Oriented Gradients)是一種特性形貌子,通常用于從圖像數(shù)據(jù)中提取特性。它廣泛用于盤(pán)算機(jī)視覺(jué)職責(zé)的物體檢測(cè)。

讓我們看一下HOG的一些緊張方面,它們與其他特性形貌子不同:

  • HOG形貌符眷注目標(biāo)的布局或外形。如今你約莫會(huì)問(wèn),這和我們?yōu)閳D像提取的邊沿特性有什么不同?在邊沿特性的情況下,我們只識(shí)別像素對(duì)否是邊沿。HOG還可以提供邊沿朝向。這是經(jīng)過(guò)提取邊沿的梯度和朝向(大概你可以說(shuō)輕重和朝向)來(lái)完成的
  • 別的,這些朝向是在“局部”舉行局部盤(pán)算的。這意味著整個(gè)圖像被支解成更小的地區(qū),關(guān)于每個(gè)地區(qū),盤(pán)算梯度和朝向。我們將在接下去的末節(jié)中更具體地討論這個(gè)成績(jī)
  • 最初,HOG將分散為這些地區(qū)天生一個(gè)直方圖。直方圖是使用像素值的梯度和朝向創(chuàng)建的,因此得名“朝向梯度直方圖”。

給一個(gè)正式界說(shuō):

HOG特性形貌子盤(pán)算圖像局部地區(qū)中梯度朝向的顯現(xiàn)次數(shù)。

使用OpenCV等東西完成HOG十分簡(jiǎn)便。這只是幾行代碼,由于我們?cè)趕kimage.feature庫(kù)中有一個(gè)名為hog的預(yù)界說(shuō)函數(shù)。但是,我們?cè)诒疚闹械闹攸c(diǎn)是怎樣實(shí)踐盤(pán)算這些特性。

盤(pán)算朝向梯度直方圖(HOG)的歷程

我們?nèi)缃駪?yīng)該對(duì)HOG特性形貌子的基本看法有所了解。是時(shí)分深化研討本文眼前的中心頭腦了。讓我們討論HOG的漸漸盤(pán)算歷程。

思索底下的尺寸圖像(180 x 280)。讓我們具體了解怎樣以此圖像創(chuàng)建HOG特性:

第一步:預(yù)處理數(shù)據(jù)(64x128)

這是大大多人都十分熟習(xí)的一步。預(yù)處理數(shù)據(jù)是任何機(jī)器學(xué)習(xí)項(xiàng)目中的緊張步調(diào),即使在處理圖像時(shí)也沒(méi)有什么不同。

我們必要對(duì)圖像舉行預(yù)處理,并將寬高比低落到1:2。圖像輕重最好是64 x 128。這是由于我們將圖像分紅88和1616小塊來(lái)提取特性。具有指定的輕重(64 x 128)將使我們的一切盤(pán)算相當(dāng)簡(jiǎn)便。內(nèi)幕上,這正是原始論文中使用的值。

回到我們的例子,讓我們將輕重為64x128作為現(xiàn)在的標(biāo)準(zhǔn)圖像輕重。以下是調(diào)停后的圖像:

第二步:盤(pán)算梯度(x和y朝向)

下一步是盤(pán)算圖像中每個(gè)像素的梯度。梯度是x和y朝向上的小厘革。這里,我要從圖像中取一小塊,然后盤(pán)算它的梯度:

我們將取得這個(gè)局部的像素值。假定我們?yōu)榻o定的局部天生底下的像素矩陣(這里的矩陣只是作為一個(gè)例子,這些并不是給定局部的原始像素值):

我突出體現(xiàn)了像素值85。如今,要確定x朝向上的梯度,我們必要從右方的像素值減去右方的值。相似地,為了盤(pán)算y朝向的梯度,我們將從所選像素上的像素值減去底下的像素值。

因此,該像素的x和y朝向的梯度為:

  • X朝向的厘革($G_x$)= 89-78 = 11
  • Y朝向的厘革($G_y$)= 68-56 = 8

這個(gè)歷程將給我們兩個(gè)新的矩陣,一個(gè)在x朝向上存儲(chǔ)梯度,另一個(gè)在y朝向上存儲(chǔ)梯度。這相似于使用輕重為1的Sobel內(nèi)核。當(dāng)產(chǎn)生劇烈厘革時(shí)(比如在邊沿四周),幅值(magnitude)會(huì)更高。

我們分散盤(pán)算了x和y朝向的梯度。對(duì)圖像中的一切像素反復(fù)相反的歷程。下一步是使用這些值找到幅值和朝向。

第三步:盤(pán)算幅值和朝向

使用我們?cè)谧畛跻徊街斜P(pán)算的梯度,我們?nèi)缃駥⒋_定每個(gè)像素值的輕重和朝向。關(guān)于這一步,我們將使用勾股定理(是的,與你在學(xué)校學(xué)習(xí)的誰(shuí)人相反!)。

看看底下的圖片:

在之前的例子中,Gx和Gy分散是11和8。使用勾股定理盤(pán)算總梯度輕重:

  • 總梯度幅值=√[(G_x)^2 +(G_y)^2]
  • 總梯度幅值=√[(11)^2 +(8)^2]= 13.6

接下去,盤(pán)算相反像素的朝向。我們曉得我們可以把角度寫(xiě)成tan

tan(Φ)= Gy/Gx

因此,角度的值將是:

Φ= atan(Gy/Gx)

當(dāng)我們代入這些值時(shí),角度是36°。如今,關(guān)于每個(gè)像素值,我們有總梯度(幅值)和朝向。我們必要使用這些梯度和朝向天生直方圖。

但是請(qǐng)稍等——在深化研討HOG特性形貌子中怎樣創(chuàng)建直方圖之前,我們必要稍作休憩。把這看作是整個(gè)歷程中的一小步。我們將起首討論一些簡(jiǎn)便的辦法來(lái)創(chuàng)建直方圖使用兩個(gè)值,梯度和朝向。

使用梯度和朝向創(chuàng)建直方圖的不同辦法

直方圖是體現(xiàn)一組一連數(shù)據(jù)的頻率分布的圖。變量(以箱子的情勢(shì))在x軸上,頻率在y軸上。這里,我們?cè)O(shè)x軸上為角度,y軸為頻率。

辦法1:

讓我們從天生直方圖的最簡(jiǎn)一辦法開(kāi)頭。我們將取每個(gè)像素值,找到像素的朝向并更新頻率表。

底下是高亮像素(85)的處理歷程。由于該像素的角度為36°,我們將對(duì)角度值36添加一個(gè)數(shù)字,表現(xiàn)頻率:

對(duì)一切像素值反復(fù)相反的歷程,最初取得一個(gè)頻率表,表現(xiàn)角度以及這些角度在圖像中的顯現(xiàn)情況。這個(gè)頻率表可用于天生在x軸上有角度值的直方圖和在y軸上有頻率值的直方圖。

這是創(chuàng)建直方圖的一種辦法。注意,這里直方圖的bin值(角度的距離)為1。因此我們?nèi)〉眉s莫180個(gè)不同的桶,每個(gè)桶代表一個(gè)角度值。另一種辦法是為更大的角度值距離創(chuàng)建直方圖特性。

辦法2:

這個(gè)辦法與前方的辦法相似,不同之處在于我們的bin值為20。因此,我們?cè)谶@里取得的桶數(shù)是9。

相反,關(guān)于每個(gè)像素,我們將反省角度,并以9 x 1矩陣的情勢(shì)存儲(chǔ)角度值的頻率。繪制這個(gè)將給我們直方圖:

辦法3:

上述兩種辦法僅使用角度值來(lái)天生直方圖,并且不思索梯度值。這是我們可以天生直方圖的另一種辦法 - 我們可以使用梯度幅值(magnitude)來(lái)添補(bǔ)矩陣中的值,而不是使用頻率。以下是示例:

辦法4:

讓我們對(duì)外表的辦法做一個(gè)小修正。在這里,我們將像素梯度的奉獻(xiàn)添加到像素梯度兩側(cè)的區(qū)間。請(qǐng)記取,更接近角度的bin值有更高的奉獻(xiàn)。

這正是在HOG特性形貌子中創(chuàng)建直方圖的辦法。

第4步:盤(pán)算8×8單位(9×1)中梯度的直方圖

HOG特性形貌子中創(chuàng)建的直方圖不會(huì)為整個(gè)圖像天生。將圖像支解為8×8個(gè)單位格,盤(pán)算每個(gè)單位格的朝向梯度直方圖。

經(jīng)過(guò)如此做,我們?nèi)〉昧舜碚麄€(gè)圖像的小塊的特性(或直方圖)。我們固然可以把這個(gè)值從8 x 8換成16 x 16大概32 x 32。

假如我們將圖像區(qū)分為8×8個(gè)單位格并天生直方圖,我們使用我們?cè)谏弦还?jié)中討論的辦法4天生該矩陣,將為每個(gè)單位格取得9 x 1矩陣。

一旦我們?yōu)閳D像中的8×8小塊天生了HOG,下一步就是對(duì)直方圖舉行標(biāo)準(zhǔn)化。

步調(diào)5:將16×16單位(36×1)中的梯度標(biāo)準(zhǔn)化

在我們了解這是怎樣做到的之前,起首了解為什么要如此做是很緊張的。

固然我們以前為圖像的8×8單位創(chuàng)建了HOG特性,但是圖像的梯度對(duì)全體光照很敏感。這意味著關(guān)于特定的圖像,圖像的某些局部與其他局部比擬會(huì)十分亮堂。

我們不克不及從圖像中完全消弭這個(gè)。但是我們可以經(jīng)過(guò)使用16×16個(gè)塊來(lái)對(duì)梯度舉行歸一化來(lái)變小這種光照厘革。底下的例子可以表明怎樣創(chuàng)建16×16塊:

在這里,我們將組合四個(gè)8×8單位來(lái)創(chuàng)建一個(gè)16×16塊。并且我們以前曉得每個(gè)8×8單位具有效于直方圖的9×1矩陣。因此,我們將有四個(gè)9×1矩陣或一個(gè)36×1矩陣。為了標(biāo)準(zhǔn)化該矩陣,我們將這些值中的每一個(gè)除以值的平方和的平方根。在數(shù)學(xué)上,關(guān)于給定的向量V:

V = [a1,a2,a3,... a36]

我們盤(pán)算平方和的根:

k =√(a1)2+(a2)2+(a3)2+ .... (A36)2

并將向量V中的一切值除以此值k:

后果將是尺寸為36×1的歸一化向量。

第6步:完備圖像的特性

我們?nèi)缃裾幱跒閳D像天生HOG特性的最初一步。到現(xiàn)在為止,我們以前為16×16塊圖像創(chuàng)建了特性。如今,我們將團(tuán)結(jié)一切這些來(lái)取得終極圖像的特性。

你能猜出我們將為給定圖像提供的特性總數(shù)是幾多?我們起首必要找出一個(gè)64×128圖像可以取得幾多如此的16×16塊:

我們將有105(7×15)塊16×16。這105個(gè)塊中的每一個(gè)都具有36×1的向量作為特性。因此,圖像的總特性將是105×36×1 = 3780個(gè)特性。

我們?nèi)缃駥閱蝹€(gè)圖像天生HOG特性,并驗(yàn)證我們對(duì)否在最初取得相反數(shù)目標(biāo)特性。

在Python中完成HOG特性形貌子

是時(shí)分完成了!我敢一定,這是本文中最受渴望的局部。讓我們開(kāi)頭吧。

我們將看到如安在單個(gè)圖像上天生HOG特性,以及對(duì)否可以在更大的數(shù)據(jù)集上使用相反的HOG特性。我們將起首加載所需的庫(kù)和我們要為其創(chuàng)建HOG特性的圖像:

#導(dǎo)入所需的庫(kù) from skimage.io import imread, imshow from skimage.transform import resize from skimage.feature import hog from skimage import exposure import matplotlib.pyplot as plt %matplotlib inline #讀入圖片 img = imread('puppy.jpeg') imshow(img) print(img.shape) (663,459,3)

我們可以看到圖像的外形是663 x 459.我們將不得不將此圖像調(diào)停為64 x 128.請(qǐng)注意,我們使用的是skimage,它將輸入作為高度x寬度。

#調(diào)停圖像輕重 resized_img = resize(img, (128,64)) imshow(resized_img) print(resized_img.shape) (128,64,3)

在這里,我將直接使用skimage.features的hog函數(shù)。因此,我們不必單獨(dú)盤(pán)算梯度,幅值(總梯度)和朝向。hog函數(shù)將在內(nèi)里盤(pán)算它并前往特性矩陣。

別的,假如你設(shè)置參數(shù)'visualize = True',它將前往HOG的圖像。

#創(chuàng)建hog特性 fd, hog_image = hog(resized_img, orientations=9, pixels_per_cell=(8, 8), cells_per_block=(2, 2), visualize=True, multichannel=True)

在持續(xù)之前,讓我先先容一下這些超參數(shù)代表什么。大概,你可以在此處查察官方文檔中的界說(shuō)。

  • orientations是我們要?jiǎng)?chuàng)建桶的數(shù)目。由于我想要一個(gè)9 x 1矩陣,我將orientations設(shè)置為9
  • pixelspercell界說(shuō)我們?yōu)槠鋭?chuàng)建直方圖的單位格的輕重。在我們?cè)诒疚闹邢热莸氖纠校覀兪褂昧? x 8個(gè)單位格,在這里我將設(shè)置相反的值。如前所述,你可以選擇變動(dòng)此值
  • 我們有另一個(gè)超參數(shù)cellperblock,它是我們對(duì)直方圖舉行標(biāo)準(zhǔn)化的塊的輕重。這個(gè)參數(shù)是每個(gè)塊的單位格數(shù)目而不是像素的數(shù)目。因此,我們將使用2 x 2而不是16 x 16

函數(shù)的特性矩陣存儲(chǔ)在變量fd中,圖像存儲(chǔ)在hog_image中。讓我們反省一下特性矩陣的外形:

fd.shape (3780) ''' HOG FEATURES ''' # 導(dǎo)入必要的包 from skimage.io import imread, imshow from skimage.transform import resize from skimage.feature import hog from skimage import exposure #讀取圖片 img = imread('puppy.jpeg') #改動(dòng)圖片尺寸 resized_img = resize(img, (128,64)) #產(chǎn)生HOG特性 fd, hog_image = hog(resized_img, orientations=9, pixels_per_cell=(8, 8), cells_per_block=(2, 2), visualize=True, multichannel=True) print('\n\nShape of Image Features\n\n') print(fd.shape) Shape of Image Features (3780,)

正如預(yù)期的那樣,我們有3,780個(gè)圖像特性,這驗(yàn)證了我們之前在步調(diào)7中所做的盤(pán)算。你可以選擇變動(dòng)超參數(shù)的值,這將為你提供不同輕重的特性矩陣。

讓我們最初看看HOG圖像:

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(16, 8), sharex=True, sharey=True) ax1.imshow(resized_img, cmap=plt.cm.gray) ax1.set_title('Input image') # 縮放直方圖以便更好地體現(xiàn) hog_image_rescaled = exposure.rescale_intensity(hog_image, in_range=(0, 10)) ax2.imshow(hog_image_rescaled, cmap=plt.cm.gray) ax2.set_title('Histogram of Oriented Gradients') plt.show()

完畢條記

本文眼前的想法是讓你了解HOG特性形貌子眼前的實(shí)踐原理以及怎樣盤(pán)算特性。整個(gè)歷程分為7個(gè)簡(jiǎn)便步調(diào)。

下一步,我勉勵(lì)你實(shí)驗(yàn)在簡(jiǎn)便的盤(pán)算機(jī)視覺(jué)成績(jī)上使用HOG特性,并查察模子功能對(duì)否有所改良。

版權(quán)聲明:本文來(lái)自互聯(lián)網(wǎng)整理發(fā)布,如有侵權(quán),聯(lián)系刪除

原文鏈接:http://www.freetextsend.comhttp://www.freetextsend.com/qingganjiaoliu/46542.html


Copyright ? 2021-2022 All Rights Reserved 備案編號(hào):閩ICP備2023009674號(hào) 網(wǎng)站地圖 聯(lián)系:dhh0407@outlook.com

主站蜘蛛池模板: 浦县| 蒲江县| 延庆县| 通渭县| 马鞍山市| 灵丘县| 本溪市| 万年县| 鹤壁市| 疏附县| 洪江市| 荥经县| 仪陇县| 辛集市| 九寨沟县| 遂川县| 游戏| 都江堰市| 永清县| 葫芦岛市| 教育| 江油市| 海林市| 静安区| 庆元县| 永顺县| 通榆县| 瑞金市| 平邑县| 都江堰市| 海盐县| 潮安县| 舞钢市| 辽中县| 鲁甸县| 大理市| 华池县| 吉安县| 和龙市| 华容县| 江川县|