Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 调查结果;“多直啊”;是一个形状。openCV_C++_Opencv_Image Processing - Fatal编程技术网

C++ 调查结果;“多直啊”;是一个形状。openCV

C++ 调查结果;“多直啊”;是一个形状。openCV,c++,opencv,image-processing,C++,Opencv,Image Processing,我正在开发一个应用程序,我有一组轮廓(每个轮廓代表一条潜在的线),我想检查一下轮廓/形状“有多直”。 我引用的文章使用了以下技巧: 它匹配一条穿过形状的“分段”线,如图所示- 然后给这条线的“直线”评分 以下是我正在研究的轮廓示例: 您将如何实施此技术? 是否有其他方法可以检查轮廓/形状的“直线度” 问候 我的第一个猜测是使用。也就是说,假设某个合理的原点不会出现舍入误差,在所有点上拟合一条直线,然后计算R^2 如果所有轮廓都是断开连接的组件,则更高级的方法是计算(链接用于骨形态测量,但他们

我正在开发一个应用程序,我有一组轮廓(每个轮廓代表一条潜在的线),我想检查一下轮廓/形状“有多直”。 我引用的文章使用了以下技巧:

它匹配一条穿过形状的“分段”线,如图所示-

然后给这条线的“直线”评分

以下是我正在研究的轮廓示例:

您将如何实施此技术? 是否有其他方法可以检查轮廓/形状的“直线度”


问候

我的第一个猜测是使用。也就是说,假设某个合理的原点不会出现舍入误差,在所有点上拟合一条直线,然后计算R^2

如果所有轮廓都是断开连接的组件,则更高级的方法是计算(链接用于骨形态测量,但他们解释了概念并引用了原始论文)。这会给你一个数字,告诉你你的节段“像一根杆”的程度。不过,这只是一个想法。任何形成曲线或有分支的东西都会越来越不像一根杆子

我想说的是,这也取决于你使用的度量,以及你的轮廓是否总是从左到右


另一种方法是创建点的初始值,从该矩阵计算特征值,并取它们的比率(比率大于或等于1;否则,反转比率)。这是a背后的基本原理,而不是最终比率。如果你有一个相当线性的数据集(数据集只在一个方向上变化),那么你将有一个非常大的比率。随着数据集变得越来越不线性(或越来越不相关),您将看到比率接近1。一个完美的线性数据集应该是无穷大的,一个完美的圆形数据集(我相信,但如果有人能帮我验证这一点,我将不胜感激。)此外,在二维中工作意味着计算成本低且简单

这将很好地处理异常值,并对轮廓的旋转和形状保持不变。你也有一个总是正的数字。唯一的问题是在划分两个特征值时防止溢出。然后你总是可以用较小的特征值除以较大的特征值,你的度量值会在0和1之间,1是圆,0是直线


无论哪种方法,您都需要测试此参数是否对您的应用程序足够敏感。

简单算法的一个示例是使用两段之间的点积来确定它们之间的角度。点积的公式为:

A*B=| | | | | | | | B | | cos(θ)

求解cos(θ)产率方程

cos(θ)=(A*B/(| | | | | | | | | | | | | | | | | B |))

由于
cos(0)=1,cos(pi)=-1.0
并且您正在检查直线的“直线度”,因此
cos(θ)
角度的标准化最接近-1.0的直线是最直的

直线度=总和(cos(θ))/(线段数)

其中直线接近-1.0,非直线接近1.0。请记住,这是对该算法的粗略评估,它显然有一些需要在实现中解决的边缘情况和注意事项。

诀窍在于使用。简而言之,计算绕轴的最小惯性、绕垂直于此轴的惯性以及它们之间的比率(始终在0和1之间;因为惯性是非负的)

对于直线,沿直线的惯性为零,因此比率也为零。对于一个圆,沿所有轴的惯性是相同的,因此比率为1。您的分段线将是0.01左右,因为这是一个相当好的匹配


一种更简单的方法是比较包含形状的凸多边形的周长和形状本身的周长。对于线条来说,它们基本上是相等的,而对于不太弯曲的形状来说,它们仍然具有可比性。

感谢您的快速响应。只有一条评论,你将如何找到并分割与轮廓相交的直线?@Nimrodshn我以为你已经将轮廓分解为一系列线段。经进一步审查,你似乎没有。让我再考虑一下,然后再给你回复。谢谢。很抱歉给你带来困惑,当然。尽管此特定项目的代码跨越5-6个类。您具体想看什么?您是如何获取和存储轮廓的。感谢您的回复,我将尝试并实施它,然后返回给您一个回复。小心确定系数。对于如何确定两个变量之间的关系是直线还是线性,这是一个完美的例子。@rayryeng,我没听说过这个例子,谢谢你展示这个。我有一种感觉,这是一个极端的情况,但它仍然是非常有趣的看到。呵呵,没有问题。反正我已经给你打了+1了。顺便说一句,我认为这将适用于大多数情况,所以在使用r^2时做得很好。你是对的,这些例子肯定是极端的,但了解它们很好!主成分分析(PCA)怎么样?米卡,谢谢你的回复。让我试着实施它,然后再给你回复。。