一、简介
最近在公关一个Halcon 30000行左右的项目,有100来个人负责是一个有500多项测量的大项目,可以说是一个测量界的巨头,唯一的缺点就是其中的3D测量用的不是点云处理,但是作为一个入行两年不到的新手来说,这个项目还是有很多值得学习的东西。
二、思想
建立坐标系的方法有很多种,但是我们这个项目就是通过客户给的一些要求来建立,像这种建立坐标系一般都是建立在某个特定的地方,通过输入的几个点来建立一个坐标系,具体思路就是
1、先通过区域筛选获得要建立的图像
2、测量出建立坐标系的单个点,第一个点是局部坐标系的原点,第二个点是用来计算转换矩阵的点,第三个点是和第二个点来组合成一条直线
3、通过计算点到第二个点到原点的距离,用这个距离来计算一个像素到新建的坐标系和原来像素之间的关系,就是一个转换矩阵
4、从第三步得到的矩阵的逆矩阵
两个矩阵之间的互逆的,这样的话可以吧坐标进行转化。
核心算法:
扫描二维码关注公众号,回复:
14349774 查看本文章

* 通过的得到的这个距离分别找9个点,和PixelRows 和PixelCols 建立起来一个矩阵,就是像素到局部坐标系的矩阵(3*3)
ImageX := [-x/2, 0, x/2, -x/2, 0, x/2, -x/2, 0, x/2]
ImageY := [x/2, x/2, x/2, 0, 0, 0, -x/2, -x/2, -x/2]
PixelRows := []
PixelCols := []
temp := [-x/2,0,x/2]
for xIndex := 0 to 2 by 1
for yIndex := 0 to 2 by 1
gen_parallel_contour_xld (XContour, ParallelContours1, 'regression_normal', temp[xIndex])
gen_parallel_contour_xld (YContour, ParallelContours2, 'regression_normal', temp[yIndex])
intersection_contours_xld (ParallelContours1, ParallelContours2, 'all', Row, Column, IsOverlapping)
PixelRows := [PixelRows,Row]
PixelCols := [PixelCols,Column]
endfor
endfor
vector_to_hom_mat2d (PixelCols, PixelRows, ImageX, ImageY, Pixel2ImageMat2D)
hom_mat2d_invert (Pixel2ImageMat2D, Image2PixelMat2D)
由于保密协议,所以代码就不贴了,过段时间自己写一版建立坐标系的方法吧