2014-07-03 24 views
2

嗨,我正在開發Android,我想用我的手機相機做些事情。 我正在使用OpenCV-2.4.9 Java包提取HOG功能,但我對輸出向量感到困惑。OpenCV中的HOG參數Java版

我的圖像大小爲480x640。我將窗口設置爲48x64,塊大小爲24x32,爲每個單元格分配12x16和8個分箱。所以對於每個窗口,我應該得到一個128維的數據來描述它。運行以下代碼之後:

MatOfFloat keyPoints = new MatOfFloat(); 
Hog.compute(imagePatch, keyPoints); 

keyPoints是一個數組,其長度爲172800(我認爲它是1350x128)。我認爲應該有一個參數來設置窗口的步幅來控制窗口的數量。在庫中,還有另一個功能來控制窗口跨步:

public void compute(Mat img, MatOfFloat descriptors, Size winStride, Size padding, MatOfPoint locations) 

但我不知道參數的含義。任何人都可以幫我解決這個問題嗎?

回答

8

空隙計算(墊IMG,MatOfFloat描述符,尺寸winStride,尺寸填充,MatOfPoint位置)

墊IMG

輸入圖像來測試

MatOfFloat描述符

輸出向量的描述符,每個窗口在滑動窗口中搜索一個。在C++中,它是一個處理爲數組的向量,即所有描述符在一個長數組中的描述符[0]中。您需要知道描述符大小以獲取每個描述符:Hog.getDescriptorSize()。

尺寸winStride

size.width =在用於滑動窗口搜索x方向的重疊量;

size.height =滑動窗口搜索在y方向上的重疊量;

所以,如果你將它設置爲1,1,它會檢查一個以每個像素爲中心的窗口。然而這會很慢,所以你可以將它設置爲單元大小以達到一個好的折衷。

尺寸填充

這會將圖像周圍的邊框,使得探測器能找到接近邊緣的東西。沒有這個,第一個檢測點將窗口大小的一半放入圖像中,因此一個好的選擇是將其設置爲窗口大小或窗口大小的一半,或者單元大小的一些順序。

MatOfPoint位置

這是你可以預先指定,例如,如果您只想對某些位置描述位置的列表。將其留空以完成全面搜索。

免責聲明:可能不是正確的java,但應該給你一個想法是什麼參數做...

提取一些豬

MatOfFloat descriptors(0) //an empty vector of descriptors 
    Size winStride(Hog.width/2,Hog.height/2) //50% overlap in the sliding window 
    Size padding(0,0) //no padding around the image 
    MatOfPoint locations(0) ////an empty vector of locations, so perform full search   

    compute(img , descriptors, winStride, padding, locations) 
+0

感謝這個答案。 Opencv在Java中幾乎沒有文檔。每種解釋都有很大的幫助。 :) –

相關問題