在Python和C ++中对彩色图像计算的hog描述符的差异

时间:2017-08-03 15:27:50

标签: python c++ opencv

我在彩色图像上计算了HOGDescriptor,发现Python和C ++中的结果不同,opencv版本,HOG参数和图像在两者上都是相同的。 在C ++和Python上使用默认BGR图像

计算的HOG描述符之间存在惊人的差异

First 100 values of BGR HOG Descriptor in C++ First 100 values of BGR HOG Descriptor in Python

在C ++和Python上使用默认BGR2RBG图像计算的HOG描述符之间再次存在惊人的差异。但是,C ++似乎遵循推荐的(通过Dalal,Triggs)计算HOG作为所有三个通道的最大值的方式,正如BGR和RGB图像具有相同的HOG描述符,但Python不

First 100 values of RGB HOG Descriptor in C++ First 100 values of RGB HOG Descriptor in Python

然而,图像的灰度版本显示类似的(但不相同的)描述符值。

First 100 values of GRAY HOG Descriptor in C++ and Python

HOG参数:

cv::HOGDescriptor hogDescriptor;
hogDescriptor.blockSize = cv::Size(8, 8);
hogDescriptor.cellSize = cv::Size(4, 4);
hogDescriptor.blockStride = cv::Size(4, 4);
hogDescriptor.nbins = 9;
hogDescriptor.signedGradient = true;
hogDescriptor.winSize = cv::Size(72, 72);

我的问题是,为什么C ++和Python实现之间存在如此大的差异,即使Python只是C ++版本的包装器?

1 个答案:

答案 0 :(得分:2)

我找到了灰度图像的解决方案。 HOG描述符的Python包装器代码将gammaCorrection标志初始化为False,而不是C ++中的True。手动将标志设置为True或False都会在灰度图像上产生完全相同的C ++和Python值。 enter image description here

然而,问题仍然存在于彩色图像。

enter image description here

我最好的猜测是,就像gammaCorrection标志差异一样,Python包装器中也会发生类似情况。