我正在尝试用C#编写Canny边缘检测代码。我对找到边缘的方向感到困惑。我知道方向是梯度向量和x轴之间的角度。当找到梯度向量的方向(D(时,可以对y/x比率进行反tan运算。我理解那部分。我迷失的部分是,网上的一些例子似乎不知从哪里添加了PI,我不明白。它也是:
` double angle = X/ Y;
double radians = angle * (180/Math.PI);
Angle = Math.Tan(radians) + Math.PI;`
或者这个:
double angle = X/ Y;
double radians = angle * (180/Math.PI);
Angle = Math.Tan(radians);
我也见过:
orientation[index] = Math.Atan2(dy, dx) + Math.PI;
但这甚至不是反棕褐色,是吗?
前面的两个例子都没有任何意义。X/Y肯定不是一个角度,而是一个角度的切线。若要从切线获得角度,必须使用两个反函数Math.Atan或Math.Atan2中的一个。如果你同时得到了方向向量的两个分量(X和Y(,那么总是更喜欢Math.Atan2而不是Math.Atan,因为Math.Atan2返回的角度在-Pi到+Pi的范围内,而Math.Tan只会给你一个Pi/2到+Pi/2的范围内的结果。然后,你必须决定在某种情况下,你是否必须加上或减去Pi(如果结果是正的,ATan"不知道"角度是在第一象限还是在第三象限,如果结果是负的,它是在第二象限还是第四象限(。试着学习如何使用三角函数,以及当你了解如何应用它们和相应的反三角函数时,它们会回到你的程序中
阅读有关三角函数的Microsoft文档。