2012-04-06 90 views
1

我的講師在edge histograms上對image retrieval進行了滑動,他聲明必須首先將圖像分成4x4 blocks,然後檢查horizontal, vertical, +45°, and -45° orientations處的邊緣。他然後說,這是代表14x1 histogram。我不知道他是如何決定創建14x1 histogram的。有誰知道他是怎麼想出這個價值的,或者如何創建一個edge histogram圖像檢索 - 邊緣直方圖

謝謝。

回答

3

你所說的東西叫做面向梯度直方圖(HoG)。但是,數學不適合你的例子。通常您會選擇空間裝倉參數(4x4塊)。對於每個塊,您將計算一些不同方向的梯度大小(在您的情況下,只有2個方向)。因此,在每個區塊中您都會有N_{directions}的測量值。將其乘以塊的數量(您的16個),並且您看到您有總計量的16*N_{directions}

要形成直方圖,只需將這些測量值連接成一個長向量。只要您跟蹤將bin/direction組合映射到1-D直方圖中的槽中的方式,任何方式都可以進行並置。這種串聯長的直方圖最常用於機器學習任務,如訓練分類器以基於其梯度定向的方式識別圖像的某些方面。

但在你的情況下,教授必須做一些特殊的事情,因爲如果你有16個不同的圖像塊(一個4×4的圖像塊網格),那麼你需要計算每塊不到1個測量結果總直方圖中共有14個測量值。

或者,教授可能意味着您將角度範圍設置爲[-45,+ 45],然後將其分成14個不同的值:-45,-45 + 90/14,-45 + 2 * 90/14,...等等。

如果這就是教授的意思,那麼在這種情況下,你可以在一個區塊內獲得14個定位箱。一旦所有東西都連接在一起,你就會有一個非常長的14 * 16 = 224-分量矢量來描述整個圖像。順便提一下,我已經使用漸變柱狀圖的Python實現進行了大量測試,因此您可以看到鏈接herehere的一些工作。該網站上還有一些示例代碼,雖然更好支持的HoG版本出現在中。

+0

爲什麼只有我的2個方向?當然有4.從左到右,從上到下,從左下到右上,從左上到右下。你介意稍微解釋直方圖嗎?我很困惑如何使用梯度幅度來創建直方圖。我總是看到直方圖在Y軸上有頻率,但我不確定在這種情況下頻率是多少。 – TheBoss 2012-04-08 18:46:24

+1

當我說只有2個方向的時候,我在你的第一個帖子旁邊,你只說+/- 45度。很顯然,在實踐中,你會希望有更多的方向,而不是我之後澄清的,當我說你的教授可能意味着你採取-45到+45之間的所有方向並將它們離散爲方向網格。有兩種不同的方法。有時候人們會離散化整個方向圈,有時候他們只會離散圈的一半。大多數情況下,你只關心絕對方向,標誌無關緊要。 – ely 2012-04-08 20:54:44

+2

至於「頻率」軸,在這種情況下,您將計算一個全新的「圖像」,其中每個「像素」包含該像素的梯度大小。如果(i,j)處的像素具有梯度大小M和梯度方向D,則可以確定方向D屬於哪個角度區間(基於您選擇的離散化角度網格),並且在該直方圖的那個區域中添加幅度M.因此,給定像素對直方圖的「頻率」是該像素處的梯度幅度。 – ely 2012-04-08 20:56:39