点云几何形状拟合可视化

欢迎关注更多精彩
关注我,学习常用算法与数据结构,一题多解,降维打击。

要求

  1. 打开:打开一个点云并在树上展示
  2. 拟合:选择中一个点云,选择拟合类型,成功后会在右边渲染几何元素
  3. 基本信息:选择资源树上一个项目可以在属性栏展示基本信息
  4. 查看:通过打勾隐藏和显示某一项,可以对渲染框进行旋转和平移查看物体
  5. 重置中心:重置旋转中心为当前所有显示点云的中心

在这里插入图片描述
拟合理论资料
点击前往

类设计

代码链接:https://gitcode.com/chenbb1989/qt-opengl/tree/master/geoFitting

// 树节点
#ifndef TREEITEM_H
#define TREEITEM_H

#include <QObject>
#include <QTreeWidgetItem>
#include "../element/element.h"

class TreeItem : public QObject, public QTreeWidgetItem
{
    Q_OBJECT
public:
    explicit TreeItem(QObject *parent = nullptr);

    void setEle(Element *);
    void Draw(QOpenGLShaderProgram &shader);
    Element *ele;
signals:
private:
};

#endif // TREEITEM_H

将几何元素与树结点相关联。

// 几何元素
enum ElementType {Cloud, Line, Plane, Circle, Cylinder, Cone};

class Element : public QObject, protected QOpenGLFunctions
{
    Q_OBJECT
public:
    Element(QObject *parent = nullptr);
    virtual bool fit(const std::vector<Eigen::Vector3d>& points);
    void loadGL(QOpenGLWidget *gl);
    virtual void Draw(QOpenGLShaderProgram &shader)=0;
    virtual QString Info()=0;
    std::vector<Eigen::Vector3d> vertices; // 存储点集
signals:

protected:
    QOpenGLVertexArrayObject VAO;
    QOpenGLBuffer EBO;
    QOpenGLBuffer VBO;
    ElementType type;
    std::vector<int> index; // 存储类型
    double len;
};

元素可以通过点云来拟合,调用gl方法来准备数据,渲染时调用draw。

交互设计

  1. 渲染:树监听opengl的paintGL事件,检查打勾项目并渲染。
  2. 查看:通过鼠标移动改变旋转角度,滚轮控制大小,wasd控制平移。
  3. 选择项目:监控树选择项目,显示项目基本信息。
  4. 重置中心:计算当前所有选择点云的中心,重置渲染组件的中心。

效果展示

视频链接:

高斯点云拟合几何元素

直线拟合:
在这里插入图片描述

平面拟合:
在这里插入图片描述

圆拟合:
在这里插入图片描述

圆柱拟合:

在这里插入图片描述


本人码农,希望通过自己的分享,让大家更容易学懂计算机知识。创作不易,帮忙点击公众号的链接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值