我正在研究一些图像,其中每个图像的大小变化,并希望计算每个图像的直方图定向梯度。我不想调整任何图像的大小,但希望HOG输出的长度相同。我知道这样做的可能方法是每个单元格具有不同的像素,每个块类型具有固定的单元格。在这样做时,我很想知道是否没有为pixels_per_cell skimage.feature.hog提供任何值,它能够为我决定一个或者我是否需要我自己的逻辑来确定每个图像的pixels_per_cell。
如果您希望不同尺寸图像的HOG输出长度相同,那么您应该为图像分割成单元格的部分编写逻辑。例如,如果你的图像大小是(224x224)
并且你想要每个单元格的8
像素(skimage中的默认值),那么你最终会得到(28x28)
单元格网格。现在假设您的下一个图像具有尺寸(448x448)
,那么您应该每个单元格的像素满足此等式(224 /8) ==(448/x)
。您可以从这里轻松解决x问题。如果你不这样做,那么skimage
将使用8
的默认值作为每个单元格中的像素。
你可以查看文档here
我最终指定了每个单元格的特定像素,每个块的图像保持单元格相同。
skimage.feature.hog(img, orientations=9, pixels_per_cell=(img.shape[0]/8,img.shape[1]/8),cells_per_block=(4, 4), block_norm='L2-Hys', visualize=False, visualise=None, transform_sqrt=False, feature_vector=True, multichannel=None)
this link也为我的问题提供了相当好的解决方案。
此外,默认像素_per_cell(8x8)对生成的变长HOG没有多大帮助。