gpt4 book ai didi

pca - 使用 PCA 的边界框

转载 作者:行者123 更新时间:2023-12-03 07:48:32 31 4
gpt4 key购买 nike

我尝试用 PCA 构建一个定向边界框。在图片中您可以看到我的结果:

enter image description here

  • 红点:点云
  • 蓝色向量:PCA 分量

我尝试将点投影到向量上,以获得最小值、最大值和平均值。

但是我现在如何定义我的盒子呢?有什么想法吗?

我想要一个像这样的盒子:质心,以及两个方向的最小最大。

最佳答案

你的问题与PCA无关,关于如何处理平面上的点和线:移动点,以及将点投影到一条线上。(有关这方面的基础知识,请浏览 SO questions/tagged/2d+geometry ,或者用这些标签提出一个新问题。)如果没有这些基础知识,以及一点 Python 或 Matlab,这个Python小程序没有任何意义,但无论如何,这就是:

from __future__ import division
import numpy as np # http://www.numpy.org/

def pcabox( Pointcloud, Pca1, Pca2 ):
""" Lo1, Hi1, Lo2, Hi2 = pcabox( Pointcloud, Pca1, Pca2 )
In: Pointcloud: an N x 2 array of points
In: Pca1, Pca2: unit vectors at right angles, from PCA
Out: Lo1, Hi1, Lo2, Hi2: midpoints of the sides of a bounding box
"""
# convert inputs to numpy arrays (if they aren't already) --
Pointcloud = np.asarray(Pointcloud)
Pca1 = np.asarray(pca1)
Pca2 = np.asarray(pca2)
# check N x 2 --
assert Pointcloud.ndim == 2 and Pointcloud.shape[1] == 2, Pointcloud.shape

C = np.mean( Pointcloud, axis=0 ) # the centre of all the points
Pointcloud = Pointcloud - C # shift the cloud to be centred at [0 0]

# distances along the long axis t * Pca1 --
Dist1 = np.dot( Pointcloud, Pca1 )
Lo1 = Dist1.min() * Pca1
Hi1 = Dist1.max() * Pca1
# and along the short axis t * Pca2 --
Dist2 = np.dot( Pointcloud, Pca2 )
Lo2 = Dist2.min() * Pca2
Hi2 = Dist2.max() * Pca2

return [Lo1, Hi1, Lo2, Hi2] + C # 4 points

关于pca - 使用 PCA 的边界框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17942902/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com