资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2021/3/20 Saturday,#,Institute of Robotics and Automatic Information System,Click to edit the title text format,机器人与信息自动化研究所,Institute of Robotics&Automatic Information System,Institute of Robotics and Automatic Information System,Click to edit the title text format,单击此处编辑母版标题样式,2021/3/20 Saturday,#,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,#,/,机器视觉及应用,第六章图像几何变换,主要内容,图像插值,最近邻插值,双线性插值,双三次插值,透视变换,仿射变换,极坐标变换,1,、,图像,的几何变换来至于,三维几何和投影几何,的,变换,。,用于,均匀,和非均匀调整图像,大小。,2,、,采集,的,图像,可能存在,变形,。例如,图像,扭曲,和,图像,倾斜,等情况。将扭曲或者倾斜的,图像,进行,校正,,是为了是图像可以更加方便的用于,目标,对象,的识别,。,3,、,图像,几何变换执行的,操作包括,拉伸、收缩、,扭,曲,和旋转,图像等,这些,操作称为,几何变换,。,4,、,对于几何变换,,有,两种,主要,变换,方式:,使用,2,3,矩阵,的变换,称为,仿射变换,;,基于,3,3,矩阵,进行,变换,这被称为,透视变换,。,图像几何变换,5,、,除了以上两种变换之外,还存在一种,极坐标,变,换,,该变换尤其对于机器视觉中,检测圆形,对象,有用。,6,、,图像,变换的目的,在于将目标图像,矫正到,一个,相,对,理想的位姿,,以便于进行检测,。,7,、,变换,之后,,不能,保证图像灰度值都能够变换,到,新,的位置,而且,变换后的坐标也有可能,不是,整数,。因此,输出图像的灰度值通常采用,图像,插值,得到。图像插值的方法很多,常用的有,最,近邻,插值、双线性插值和双三次插值,。,图像几何变换,图像,插值的,目的,在于,自动选择比较理想的像素,值来,增加图像的信息,。该方法是,利用已知的像素值,来,评估,需要,插值的位置的像素值,。比如,将图形放大二倍之后,原图像的像素只占整个新图像的四分之一。此时,输出图像的空白部分,就需要通过插值计算得到。,图像插值,近邻插值是最简单的一种插值方法。最近邻插值通常用在放大图像时补充空白位置的像素。其原理是,在原图像寻找距离目标图像位置点最近距离的像素,,然后将原图像该位置像素插入目标图像对应位置。,图像插值,最近邻插值,srcX,和,srcY,表示原图上的(,x,y,)坐标,,dstX,和,dstY,表示目标图像的(,x,y,)坐标,,srcWidth,、,srcHeight,、,dstWidth,和,dstHeight,分别原图像和目标图像的宽度与高度。,最近邻插值,算法简单,计算速度快,。但是,这种插值方法导致像素的,变化不连续,,在新图中会,产生锯齿现象,。,图像插值,最近邻插值,例,1,设原图像,为,33,大小,,其像素值如下矩阵图所示,通过放大变换后的目标图像,为,44,,采用最近邻插值法,计算目标图像的像素值。,解,:计算,目标图像每个位置对应在原图像中的位置。,dst(0,0):,srcX,=dst,X,*(3/4)=0*0.75=0,srcY,=dst,Y,*(3/4)=0*0.75=0,所以,目标图像位置(,0,0,)对应原图位置为(,0,0,),,dst(0,0,)=src(0,0)=100,同理,,dst(1,0):,srcX,=dst,X,*(3/4)=1*0.75=0.75,1,srcY,=dst,Y,*(3/4)=0*0.75=0,目标图像位置(,1,0,)对应原图位置为(,1,0,),,dst(1,0,)=src(1,0)=50,dst(2,0,):,srcX,=dst,X,*(3/4)=2*0.75=1.5,2,srcY,=dst,Y,*(3/4)=0*0.75=0,目标图像位置(,2,0,)对应原图位置为(,2,0,),,dst(2,0,)=src(2,0)=,80,图像插值,最近邻插值,dst(3,0,):,srcX,=dst,X,*(3/4)=3*0.75=2.25,2,srcY,=dst,Y,*(3/4)=0*0.75=0,目标图像位置(,3,0,)对应原图位置为(,2,0,),,dst(3,0,)=src(2,0)=80,dst(0,1):,srcX,=dst,X,*(3/4)=0*0.75=0,srcY,=dst,Y,*(3/4)=1*0.75=1,目标图像位置(,0,1,)对应原图位置为(,0,1,),,dst(0,1,)=src(0,1)=60,图像插值,最近邻插值,根据以上方法,求出所有目标图像对应原图像中的位置,最后,结果,:,1,、,最近邻,插值,是一种最简单的图像缩放算法,但是,该算法效果不好,图像放大后存在严重的锯齿现象,,图像缩小之后有严重的失真,。,2,、,如果,目标象素值,是根据邻域内,真实的点,按照一定的,规律计算,出来的,这样才可能达到更好的缩放效果。,双线性插值,算法即为采用这种思路设计的插值算法,它,利用了计算出来的浮点数坐标与原图中邻近的四个真实像素值的关系,,来共同决定目标图中的像素值。,图像插值,双线性插值,3,、,双线性插值,首先在,水平方向,做了两次线性插值,然后将两次线性插值的结果再在,垂直方向,做一,次线性插值,来计算目标位置对应的原图像上的坐标。,线性插值是利用直线方程进行插值,的方法。,图像插值,双线性插值,线性插值示意图,4,、,双线性插值,是,在线性插值的基础上,分别计算了,两个方向的插值,。,图像插值,双线性插值,双线性插值示意图,5,、,在双线性插值中,首先通过点,P,11,和,P,12,计算得到,Q,1,,通过,P,21,和,P,22,计算得到,Q,2,,然后,通过点,Q,1,和,Q,2,计算得到点,Q,。以上每一步都是线性插值得到。其计算可以用如下公式表示:,。,图像插值,双线性插值,6,、,对于一个新位置的点,其一定落在四个像素之间。,双线性插值,法充分考虑了邻域内四个像素对新的像素的影响。因此,该算法插值,结果比较理想,。,7,、,该,算法的,计算时间复杂度,比最近邻插值法要大。而且,由于双线性插值,具有低通滤波器,的性质,使高频分量受损,所以可能会使图像,轮廓,在一定程度上变得,模糊,。,图像插值,双线性插值,例,2,对,例,1,所,示的,图像矩阵数据,将其方法,2,倍,变成,大小,试采用双线性插值计算放大之后位置为(,3,3,)的图像灰度值。,图像插值,双线性插值,解:首先计算放大之后的位置(,3,3,)对于原图中的位置,X,方向:,3,2=1.5,Y,方向:,3,2=1.5,可知,该位置位于原图像四个点之间,四个点分别是(,1,1,)、(,1,2,)、(,2,1,)、(,2,2,),。,图像插值,双线性插值,计算插值,结果,:,即在新图像位置为(,3,3,)插值后的像素值为,38,。,注意,图像中的坐标左上角是以(,0,0,),开始,,,对应在原图像上的像素值分别为,30,20,40,和,60,。,图像插值,双三次插值,双三次插值也称为双立方插值,是一种更加复杂的插值方式,它能得到比,双线性插值,更平滑的图像边缘。双三次插值最近的,十六个采样点的,加权平均,得到。双三次插值法首先需要计算每个点的权重。权重计算,公式,如下:,计算,插值,结果,公式,:,图像插值,双三次插值,双三次插值,的,结果较好,。但是,该算法的,计算时间复杂度太大,,通常对于有打印图像需求的时候,如果涉及到将图像放大等操作,采用该算法实现。而对于,机器视觉,而言,如果对图像缩放之后的要求不是很高,,一般不采用该算法,,常用双线性插值算法已经能够满足要求。,仿射变换,1,、,仿射变换,是一种,二维坐标,(,u,v,)到二维坐标(,x,y,)的线性变换,仿射变换是可以用,矩阵乘法和矢量加法,形式表示的变换。图像几何变换的一般形式的数学表达,如下,:,将其写成矩阵形式,如下,:,仿射变换,2,、上,式可以,实现图像各像素点以坐标原点的比例缩放、错切和旋转等各种变换。但是,上述,变换矩阵,不能,实现图像的平移变换,。,3,、,为了能够实现平移变换,,需要加上,平移变量,,,即:,仿射变换,4,、,为了用,统一的矩阵线性变换,形式表示图像几何变换,可以引入,齐次坐标,。采用齐次坐标可以实现上述各种几何变换的统一表示。为此,将,T,矩阵扩展为如下,2,3,变换矩阵,,仿射变换,5,、,根据矩阵相乘的规律,需要在坐标,列矩阵,u v,T,中,引入第三个元素,,扩展为,3,1,的,列,矩阵,u v 1,T,。,6,、,为,变换运算时更方便,一般将,2,3,阶变换矩阵,T,进一步扩充为,3,3,方阵,仿射变换,7,、矩阵,T,取,不同的值,,即得到,不同的变换结果,。仿射变换本质是二维平面变换,对应的变换矩阵是,2,3,的矩阵,为了变换运算是方便,在,2,3,的矩阵最下面加上一行,0 0 1,,将其扩展为,3,3,的矩阵。变换矩阵,T,中的对角线决定,缩放,,反对角线决定,旋转,或,错切,,,和,决定平移,。,各种,变换对应的,变换矩阵:,(,a,)平移,(,b,)缩放,(,c,)旋转,(,d,)错切,透视变换,1,、,透视变换也称为投影变换,是一种二维坐标(,u,v,)到三维坐标(,x,y,z,)的变换。图像透视变换的一般形式的数学表达如下:,写成矩阵形式,透视变换,2,、,透视变换是仿射变换的延续,,,其,变换矩阵,包括了仿射变换,。因此,也可以说仿射变换是透视变换的一种特殊形式,。,3,、,透视,变换是,三维空间上的变换,,因此,,对于二维图像,最后一个原坐标恒为,1,,变换矩阵的最后一个参数也恒为,1,。所以,透视变换的矩阵有,8,个未知数,,要求解就需要找到,4,组映射点,,四个点就刚好确定了一个三维空间。图像经过透视变换后通常不是平行四边形。,透视变换,例,图像,透视变换实例。,*,读取图像,read_image(Image,E:/,示例,/6-5.bmp),*,定义坐标变量,XCoordCorners:=130,225,290,63,YCoordCorners:=101,96,289,269,*,生成透视变换矩阵,hom_vector_to_proj_hom_mat2d(XCoordCorners,YCoordCorners,1,1,1,1,70,270,270,70,100,100,300,300,1,1,1,1,normalized_dlt,HomMat2D),*,对图像进行透视变换,projective_trans_image(Image,Image_rectified,HomMat2D,bilinear,false,true),透视变换,(,a,)原图 (,b,)变换结果图,仿射变换和透视变换在机器视觉中的主要作用即为,矫正有变形的图像,。,上,例通过,预设的变换矩阵和初始坐标,,得到透视,变换坐标。在实际应用中,仿射变换和透视变换矩阵需要通过图像处理得到变换矩阵。,极坐标变换,1,、,极坐标,变换功能是将图像的,笛卡尔坐标转换为极坐标,表示。该变换通常用来,矫正图像中的圆形对象或圆环中的目标,。给定变换中心位置点,p,c,(x,y),,图像上任一点的坐标为,p,i,(x,y),,将图像坐标变换成极坐标,,则点,p,i,(x,y),的极坐标表示如下:,极坐标变换,2,、,在,计算反正切函数时,需要注意像素点落在正确的象限。此外,,,上式,计算,由于需要进行开方运算和反正切运算,计算比较耗时。但是,可以采用极坐标逆变换的形式来减少这种运算。,极坐标逆变换,如下,极坐标变换,例,6-6,图像极坐标变换实例,*,定义输出图像宽度和高度,WidthP:=900,HeightP:=20,*,读取图像,read_image(Image,E:/,示例,/6-6.bmp),*,经过图像预处理,提取包含字符和条码区域的圆环形区域,mean_image(Image,ImageMean,211,211),dyn_threshold(Image,ImageMean,RegionDynThresh,15,dark),connection(RegionDynThresh,ConnectedRegions),select_shape_std(ConnectedRegions,SelectedRegions,max_area,0),gen_contour_region_xld(SelectedRegions,Contours,border,),极坐标变换,fit_circle_contour_xld(Contours,ahuber,-1,0,0,3,2,Row,Column,Radius,StartPhi,EndPhi,PointOrder),*,采用极坐标变换将圆环形区域展开,polar_trans_image_ext(Image,ImagePolar,Row,Column,0,rad(360),Radius-30,Radius-5,WidthP,HeightP,bilinear),*,将变换展开后的图像旋转,180,度,方便观察,rotate_image(ImagePolar,ImageRotate,180,constant),
展开阅读全文