日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

深入浅出理解HOG特征---梯度方向直方图

發(fā)布時間:2025/3/15 编程问答 10 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入浅出理解HOG特征---梯度方向直方图 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

梯度方向直方圖
原文路徑:https://www.learnopencv.com/histogram-of-oriented-gradients/

最近在搞車牌識別的時候,訓練樣本去識別車牌的時候用到HOG特征。國外一篇文章讓我受益良多

什么是特征描述符?
特征描述符是指通過提取有用的信息并拋棄無關(guān)的信息來表示這一張圖片或者一張圖片的一部分

典型地,特征描述符將大小寬度x高度x 3(通道)的圖像轉(zhuǎn)換為特征向量數(shù)組,長度n。例如:在HOG特征描述器的情況下,輸入圖像大小為64×128×3,輸出特征向量長度為3780。


中間有一個循環(huán)裝箱的過程
劃分為8x8大小的圖像補丁塊處理,裝到9個箱子(其中8x8、9 這些參數(shù)都是不固定的,但是是推薦的)
移動步伐:8個像素
width:64 /8 == 8 份
Height:128 /8 ==16份
用一個16x16的窗口來處理,可以包含4個8X8的圖像補丁,那么處理一次會有得到4*9個箱子數(shù)據(jù)。循環(huán)處理
最后能循環(huán) 7*15=105次
105*36=3780個箱子數(shù)據(jù),存儲的是每個像素的梯度大小和梯度方向

記住,HOG特征描述符能夠用其他的尺寸大小來計算,但是在下面的具體例子里為了讓你更加容易理解相關(guān)概念,選擇使用圖像寬高:64×128,圖像補丁 8x8 窗口 16X16 移動步長 8個像素

首先來了解什么是“有用的信息”、什么是“無關(guān)的信息”?我們需要明確知道“有用”是指對什么有用。
特征向量對查看圖像是沒有用的,但是,對于圖像識別和目標檢測這些任務(wù)是非常有用的。將這些算法生成的特征向量引入到支持向量機(SVM)等圖像分類算法中,可以取得不錯的效果。

但是,哪一種“特征”對分類任務(wù)才是真正有用的呢?讓我們用一個例子來討論這一點。 假設(shè)我們要建立一個物體檢測儀,用來檢測襯衫和大衣的紐扣。按鈕是圓形的(在圖像中可能看起來是橢圓的),通常有幾個洞用于縫紉。 你可以在一個按鈕的圖像上運行一個邊緣檢測器,只需簡單地觀察邊緣圖像就可以很容易地判斷它是否是一個按鈕。在這種情況下,邊緣信息是“有用的”,而顏色信息不是。 此外,該功能還需要有鑒別能力。例如,從圖像中提取的良好特征應(yīng)該能夠分辨按鈕和其他圓形物體,如硬幣和汽車輪胎的區(qū)別。

在HOG特征描述器中,梯度方向(梯度)的分布(直方圖)作為特征。 圖像的梯度(x和y導數(shù))是有用的,因為梯度的大小在邊緣和拐角處(突然強度變化的區(qū)域)很大,而且我們知道邊和角在物體形狀上的信息比平面區(qū)域要多得多。

怎么去計算方向梯度直方圖?
在這一節(jié)中,我們將深入研究計算HOG特征描述符的細節(jié)。為了說明每一步,我們將使用一個圖像塊。

步驟1:預(yù)處理

如前所述的HOG特征描述符用于行人檢測,是在64×128片圖像計算。當然,圖像可能是任意大小的。通常在多個尺度上分析多個圖像位置,唯一的限制是被分析的補丁具有固定的長寬比(縱橫比)。在我們的例子中,補丁需要有一個長寬比為1:2。例如,他們可以100×200, 128×256,或1000×2000而不是101×205。

為了說明這一點,下面展示了一個大尺寸的720×475圖像。我們計算我們的HOG特征描述符選擇一塊大小100×200。這個補丁被裁剪的圖像并調(diào)整其大小以64×128。現(xiàn)在已經(jīng)準備好計算這個圖像補丁的HOG描述符了。

還有一個預(yù)處理步驟就是“伽瑪校正”,但性能提升非常小,所以這里跳過該步驟。

步驟2:計算圖像梯度

要計算一個HOG描述符,我們首先需要計算水平和垂直梯度;畢竟,我們要計算梯度直方圖。通過用以下內(nèi)核過濾圖像很容易做到這一點。

我們可以在opencv中使用內(nèi)核大小為1的Sobel算子實現(xiàn)同樣的結(jié)果。

// Read imageMat img = imread("F:/data/car/test1.jpg");img.convertTo(img, CV_32F, 1 / 255.0);// Calculate gradients gx, gyMat gx, gy;//對X梯度絕對值Sobel(img, gx, CV_32F, 1, 0, 1);//對Y梯度絕對值Sobel(img, gy, CV_32F, 0, 1, 1);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

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

如果你是使用opencv,計算梯度的大小和方向可以使用函數(shù)carttopolar,如下所示。

Mat mag, angle;//mag 坡度梯度 大小//mag就是大小 //angle就是方向cartToPolar(gx, gy, mag, angle, 1);
  • 1
  • 2
  • 3
  • 4
  • 5

下圖顯示了梯度

注意,圖x梯度在垂直線方向延伸,圖y-梯度在水平線方向延伸。圖坡度梯度在強度上有急劇的變化。當圖片區(qū)域光滑時,都沒有延伸。我故意遺漏了顯示漸變方向的圖像,因為作為圖像顯示的方向不能傳達太多信息。

注意看圖像的變化
漸變圖像去除了許多非必要的信息(例如恒定的彩色背景),但突出顯示了輪廓。換句話說,你可以看到漸變圖像,并且很容易地辨別出圖片中有一個人。

圖x梯度 注意水平方向基本沒有延伸
圖y梯度 注意垂直方向基本沒有延伸

步驟3:計算在8×8細胞梯度直方圖

在這一步中,圖像被分為8×8細胞和梯度直方圖計算每個8×8細胞。

我們將學習了解在一瞬間的直方圖,但是在我們?nèi)ブ熬妥屛覀兿攘私鉃槭裁次覀儼褕D像分為8×8細胞。使用特征描述符描述圖像補丁的一個重要原因是它提供了一個緊湊的表示。8×8圖像補丁包含8x8x3 = 192像素值。這個補丁梯度每像素包含2個值(大小和方向),那就變成8x8x2 = 128個數(shù)。通過這一部分的最后我們會看到這128個數(shù)字是用9-bin直方圖(可存儲為長度9的數(shù)組,通俗地說是分別裝到9個箱子里)表示。不僅是表示更簡潔,計算在補丁直方圖具有更強的健壯性。個別的顏色梯度可能有噪音,但用一個8x8圖像補丁來表示梯度直方圖對噪聲不敏感,換句話說,就是受噪音影響不大。

但是什么是8x8圖像補丁?為什么不是32x32?這是我們通過特征縮放來尋找到的明確的選擇。HOG最初用于檢測行人。在一張行人照片縮放到64×128,使用8×8細胞足以捕捉有趣的功能(如面部、頭部的等)。

讓我們看一個8×8補丁在圖像梯度的面貌

中間的圖像信息量是非常大的。它顯示了用箭頭表示梯度的圖像的貼片,箭頭顯示梯度的方向,其長度顯示大小。注意箭頭的方向如何指向強度的變化方向,其大小表示差異的大小。

在右邊,我們看到原始的數(shù)字表示在8×8細胞有一個小的差異,那就是角度是0度和180度的梯度,而不是0到360度之間。這些被稱為“無符號”漸變,因為梯度正值和它的負值用相同的數(shù)字表示。換句話說,梯度箭頭和與之相對的180度箭頭被認為是相同的。但是,為什么不使用0 - 360度呢?經(jīng)驗表明,無符號梯度比簽名梯度更好地用于行人檢測。HOG的一些實現(xiàn)將允許您指定是否使用帶符號的漸變。

下一步是創(chuàng)建一個8×8細胞梯度直方圖。直方圖包含9個箱子對應(yīng)角度0, 20, 40…160。

下圖說明了這個過程。我們正在前面的圖尋找在同8×8補丁梯度的幅值和方向。根據(jù)方向選擇箱子,并根據(jù)大小選擇投票(進入箱子的值)。讓我們首先關(guān)注環(huán)繞在藍色中的像素。它的角度(方向)為80度,大小為2。所以它放入到第五個箱子。用紅色包圍的像素的梯度方向為10度,大小為4。由于10度是0和20之間的一半,所以像素的也是均勻地分成兩個箱子。

還有一個細節(jié)需要注意。如果角度大于160度,則在160到180之間,我們知道角度繞成0和180相等。因此,在下面的例子中,角度為165度的像素正比于0度的箱子和160度的箱子。
從160-180
180-165/165-160=3
所以0箱子分4/1,160箱子分4/3

在8×8細胞中所有像素的貢獻加起來創(chuàng)造9-bin直方圖。對于上面的補丁,它看起來像這樣

在我們的表示中,y軸是0度。你可以看到直方圖在0度和180度附近占很大比重。

步驟4:16x16步塊歸一化

在前面的步驟中,我們根據(jù)圖像的梯度創(chuàng)建了一個直方圖。圖像的梯度對整體亮度是敏感的。如果通過將所有像素值除以2來使圖像變暗,則漸變幅度將改變一半,因此直方圖值將改變一半。理想情況下,我們希望描述符不受光照變化的影響。換句話說,我們希望使直方圖正常化(歸一化),這樣它們不會受到光照變化的影響。
在解釋直方圖是如何規(guī)范化之前,讓我們看看長度為3的向量是如何規(guī)范化的。

例如:一個像素向量RGB【128,64,32】,向量的長度則為:sqrt{128^2 + 64^2 + 32^2} = 146.64
這也被稱為向量的L2范數(shù)。將向量的每一個元素除以146.64得到歸一化向量【0.87,0.43,0.22】,可以看到,歸一化后的【256,128,32】將得到【0.87,0.43,0.22】可以看到歸一化向量消除了規(guī)模。

現(xiàn)在我們知道了如何歸一化一個矢量,你可能會認為在計算HOG特征時可以將9x1的直方圖以上述的3×1矢量的方式歸一化。可以是可以,但更好的辦法是歸一化一個更大尺寸的16×16塊。16×16塊用4個直方圖可級聯(lián)成一個36×1元矢量,使用3×1矢量歸一化的方法。然后通過8像素的窗口移動(見動畫)重復計算,歸一化的36×1向量。

步驟5:計算HOG特征向量

計算整個圖像補丁最終的特征向量,36×1載體連接成一個巨大的載體。這個向量的大小是多少?
原圖截取100*200—>resize—>64*128
64/8=8
128/8=16
1、我們有多少個16×16塊嗎?有7個水平和15個垂直位置,總共7×15=105個塊。
2、每16×16塊由36×1矢量表示。所以當我們連接成一個巨大的載體,他們都得到了36×105 = 3780維向量。

定向梯度直方圖的可視化

一個圖像塊的HOG特征描述符通常是通過在8×8組織的9×1歸一化直方圖可視化。見上圖像。你會注意到,直方圖的主導方向捕捉人的形狀,特別是圍繞軀干和腿。
不幸的是,沒有簡單的方法來可視化OpenCV的HOG描述符。

至此:翻譯完成,英語水平有限,有錯誤的地方,希望不吝賜教。

轉(zhuǎn)載自https://blog.csdn.net/wjb820728252/article/details/78395092

總結(jié)

以上是生活随笔為你收集整理的深入浅出理解HOG特征---梯度方向直方图的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。