diff --git a/Algo/DetectHole/doc/doc.txt b/Algo/DetectHole/doc/doc.txt deleted file mode 100644 index 9e4b607..0000000 --- a/Algo/DetectHole/doc/doc.txt +++ /dev/null @@ -1,17 +0,0 @@ -我需要做一个算法,用于检测一个点云数据中的圆孔,最终输出圆孔的中心点和法向量 -我提供: -1. 点的结构体使用SVzNLPointXYZ,头文件 D:/Develop/DetectHole/include/VZNL_Types.h -2. 算法的思想可以参考D:/Develop/algoLib/sourceCode/channelSpaceMeasure.cpp -3. 测试的点云文件的加载可以参考D:/Develop/VZNLSDK/Utils/VzKernel/Src下的VzLaserTxtFile.cpp、VzLasFile.cpp、VzPureTxtFile.cpp、VzPlyFile.cpp和VzPcdFile.cpp的实现,可以支持读取pcd,txt文件 -4. 点云测试文件在D:/Develop/DetectHole/test -需求: -1. 检测点云数据中的圆孔,最终输出圆孔的中心点和法向量 -2. 将必要的功能都做成一个单独的函数 -3. 算法使用标准C++进行开发 -算法开发思路: -1. 要求输入点云必须为栅格化后的数据,输入参数为点集,行数,列数 -2. 对点云进行横向和纵向两种方式进行单线遍历,找到每条线的凹坑信息(具体为Z值会进行异变),可以使用相邻点进行连线(相邻点可以为2个点也可以是多个,可以作为算法参数),将相邻两条线求他们的夹角,如果角度大于某个参数阈值(默认70°),那么认为是很大跳变,是凹坑信息,如果小于某个参数阈值(默认-70°),我们认为是噪点,所以正常点应该是在-70°~70°范围内,记录下来横向和纵向两种方式得到的凹坑端点信息(即坑上的点) -3. 将记录下来的点拟合为一个椭圆。 -4. 根据拟合的椭圆向外扩展,具体扩展的大小为一个参数,扩展后认为这是一个基本面的圈(第1个圈),再向外扩展一圈(第2个圈),找两个圈中间的点云,然后使用这些点云进行x,y平面拟合 -5. 根据第4步的拟合平面计算出来此平面的法向量,这个法向量为最终输出的法向量 -6. 根据拟合的椭圆(第3步),来获取其中心点的x,y值,z值通过拟合平面参数进行计算。 \ No newline at end of file