2014-07-03 27 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中几乎没有文档。每种解释都有很大的帮助。 :) –

相关问题