基于MATLAB的仿射变换/透射变换/道路检测/车牌检测

仿射变换即把三维物体所成的二维图像进行还原。话不多说,直接上效果:

1.平面翻转

可以使用鼠标任意选取四个点,然后将这四个点变换成矩形。运行结果如下:

基于MATLAB的仿射变换/透射变换/道路检测/车牌检测_第1张图片

基于MATLAB的仿射变换/透射变换/道路检测/车牌检测_第2张图片

2.基于霍夫变换

基于MATLAB的仿射变换/透射变换/道路检测/车牌检测_第3张图片

 3.基于仿射变换

先来看另一组基于霍夫变换进行仿射的例子(道路检测):

基于MATLAB的仿射变换/透射变换/道路检测/车牌检测_第4张图片

 

基于MATLAB的仿射变换/透射变换/道路检测/车牌检测_第5张图片

 很显然,简单的检测出最长边再旋转的方法在这里行不通了,因为从三维(但是图像是二维的)变化到二维需要新的算法。

原理:获取原图上四个点,推出新图像的四个点,然后得出它们的变换矩阵,将这个矩阵应用到原图的每一个点,得出新的图像。

基于MATLAB的仿射变换/透射变换/道路检测/车牌检测_第6张图片

(原图)

基于MATLAB的仿射变换/透射变换/道路检测/车牌检测_第7张图片

(变换后的图)

这里存在两个问题:一是变换后新的图像会有一些点没有被映射到,所以是黑的。二是只能对角度较小的原图进行变换,像张荣帅一开始给我发的那个就不行,因为太大了,原图的很多点会被映射到非常大的矩阵中去。

    然后我先解决第一个问题:双线性插值,原理是竖着插又横着插,运行结果如下:

 

基于MATLAB的仿射变换/透射变换/道路检测/车牌检测_第8张图片

 针对第二个问题,我想到的是通过线性规划来解决,就是只对我选的四个点以内的图像进行变换,别的点都不要了,我拿车牌的图运行了一下:

基于MATLAB的仿射变换/透射变换/道路检测/车牌检测_第9张图片

基于MATLAB的仿射变换/透射变换/道路检测/车牌检测_第10张图片

但是同样的代码运行到马路那张图时,就变成这样了:

基于MATLAB的仿射变换/透射变换/道路检测/车牌检测_第11张图片

原因是针对不同的原图像所选取的四边形,线性规划时有时候要取直线下方的点,有时候要取直线上方的点,符号不能确定,后来想到的办法是,四个点,取了一条直线后,剩下两点里面任取一个点,然后和这个点同一边(判断方法为“同号”)的点就是我们要的点。

运行结果如下:

基于MATLAB的仿射变换/透射变换/道路检测/车牌检测_第12张图片

如果要取远一点也OK(之前完全取不了,因为新数组太大了):(仍有优化空间)

基于MATLAB的仿射变换/透射变换/道路检测/车牌检测_第13张图片

最后的功能就是可以将任意四边形,二维也好,三维也好,变回矩形。

 

 注:有需要源文件及设计文件的朋友可以联系作者,作者创作不易,希望客官们打赏~(作者联系方式见个人资料)

本人QQ:492187667

 

 

 

 

你可能感兴趣的:(MATLAB,图像处理,计算机视觉,人工智能,matlab,图像处理)