为什么opencv的HOG描述符返回了这么多的值

 冬眠2502917261 发布于 2023-01-18 13:02

我正在尝试使用OpenCV的HOG描述符,但是从它计算的特征向量似乎太长了.这是一个演示问题的片段:

#include 
#include 
#include 
#include 

int main()
{
    cv::Mat image = cv::imread("1.jpg");
    std::vector features;
    cv::HOGDescriptor hogdis;
    hogdis.compute(image, features);
    printf("HOG feature's length is %zu %zu\n", hogdis.getDescriptorSize(), features.size());
    return 0;
}

输出是

HOG feature's length is 3780 1606500

后一个价值似乎很荒谬.图像的1.jpg尺寸为256x256x3,其像素比特征向量少得多.为什么OpenCV用如此多的值填充特征向量?如何获取3780长矢量以供给我的SVM培训师?

1 个回答
  • 为什么OpenCV用如此多的值填充特征向量?

    猪特征的大小由以下等式确定(不仅仅根据图像尺寸确定):

    size_hog_features = (size_t)nbins * ( blockSize.width/cellSize.width) 
                             * (blockSize.height/cellSize.height) * ((winSize.width 
                             - blockSize.width)/blockStride.width + 1) 
                             * ((winSize.height - blockSize.height)
                             / blockStride.height + 1);
    

    所以你有这么长的HOG特征向量是很正常的.

    如何获取3780长矢量以供给我的SVM培训师?

    您可以nbins, blockSize, cellSize, winSize在计算之前设置HOG功能的参数(即),以获得具有所需大小的HOG功能.

    但是为什么hogdis.getDescriptorSize()和features.size()不一致?

    它们是不同的.getDescriptorSize()返回分类所需的系数数.它可以按如下方式计算(参见此处):

    HOG descriptor length = #Blocks * #CellsPerBlock * #BinsPerCell
    

    另一方面,features.size()返回整个图像的所有HOG特征尺寸.

    要训​​练,你需要传球features.

    2023-01-18 13:03 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有