Python 为什么我不';使用scikit image hog和OpenCV hog时,是否无法获得相同的功能描述?

Python 为什么我不';使用scikit image hog和OpenCV hog时,是否无法获得相同的功能描述?,python,opencv,image-processing,object-detection,scikits,Python,Opencv,Image Processing,Object Detection,Scikits,我将在一个目标检测项目中使用hog特征描述符和SVM分类器。scikit图像中提供的hog在分类阶段会产生非常好的结果。但是,它的运行速度非常慢(手边每个图像20秒)。另一方面,OpenCV版本非常快(每幅图像0.3秒)。问题是,尽管我对两个hog版本使用了相同的参数,但结果却各不相同。 我为每个版本使用的参数如下: OpenCV版本: winSize = (4,4) blockSize = (2,2) blockStride = (2,2) cellSize = (2,2) nbins = 5

我将在一个目标检测项目中使用hog特征描述符和SVM分类器。scikit图像中提供的hog在分类阶段会产生非常好的结果。但是,它的运行速度非常慢(手边每个图像20秒)。另一方面,OpenCV版本非常快(每幅图像0.3秒)。问题是,尽管我对两个hog版本使用了相同的参数,但结果却各不相同。 我为每个版本使用的参数如下:

OpenCV版本:

winSize = (4,4)
blockSize = (2,2)
blockStride = (2,2)
cellSize = (2,2)
nbins = 5
hog = cv2.HOGDescriptor(winSize,blockSize,blockStride,cellSize,nbins)
hist = hog.compute(image)
hist = hog(image, orientations=5, pixels_per_cell=(2,2),cells_per_block=(2, 2), block_norm='L2-Hys')
[[ 0.        ]
[ 0.        ]
[ 0.99502486]
   ...,
[ 0.99502486]
[ 0.        ]
[ 0.        ]]
[[ 0.        ]
[ 0.        ]
[ 0.16415654]
   ...,
[ 0.14253933]
[ 0.        ]
[ 0.        ]]
scikit图像版本:

winSize = (4,4)
blockSize = (2,2)
blockStride = (2,2)
cellSize = (2,2)
nbins = 5
hog = cv2.HOGDescriptor(winSize,blockSize,blockStride,cellSize,nbins)
hist = hog.compute(image)
hist = hog(image, orientations=5, pixels_per_cell=(2,2),cells_per_block=(2, 2), block_norm='L2-Hys')
[[ 0.        ]
[ 0.        ]
[ 0.99502486]
   ...,
[ 0.99502486]
[ 0.        ]
[ 0.        ]]
[[ 0.        ]
[ 0.        ]
[ 0.16415654]
   ...,
[ 0.14253933]
[ 0.        ]
[ 0.        ]]
OpenCV产生的hog:

winSize = (4,4)
blockSize = (2,2)
blockStride = (2,2)
cellSize = (2,2)
nbins = 5
hog = cv2.HOGDescriptor(winSize,blockSize,blockStride,cellSize,nbins)
hist = hog.compute(image)
hist = hog(image, orientations=5, pixels_per_cell=(2,2),cells_per_block=(2, 2), block_norm='L2-Hys')
[[ 0.        ]
[ 0.        ]
[ 0.99502486]
   ...,
[ 0.99502486]
[ 0.        ]
[ 0.        ]]
[[ 0.        ]
[ 0.        ]
[ 0.16415654]
   ...,
[ 0.14253933]
[ 0.        ]
[ 0.        ]]
由scikit图像生成的hog:

winSize = (4,4)
blockSize = (2,2)
blockStride = (2,2)
cellSize = (2,2)
nbins = 5
hog = cv2.HOGDescriptor(winSize,blockSize,blockStride,cellSize,nbins)
hist = hog.compute(image)
hist = hog(image, orientations=5, pixels_per_cell=(2,2),cells_per_block=(2, 2), block_norm='L2-Hys')
[[ 0.        ]
[ 0.        ]
[ 0.99502486]
   ...,
[ 0.99502486]
[ 0.        ]
[ 0.        ]]
[[ 0.        ]
[ 0.        ]
[ 0.16415654]
   ...,
[ 0.14253933]
[ 0.        ]
[ 0.        ]]
值得注意的是,两个描述符生成的特征数量是相同的


OpenCV hog产生的结果与scikit image的结果不一样,这有什么问题

scikit图像中猪皮纸的实现与opencv不同。上一次浏览源代码时,我注意到,除其他事项外,scikit image执行的标准化并不是本文推荐的标准化


我建议使用opencv提供的一个,因为它可以让您更改几个参数,并且更接近HOG paper的实现。此外,正如您自己发现的,opencv实现经过优化,速度更快

为什么这些值应该是相同的,为什么这是OpenCV的问题?谢谢你的回复。正如我所说的,scikit image hog可以获得理想的结果,但OpenCV却不能。我想知道的是,当参数和hog的概念相同时,为什么结果不相等。