2013-02-14 127 views
0

如图所示,存在二元多边形图像。我想找到图像中与X轴有关的主要方向。我用蓝线显示了主要方向和X轴。这可以使用PCA完成,但我的问题是这样一个小矩形将有大约1000个像素,我必须找到大约100个多边形的主方向(多边形可以是任意形状)。二进制图像中的主方向

我想到的一种方法是: 将矩形投影到以度数(例如)5度定向的线上。具有最大方差的投影是期望的投影轴线,并且因此这是期望的角度。但这也属于贪婪的方式,因此需要时间。有更聪明的方法吗?另外,如果有人能够解释使用PCA做到这一点的确切程序,那将会有所帮助。我知道的步骤: 1.采取协方差矩阵。 2.获取与最大特征值对应的最大特征向量 - >这将是主要方向。

但是我感到困惑在下面的语句我经常读到处:

列向量:[0.5 0.5]是第一主成分和它给出最大方差的方向。因此,我可以精确计算出我应该旋转数据的角度,以便它与X轴平行。

enter image description here

+0

如何找到惯性矩(请参阅https://en.wikipedia.org/wiki/Second_moment_of_area#Any_cross_section_defined_as_polygon),并从中得出它的主要方向,通过计算它的特征向量 – bla 2013-02-14 04:39:30

+0

我真的不明白为什么你不能仅仅使用PCA,你有1000个像素,那就是1000,2D矢量。计算它的协方差矩阵是微不足道的,找到特征值和特征向量应该是立即的。你有没有明确的理由为什么你这样做? – carlosdc 2013-02-14 04:49:43

回答

1

计算具有最高特征值有关的特征向量。调用v。Normalize v。v = v/norm(v);其与水平方向之间

计算角:角度= ACOS(总和(V * [1,0]))

旋转通过-angle,变换矩阵T = [COS(-angle)-sin (-角度); sin(-angle)cos(-angle)],将所有点乘以该矩阵。对所有多边形都这样做。