基于c语言矩阵数组透视变换,一种图像透视变换方法与流程

基于c语言矩阵数组透视变换,一种图像透视变换方法与流程_第1张图片

本发明属于图像处理的技术领域,尤其涉及一种图像透视变换方法。

背景技术:

透视变换是一种常见图像处理方法。透视变换常用于图象的校正,例如在移动机器人视觉导航研究中,由于摄像机与地面之间有一倾斜角,而不是直接垂直朝下(正投影),有时希望将图象校正成正投影的形式,就需要利用透视变换。透视变换计算简单,使用起来十分方便,因此在图像处理中被广泛使用。例如在使用摄像头做车道线识别时就需要使用透视变换校正图像,以便更好的提取车道线。但是传统方法在经过透视变换后的图像信息存在丢失,需要再对图像做插值处理才能正常使用。

技术实现要素:

本发明所要解决的技术问题在于针对上述存在的问题,提供一种图像透视变换方法,由透视图反推原图像得出通用的变换关系,得到的透视图不再需要经过插值处理,从而节省了在插值处理上所消耗的时间,且能得到效果更好的透视图。

本发明解决上述技术问题所采用的技术方案是:一种图像透视变换方法,其特征在于,包括如下步骤:

S1)设备安装,将摄像头通过支架固定安装,支架安设于标定板后侧边的中心处,调整摄像头使摄像头图像坐标系纵向中轴线与标定板的中轴线重合;

S2)确定特征点,确定图像坐标系和规范化坐标系,所述图像坐标系中的原图特征点的位置坐标为(X0,Y0),所述规范化坐标系中的原图特征点的位置坐标为(XN,YN);

S3)计算变换矩阵,根据公式计算得出变换矩阵的各个参数值,其中:X0=Xn/w0,Y0=Yn/wn,透视图中的每一个像素点,查询其在原图中所对应的像素点的灰度值,得到透视图。

按上述方案,所述步骤S2)中包括如下内容:

S21)标定原图矩形,将标定板前侧边的两个角点分别作为第一原图特征点A0和第二原图特征点B0,将标定板左右两侧边与整体图像两侧边的两个交点分别作为第三原图特征点C0和第四原图特征点D0,确定特征点在图像坐标系中的位置坐标:A0(XA0,YA0)、B0(XB0,YB0)、C0(XC0,YC0)、D0(XD0,YD0),确定原图矩形A0B0C0D0;

S22)确定透视图矩形,给特征点A0、B0、C0、D0在规范化坐标系中对应的第一、第二、第三、第四透视图特征点A、B、C、D及位置坐标:A(XA,YA)、B(XB,YB)、C(XC,YC)、D(XD,YD),确定透视图矩形ABCD。

按上述方案,所述步骤S1)中标定板的前、后侧边的长度大于或等于离摄像头水平距离20cm处的视野宽度,标定板的左、右侧边的长度大于所述整个图像两侧边长度的三分之二。

按上述方案,所述原图矩形和透视图矩形的实际长宽比值相同。

本发明的有益效果是:提供一种图像透视变换方法,经由摄像头采集到的二值化图像,在进行逆透视变换时改变从原图像变换至透视图的思路,通过找出一个通用的变换关系(即变换矩阵)将之变成了由透视图反推原图像的一种新的变换方法,能完整保存透视变换后的图像信息,以使变换得到的透视图效果更加好,更省时。

附图说明

图1为本发明一个实施例的设备安装的示意图。

图2为本发明一个实施例的特征点变换的示意图。

其中:1.标定板,2.摄像头,3.支架。

具体实施方式

为更好地理解本发明,下面结合附图和实施例对本发明作进一步的描述。

提供一种图像透视变换方法,包括如下步骤:

1.设备安装,将摄像头通过支架固定安装,支架安设于标定板后侧边的中心处,调整摄像头使摄像头图像坐标系纵向中轴线与标定板的中轴线重合(见图1);

2.标定原图矩形,将标定板前侧边的两个角点分别作为第一原图特征点A0和第二原图特征点B0,将标定板左右两侧边与整体图像两侧边的两个交点分别作为第三原图特征点C0和第四原图特征点D0,确定特征点在图像坐标系中的位置坐标:A0(XA0,YA0)、B0(XB0,YB0)、C0(XC0,YC0)、D0(XD0,YD0),确定原图矩形A0B0C0D0;

3.确定透视图矩形,给特征点A0、B0、C0、D0在规范化坐标系中对应的第一、第二、第三、第四透视图特征点A、B、C、D及位置坐标:A(XA,YA)、B(XB,YB)、C(XC,YC)、D(XD,YD),确定透视图矩形ABCD(见图2);

4.计算变换矩阵,变换公式为:其中:(Xn,Yn)为规范坐标系中点的坐标,(X0,Y0)为其所在原图像中对应的坐标点,其中X0=Xn/w0,Y0=Yn/wn得:则,

带入四个特征点A、B、C、D以及A0、B0、C0、D0的坐标得到下式:

求得a、b、c、d、e、f、u、v后,对于规范坐标系中任意一点(Xn,Yn),可以求得图像坐标系中对应的(X0,Y0);

5.得到变换矩阵的参数后,计算得到原图与透视图的像素点之间的对应关系。下面是基于C语言编写的程序:

其中:

TS_ImgHeight为透视图的图像的行数;

TS_ImgWidth为透视图的图像的列数;

ImgHeight为原图的图像的行数;

ImgWidth为原图的图像的列数;

Ts_to_org_Table为变换表;

6.得到变换表后,根据变换表遍历透视图的每一个像素点即可得到透视图,

下面是基于C语言所编写的程序:

其中:

NumTs是所到的透视图

ImgNum是原图。

你可能感兴趣的:(基于c语言矩阵数组透视变换)