OpenCV Java版中的HOG参数

use*_*676 3 java android opencv

嗨,我正在开发Android,我想用我的手机相机做点什么.我正在使用OpenCV-2.4.9 Java包来提取HOG功能,但我对输出向量感到困惑.

我的图片尺寸为480x640.我将窗口设置为48x64,块大小为24x32,每个单元格为12x16和8个单元格.因此,对于每个窗口,我应该获得128维数据来描述它.运行以下代码后:

MatOfFloat keyPoints = new MatOfFloat();
Hog.compute(imagePatch, keyPoints);
Run Code Online (Sandbox Code Playgroud)

keyPoints是一个长度为172800的数组(我认为它是1350x128).我认为应该有一个参数来设置窗口步幅来控制窗口的数量.在库中,还有另一个控制窗口步幅的功能:

public  void compute(Mat img, MatOfFloat descriptors, Size winStride, Size padding, MatOfPoint locations)
Run Code Online (Sandbox Code Playgroud)

但我不知道参数的含义.任何人都可以帮我解决这个问题吗?

QED*_*QED 8

void compute(Mat img,MatOfFloat描述符,Size winStride,Size padding,MatOfPoint位置)

Mat 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)
Run Code Online (Sandbox Code Playgroud)