智能车打工日记(四)透视变换的一些尝试

目录

  • 透视变换的一些尝试
    • 原理
    • 变换的可行性
    • 变换的过程
    • 结语

透视变换的一些尝试

原理

【图像处理】透视变换 Perspective Transformation

变换的可行性

  1. 最直接的透视变换为将所有的像素点经过透视变换,得到一幅变换后的图。
    变换后的图形的形状将变成不规则的四边形,需要将图形进行截取,然后再作为车辆的图像进行处理。
    由于这种方式需要将每个像素点进行处理,并且在变换后还有极大的插值操作计算量,因此不适合在K66之类的芯片上进行处理。
  2. 经过思考与测试,发现先将图像进行处理,找到左右两条边线,然后再将边线进行透视变换,具有很好的可行性。因为只用对两条边线的像素点进行变换,并且插值操作变为一次的线性函数,计算量大大减小。

变换的过程

1. 在直道,获取变换矩阵

            //通过8个点进行变换矩阵计算
            Set_p1(L_black[5], 5);
            Set_p2(R_black[5], 5);
            Set_p3(L_black[10], 10);
            Set_p4(R_black[10], 10);
            Set_p5(L_black[5], 5);
            Set_p6(R_black[5], 5);
            Set_p7(L_black[5], 10);
            Set_p8(R_black[5], 10);
            //将上面八个点带入,进行变换矩阵运算,得到矩阵
            Get_Prst_Matrix();

计算得到的矩阵:
计算得到的矩阵
进行计算的图像:
智能车打工日记(四)透视变换的一些尝试_第1张图片
2. 利用变换矩阵,将左右两条边线进行透视变换

   p_Tgt = PrstTrans_Cale(p_Tgt);

得到离散的左右边线
智能车打工日记(四)透视变换的一些尝试_第2张图片
3. 将离散的左右边线进行插值处理

inter_point_L();
inter_point_R();

得到连续的左右边线
智能车打工日记(四)透视变换的一些尝试_第3张图片
(上面出现了边线的断层,由于是好几个月前的代码了,就懒得深究了)

4. 保存并使用这个变换矩阵

//已知矩阵,直接设置
Set_Prst_Matrix(1, 0, 0,
           -1.347f, 0.867f, -0.013f,
            6.733f, 0.667f, 1.06f);

获得弯道的变换边线
智能车打工日记(四)透视变换的一些尝试_第4张图片

结语

由于能力有限,仍没找到合适的控制来匹配透视变换。
应该也没有机会了。

你可能感兴趣的:(智能车)