1. 程式人生 > >scikit-image HOG feature 提取函式使用心得。

scikit-image HOG feature 提取函式使用心得。

Hog 特徵比較直觀好懂,本質是提取圖片內的梯度統計資訊。

其提取圖片特徵的層次,可以分為:圖片/Block/cell 這三個層次,每個層次有下屬層次的多個單位構成,例如圖片被分為N個block 具體是採用滑動視窗,每個block又被分為多個cell,其中cell 作為最底層是提取梯度資訊的最基本單位。統計cell內所有畫素的梯度方向資訊並將其劃分到預設的梯度方向範圍內,便形成了基本的梯度直方圖資訊。接下來就是一個逆向的組合過程,即,底層cell的梯度資訊不斷地組合在一起(還有歸一化)形成block的特徵,block的特徵在組合在一起就成了image的feature,這裡說的組合值得是拼接的意思。歸一化目的是去除光噪聲的影響,這個好理解,因為均勻光源對圖片的影響是加性的,並不改變相對大小,引起歸一化是起一點抗燥作用的。

扯原理太多了,這裡主要是說明我使用scikit-image 中 HOG函式的心得。

scikit-image 裡面的hog函式是這樣的:

ft.hog(image, orientations=orientations, pixels_per_cell=pixels_per_cell, transform_sqrt=is_transform, feature_vector=is_feature_vector,
cells_per_block=cells_per_block, visualise=is_visualise)


其中的引數名稱我已寫的直觀易懂了。問題來了,希望大家注意以下幾點:


1整個函式的引數使用的是類似opencv 的引數格式,即【寬度,高度】而非python numpy 中的[行數,列數], 因此pixels_per_cell= [ 畫素寬度,畫素高度], cell_per_block= [ 寬度,高度】


2cell 尺寸和block尺寸問題:  

        cell尺寸的倍數只能比block小,不能比之大,否則就會越界,返回空列表。
        例如:mg=[11,11], pixel_per_cell=[5,5], cell_per_block= [2,2] 是可以的。將pixel_per_cell設定為 [6,6]其他不變,就是不行。
        想想也奇怪,真是寧可漏掉都不能重疊。


3函式使用中引數設定錯誤,不會報錯,只會給你返回一個空列表。這點最令人無法忍受,一點都不友好。