项目实战一 建立坐标系

一、简介

最近在公关一个Halcon 30000行左右的项目,有100来个人负责是一个有500多项测量的大项目,可以说是一个测量界的巨头,唯一的缺点就是其中的3D测量用的不是点云处理,但是作为一个入行两年不到的新手来说,这个项目还是有很多值得学习的东西。

二、思想

建立坐标系的方法有很多种,但是我们这个项目就是通过客户给的一些要求来建立,像这种建立坐标系一般都是建立在某个特定的地方,通过输入的几个点来建立一个坐标系,具体思路就是

1、先通过区域筛选获得要建立的图像

2、测量出建立坐标系的单个点,第一个点是局部坐标系的原点,第二个点是用来计算转换矩阵的点,第三个点是和第二个点来组合成一条直线

3、通过计算点到第二个点到原点的距离,用这个距离来计算一个像素到新建的坐标系和原来像素之间的关系,就是一个转换矩阵

4、从第三步得到的矩阵的逆矩阵

两个矩阵之间的互逆的,这样的话可以吧坐标进行转化。

核心算法:

* 通过的得到的这个距离分别找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)

由于保密协议,所以代码就不贴了,过段时间自己写一版建立坐标系的方法吧

猜你喜欢

转载自blog.csdn.net/weixin_39354845/article/details/123950486