Matlab中的imgradient函数是什么?

3

我对imgradient函数中使用的方程式有疑问。

在第127行:

    Gdir = atan2(-Gy,Gx)*180/pi; % Radians to degrees
为什么Gy必须是负数?

它强制将其置于第四象限:https://uk.mathworks.com/help/matlab/ref/atan2.html#buct8h0-4。为什么需要强制将其置于第四象限,我不知道。 - undefined
1
@Dan:如果它在第一象限,它会被强制移到第四象限。 - undefined
@CrisLuengo我的意思是,我不知道你在逻辑上为什么需要这样做,就像我不确定问题提问者是否在询问“-”的作用,或者为什么从函数的逻辑角度来看,确保Gdir位于第四象限是必要的(尽管这实际上是假设GyGx都是正数)。 - undefined
2个回答

2
在图像中,y轴被反转(它向下增加而不是向上增加)。这会导致角度顺时针增加,而不是逆时针增加。通过翻转梯度的y分量,该行计算了一个“正常”意义下的角度。
使用@Dan在他的评论中链接的图表:
https://istack.dev59.com/29VIr.gif
在这个图表中,y向上增加,角度逆时针增加。在图像中,坐标系被翻转。这导致角度不直观。因此,他们倒转y轴来计算角度。

抱歉,我还是没能理解你写的内容。atan2 能够返回从 -PIPI 的结果...为什么我们还需要添加负号呢?也许你有其他的解释方式吗?提前感谢! - undefined
@ggplayerlek:在图像中计算的梯度方向(即没有负号)会指向一个你作为用户认为是错误的方向。因为你感觉是+45度的方向会被计算为-45度。他们在那里添加了负号来翻转角度,以便返回的值对你来说更直观。另一种实现相同效果的方法是在该方程中的atan2前面加上负号。 - undefined

0
图像坐标与imgradient使用的标准基底不同。

Linear transform for image coordinate

引入一个额外的负号在atan2()函数的Gy项上,会给我们带来相同的效果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接