使用 Matlab "extractHOGFeature" 函数计算单点上的 HOG 特征

Computing HOG feature on a single point using Matlab "extractHOGFeature" function

我对 matlab "extractHOGFeature" 函数感到困惑。我有一个深度图像 (​​370x89)。我想计算图像中单点的 HOG。当我给点 [i,j] 某个时候它 returns 空向量 (0x36) 并且当我将点[i,j] 交换到 [j,i] 函数 return 一个非空矢量(1x36)。此外,我 运行 循环中的函数分别针对每个像素 [i,j]、[j,i] 和整个图像计算非空 HOG 向量,令人惊讶的是我得到了不同的数字。让我在下面的例子中解释。

坐标 [i,j].

   count=0; 
    mx=imread('abc_gray.png');
    for i=1:size(mx,1)
        for j=1:size(mx,2)
            XY=[i,j];
            hog=extractHOGFeatures(double(mx),XY);
            if ~ isempty(hog)
               count=count+1;
            end 
        end
    end

**Total number of non-empty vector: 5994**

坐标 [j,i]

count=0; 
      mx=imread('abc_gray.png');
      for i=1:size(mx,1)
          for j=1:size(mx,2)
              XY=[j,i];
              hog=extractHOGFeatures(double(mx),XY);
              if ~ isempty(hog)
                  count=count+1;
              end 
          end
      end

**Total number of non-empty vector: 26270**

哪一个是正确的?

extractHOGFeatures 函数接受 x,y 坐标或 列、行 坐标。这意味着 for 循环的第二个版本是正确的。有时您会得到空向量,因为您指定的坐标超出图像范围。发生这种情况是因为行和列被翻转,因此有可能超出行或列的维度。此外,根据您的逻辑,您在技术上应该有 370 x 89 = 32930 个 HOG 描述符 - 每个点一个。但是,您必须记住,我们专注于 window 周围 每个点。如果 window 超出给定点的范围,则无法计算 HOG 描述符。这就是为什么要计算的 HOG 描述符少于 32930 个的原因。

此外,运行 extractHOGFeatures 在整个图像上并将其与各个点进行比较肯定会给您不同的尺寸。发生的事情是,对于整个图像,有一个 block-stride,这意味着图像中的单元格之间会有重叠,因此 HOG 特征向量的维数将大于如果您要分别计算每个点的 HOG 描述符。