为梯度直方图获取 0 到 180 之间无符号角度的正确方法

Proper way to get unsigned angles between 0 and 180 for histogram of gradients

目前我有代码可以根据 Sobel 导数计算大小和方向。

mag, ang = cv2.cartToPolar(gx, gy, angleInDegrees=True)
ang = ang.clip(min=0, max=179.99999)

长话短说,我如何强制角度无符号且介于 [0, 180) 度之间而不进行剪裁,这似乎会破坏直方图分布。

是否有一个 numpy 函数可以将大于 180 的角度(例如 200)拆分为 160,或者我是否必须自己编写类似的代码。

是否可以让 numpy 数组只包含从 -180 到 180 的值,然后我可以只取 abs 值。

而不是ang = ang.clip(min=0, max=179.99999),使用

ang = ang % 180

% 是 Python 中的 modulo operation。 例如,这会将 -135 转换为 45,我怀疑这就是您想要的。也就是说,这两个角度都对应于斜率为 1 的直线。