从点云中的质心绘制一个矢量
Draw a vector from the centroid in point cloud
我已经找到了聚类的质心和特征向量。如何在pcl可视化工具中从质心绘制矢量。
Eigen::Vector4f centroid;
Eigen::Matrix3f covariance_matrix;
// Extract the eigenvalues and eigenvectors
Eigen::Vector3f eigen_values;
Eigen::Matrix3f eigen_vectors;
pcl::compute3DCentroid(*cloud_filtered,cluster_indices[i],centroid);
// Compute the 3x3 covariance matrix
pcl::computeCovarianceMatrix (*cloud_filtered, centroid, covariance_matrix);
pcl::eigen33 (covariance_matrix, eigen_vectors, eigen_values);
_viewer->addLine<pcl::PointXYZRGB> (centroid, eigen_vectors, "line");
您可以绘制一个从质心orgin到本征向量端点的箭头。但首先你需要将你的本征向量和质心映射到一个依赖于组织(质心)的PointXYZ中:
Eigen::vector < PointXYZ > centroidXYZ_value, Point1_value,....;
PointXYZ centroidXYZ;
centroidXYZ.getVector4fMap() = centroid;
PointXYZ Point1 = PointXYZ((centroid(0) + eigen_vectors.col(0)(0)), (centroid(1) + eigen_vectors.col(0)(1)), (centroid(2) + eigen_vectors.col(0)(2)));
对其他导演也这样做然后:
centroidXYZ_value.push_back(centroidXYZ);
Point1_value.push_back(Point1);
现在你可以画了:
_viewer->addArrow(Point1_value.at(i), centroidXYZ_value.at(i), 0.5, 0.5, 0.5, false, "Arrow1");
_viewer->addArrow(Point2_value.at(i), centroidXYZ_value.at(i), 0.5, 0.5, 0.5, false, "Arrow2");
三维直线方程可以由点和矢量定义。只需将质心插入点(x,y,z),将特征向量插入向量(i,j,k)。。。。例如
point1 at (3, 2, -5) # your centroid
vectorA of (7i, -6j, 2k) # your eigenvector
可以定义直线的方程式
r = (3i, 2j, -5k) + S(+7i, -6j, 2)
其中变量S连续自由变化(样本值S=-4.9或S=0.03),以确定沿线的各个点。例如,S为0会给你质心点,而S=1会给你在(10i,-4j,-3k)的同一条线上的另一个点
相关文章:
- 如何在 Gnuplot 中分别绘制 2 个文件数据?我有一个文件"sin.txt",另一个文件"cos.txt",我想将它们分别绘制在一个图表上
- 绘制一个对象,比较模具缓冲区的两个不同值
- 使用 glDrawElements 绘制一个 std::vector
- 我正在尝试创建一个 C++ 贪吃蛇游戏,但我似乎无法绘制第二个高度边框,我该如何解决这个问题?
- 如何在openGL C++中绘制一个空心圆
- 尝试绘制存储在数组中的矩形,但只出现一个矩形?
- Opencv,在图像中的对象周围绘制一个框
- OpenGL 2D游戏只绘制第二个精灵纹理而不是第一个
- 图层不会绘制另一个图层
- 绘制椭圆延迟并绘制另一个椭圆延迟
- OPENCV C .在for循环中在不同的图像像素上绘制一个圆圈(应在每个循环运行时将图像打开)
- 直接X 11:在屏幕上绘制一个简单的彩色矩形
- 使用 C++ 库 GLEW 在 openGl 中绘制一个红色三角形
- 在另一个线程中绘制 OpenGL
- 如何在 MFC 中围绕当前光标的位置绘制一个矩形
- SFML在另一个对象上方绘制对象
- 创建一个包含要绘制的项的类(seg-fault)
- 为什么我的 OpenGL 对象相对于最后一个绘制的对象绘制
- 如何保持一个绘制矩形在相同的地方,因为相机周围移动
- 是否有可能保存当前的视口,然后在OpenGL和c++中在下一个绘制周期中重新绘制保存的视口?