首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我试图在C#中编写Canny边缘检测代码

我试图在C#中编写Canny边缘检测代码
EN

Stack Overflow用户
提问于 2022-03-06 22:05:59
回答 1查看 264关注 0票数 0

我试图在C#中编码Canny边缘检测。我对找出边缘的方向感到困惑。我知道方向是梯度向量和x轴之间的角度。在求梯度矢量方向(D)时,你要做y/x比的反求。我明白这部分。我迷路的地方是网上的一些例子,似乎不知从哪里添加了PI,我不明白。它也是:

代码语言:javascript
复制
                ` double angle = X/ Y;
                double radians = angle * (180/Math.PI); 
                Angle = Math.Tan(radians) + Math.PI;`

或者这个:

代码语言:javascript
复制
                double angle = X/ Y;
                double radians = angle * (180/Math.PI); 
                Angle = Math.Tan(radians);

我也看到:

代码语言:javascript
复制
               orientation[index] = Math.Atan2(dy, dx) + Math.PI;

但这甚至不是逆棕色,是吗?

EN

回答 1

Stack Overflow用户

发布于 2022-03-07 10:46:06

你的第一个例子都没有任何意义。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文档。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71374577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档