目录
- 透视变换的一些尝试
-
- 原理
- 变换的可行性
- 变换的过程
- 结语
透视变换的一些尝试
原理
【图像处理】透视变换 Perspective Transformation
变换的可行性
- 最直接的透视变换为将所有的像素点经过透视变换,得到一幅变换后的图。 变换后的图形的形状将变成不规则的四边形,需要将图形进行截取,然后再作为车辆的图像进行处理。 由于这种方式需要将每个像素点进行处理,并且在变换后还有极大的插值操作计算量,因此不适合在K66之类的芯片上进行处理。
- 经过思考与测试,发现先将图像进行处理,找到左右两条边线,然后再将边线进行透视变换,具有很好的可行性。因为只用对两条边线的像素点进行变换,并且插值操作变为一次的线性函数,计算量大大减小。
变换的过程
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();
计算得到的矩阵:
进行计算的图像:
2. 利用变换矩阵,将左右两条边线进行透视变换
p_Tgt = PrstTrans_Cale(p_Tgt);
得到离散的左右边线
3. 将离散的左右边线进行插值处理
inter_point_L();
inter_point_R();
得到连续的左右边线
(上面出现了边线的断层,由于是好几个月前的代码了,就懒得深究了) 4. 保存并使用这个变换矩阵
//已知矩阵,直接设置
Set_Prst_Matrix(1, 0, 0,
-1.347f, 0.867f, -0.013f,
6.733f, 0.667f, 1.06f);
获得弯道的变换边线
结语
由于能力有限,仍没找到合适的控制来匹配透视变换。 应该也没有机会了。