《雨声》
图形图像算法10年+,自主研发OpenGL三维显示框架与算法库,善于使用VTK、ITK、CGAL、OCC、OSG、PCL、OPENCV图形图像处理库。
展开
-
第十五节《vtk中弹簧参数化建模》
/ 设置中心线半径,如果中心线半径0, 那么不进行拉伸。最主要函数是FreePullSpringObject::upData()函数,所有参数设置完毕后,// 设置拉簧头半径。1.计算拉簧头部的坐标系,分别计算两个头部的坐标系。原创 2025-01-11 17:51:17 · 44 阅读 · 0 评论 -
第十四节《vtk中生成二维码模型并识别二维码信息》
4.采用微信二维码识别算法进行识别二维码,提示:二维码模型利用3D打印机打印出来后基本上是纯色,相机拍摄后识别难度较大,经过本人测试,采用微信二维码识别准确率高于其他传统算法,并且微信二维码识别算法已经收录到opencv4.5以上版本中。库官网:https://www.nayuki.io/page/qr-code-generator-library。库链接:https://github.com/nayuki/QR-Code-generator。QR-Code-generator 库。原创 2023-10-09 15:17:02 · 197 阅读 · 1 评论 -
第十三节《vtk中ICP匹配算法效果差解决方案》
它通过迭代的方式,将一个点云的特征点与另一个点云中与之最匹配的点对应起来,从而实现点云的配准。CCCoreLib::SimpleMesh* mesh可以构建一个目标位置的网格信息,但是我测试后算法变慢了,效果没有什么变化,如果有想研究的小伙伴可以参考注释掉的mesh是如何构建的。这可以通过计算源点和目标点云中所有点之间的距离,并选择最小距离对应的点来实现。估计刚体变换:根据对应点对,估计源点云相对于目标点云的刚体变换。在VTK中,ICP算法的实现主要通过。输出最终的刚体变换参数,将源点云与目标点云对齐。原创 2023-06-28 17:06:55 · 535 阅读 · 2 评论 -
第十二节《解决vtkDelaunay2D添加边界限制后剖分错误问题》
但是vtkDelaunay2D不添加边界限制后,计算还是比较稳定的,那么利用vtkDelaunay2D没有边界限制的剖分结果,然后判断哪些三角形中心不在约束边的内部或者外部,删除这些三角形就是最终想要的结果了。输入数据不正确:vtkDelaunay2D需要一组二维点作为输入,如果点的数量不正确或点的坐标不正确,它可能会产生错误的剖分结果。vtkDelaunay2D正确计算,尽量保证离散点形成的三角形不要有特别斜长的,比例控制在1000:1以内,限制边的点顺序要遵循右手定则。步骤四:写判断点在曲线内外函数;原创 2023-05-15 17:41:41 · 512 阅读 · 0 评论 -
第十一节《vtkPolyData模型偏置(膨胀)》
CGAL网格膨胀算法实现了一种称为球面膨胀的算法,它是一种非常有效和稳定的方法,可以将三角网格模型的表面向外膨胀,从而生成新的几何形状。vtk中并没有很好的模型表面网格偏置算法,如果简单让网格顶点按照顶点法向平移一段距离,这样会造成模型自身发生干涉,本章继续讲述将CGAL中的模型膨胀算法应用到vtkPolyData类型的网格上。沿着每个三角形的法向量方向,将三角形沿着法线方向移动一定的距离,这个距离可以根据用户需求或应用场景来设置。对于相邻的三角形,通过插值方法来生成新的顶点,并用新的顶点连接这些三角形。原创 2023-05-06 08:22:05 · 858 阅读 · 0 评论 -
第十节《VTK模型高质量补洞方案-CGAL算法融合》
填洞效果不一定理想:使用 vtkFillHolesFilter 进行填洞时,可能会出现填洞效果不理想的情况,例如生成的三角形质量不好、洞填充不完整等。因此,在使用 vtkFillHolesFilter 进行三角网格模型填洞时,需要仔细考虑数据的质量和大小,并选择适当的填洞算法和参数来获得理想的结果。可以保持模型的拓扑结构:使用 vtkFillHolesFilter 进行填洞时,可以保持原始模型的拓扑结构,避免生成不良的三角形。最后使用CGAL需要用到的预定义和头文件,以及vtk与CGAL模型转换函数。原创 2023-05-01 18:01:24 · 729 阅读 · 0 评论 -
第九节《vtkPolyData三角网格优化》
网格优化常用方式,是将模型点集进行均匀采样后重新剖分,这种方式也是一个不错的选择,但是依然不能保证算法的稳定性,因为点云均匀采样或重采样会破坏原始网格形态或者沟壑位置被淡化,并且3D网格剖分算法不是百分之百的处理任何形态的点云数据。vtk提供了三角网格模型降采样、升采样,这类算法都是基于元拓扑关系进行加密或稀疏,如果原始网格模型质量不好,那么处理后的网格很难保证高质量网格关系,vtk还提供了基于包围盒形式的网格重采样,但是效果依然不佳。这种均匀性可用于优化三角形的质量,从而提高网格的可用性和美观度。原创 2023-05-01 16:02:43 · 959 阅读 · 0 评论 -
第八节《vtk 空间点云三角剖分效果差解决方案-CGAL算法融合》
Delaunay 三角剖分:将离散点集的凸壳内的所有三角形的外接圆不包含点,称为 Delaunay 三角剖分。存在内存限制:vtkDelaunay3D在进行三角剖分时需要先将所有点加载到内存中进行处理,对于大规模数据集,会受到内存大小的限制,可能导致无法进行剖分或者剖分结果不准确。分层三角剖分:首先将点集划分成多个较小的子集,分别进行三角剖分,然后将子集进行合并,得到整个点集的三角剖分。调用三角剖分对象的Update函数进行三角剖分,生成一个新的数据集,其中包含三角化的表面网格。原创 2023-05-01 10:45:58 · 641 阅读 · 2 评论 -
第七节《解决vtkActor显示大小不随相机改变而变化》
但是这样实现方式也是有弊端的,因为我们直接改变了vtkActor的局部坐标系将UserMatrix数值改变了,这时我们的模型数据要保证在世界中心,想要设置模型位置,我们尽量采用设置Actor的位置来改变模型在世界中的显示位置,下面举个的FreePointObject类进行说明,此类是使用vtk绘制小球的代码,vtk绘制小球我们都知道使用vtkSphereSource就能完成此功能,但是我们在类中提供了两种接口来设置小球在世界中的位置,其中setActorPos就是设置的是小球对应的vtkActor的位置;原创 2023-04-30 15:45:34 · 1295 阅读 · 2 评论 -
第六节《FreeWorld快速入门》
第二步:创建模型FreePolyData,FreePolyData封装了vtkPolyData以及FreeActorArray、并且添加一个缓存区、在处理多线程时,数据的变更与界面刷新异步处理,这时需要一个数据缓存进行数据交换,本样例通过加载stl模型进行填充FreePolyData数据。FreePolyData提供了常用的数据接口,获取vtkPolyData、获取点、获取点集、计算法向、构建OBBTree、构建Kdtree、查找最近点、查找邻域、设置模型矩阵、点与模型求交等等。原创 2023-03-01 17:58:34 · 242 阅读 · 0 评论 -
第五节《VTK 点与网格模型求交处理技巧》
使用VTK做项目常常需要用到单点或点集与网格模型求交计算,常用手段是使用vtkOBBTree进行求交计算。我基于VTK提供的算法总结了3种点与网格求交计算的方法,第一种vtkOBBTree直线与网格求交计算;第二种局部网格直线求交计算;第三种基于深度缓存求交计算; 第一种vtkOBBTree直线与网格求交计算,vtkOBBTree是用于生成模型OBB树的对象数据结构,它基于模型创建一个有向包围盒,对包围盒空间划分了更多层次的空间,直线与模型相交能够快速锁定某个区域,进行求交计算,用法如下:原创 2022-12-04 23:41:29 · 1108 阅读 · 7 评论 -
第四节《VTK Bool运算不稳定解决方案-CGAL算法融合》
前几节写的内容感觉一般般,这一节来点狠货,之前我在使用VTK做项目时,总是需要用到模型布尔运算处理一些事务,但是VTK的布尔运算不忍直视,太鸡肋了,稍稍复杂一点的模型就计算不了,算法极度不稳定,所以这种情况是不能应用在项目里面的。CGAL算法五:模型偏置,将模型按照三角网格法向进行偏置,但是偏置参数并不是网格距离,好在是线性参数,多试验几次就能获得很好的网格,这个函数执行完,需要使用原网格与偏置后的网格做一个boolean运算即可得出偏置网格。CRF_UNION, // 并集。原创 2022-12-01 19:03:02 · 1267 阅读 · 2 评论 -
第三节《vtkActor重新实现-FreeActor讲解》
这一章我们主要讲解vtkActor被继承后,如何重新实现,首先说一下为什么要重新实现vtkActor, 网上大多数文章重新实现vtkActor主要目的是将重新实现的actor变成具有一定功能的类,比如做一个测量控件,测量显示模型包含2个端点球模型、一条线段、一个刻度。但是我重写vtkActor主要目的是想处理一些vtk没有提供的方法,都是一些显示相关的,比如我们在做模型标注功能时,往往采用绘制一个小球当做标记点,我们是希望小球大小与视口是固定不变的,相机是否无论怎么缩放小球显示大小不应该变化。原创 2022-11-26 10:59:34 · 627 阅读 · 0 评论 -
第二节《单模型多VTKActor处理技巧》
上一节我们讲到FreeModelView基本组成,其实FreeModelView就是一个三维展示窗口,但是我们在开发实际项目时,往往需要多窗口处理业务,也是就多个三维窗口同时显示,显示的三维模型数据可能是同一个数据,有的小伙伴通过创建多份三维数据对象来实现。这样实现使能满足业务需求的,但对于代码质量来说是不友好的,浪费了内存,并且在业务处理时也要考虑多组数据。 在VTK中模型数据列如vtkPolyData想要显示到vtkRenderer中,只需要通过vtkActor与vtkMapper就能够将原创 2022-11-22 15:04:11 · 1232 阅读 · 2 评论 -
第一节《FreeWorld对VTK封装介绍》
Hello大家好,VTK提供了vtkRenderer如何嵌入到QWidget中,初学者在使用时,图形软件框架不知如何设计,本人在此分享个人使用心得。我会通过介绍FreeWorld这个库,让大家了解VTK常用技巧,以及常用的API,还有一些可能大家在网上找不到的vtk api用法,以及会介绍vtk中现有版本存在的bug或不足等问题。在文章结束时我会分享FreeWorld库所有代码给大家。 FreeWorld封装了VTK三维窗口,鼠标交互事件信号、各种常用模型封装、各种常用方法封装,下面现介绍Fr原创 2022-11-19 16:54:37 · 642 阅读 · 6 评论