我正在尝试实现 Dalal 和 Triggs 的方法。我可以在图像上实现第一阶段计算梯度,我可以创建在单元格中遍历图像的代码,但我不明白这个阶段背后的逻辑。
我知道有必要首先在signed
(0-360 度)或unsigned
(0-180 度)梯度之间进行识别。
我知道我必须创建一个数据结构来存储每个单元格直方图,包括 n 个 bin。我知道什么是直方图,因此我知道我必须访问每个像素,但我并不完全了解对每个像素进行分类、获取该像素的梯度方向并使用该数据构建直方图的方法。
我正在尝试实现 Dalal 和 Triggs 的方法。我可以在图像上实现第一阶段计算梯度,我可以创建在单元格中遍历图像的代码,但我不明白这个阶段背后的逻辑。
我知道有必要首先在signed
(0-360 度)或unsigned
(0-180 度)梯度之间进行识别。
我知道我必须创建一个数据结构来存储每个单元格直方图,包括 n 个 bin。我知道什么是直方图,因此我知道我必须访问每个像素,但我并不完全了解对每个像素进行分类、获取该像素的梯度方向并使用该数据构建直方图的方法。
简而言之,HOG 只不过是梯度方向的密集表示,由它们在重叠的局部邻域上的强度加权。
你问找到每个像素梯度方向的意义是什么。在图像中,每个像素的梯度方向表示该位置对象的边界(两个纹理之间的边缘)相对于 X 和 Y 轴的方向。因此,如果您将补丁或块或对象的一部分的方向分组,它以非常强的方式或独特的方式表示对象在该区域的边缘方向的分布......现在让我们举一个简单的例子,如果您将圆的梯度方向绘制为直方图,您将得到一条直线(不要想象 HOG 只是一个简单的梯度方向图),因为如果您在 360 处采样,圆的边缘的方向范围从 0 度到 360 度连续的位置,对于不同的对象,它是不同的,
希望有用...