下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
彩色图象的二维变形
摘要该文讨论了彩色图像的变形扭曲技术,并针对二维变形给出了一个速度、精度均令人满意的算法。一、引言在图像处理的应用中,一般图像所覆盖区域边界是规则的矩形。为获得某种特殊效果,常常需要将图像变换到具有任意不规则边界的二维区域或映像到三维空间曲面,简单地说,这就是所谓的图像变形技术。本文重点讨论了其中的任意二维多边形区域的变形问题,并针对彩色图像给出一个切实可行的算法。而三维情况下,则属于计算机图形学中的纹理贴面范围,一般均会牵涉到立体图形消隐、明暗处理等技术,比较复杂,本文未作深入探讨。二、变换原理本文所要讨论的二维变形问题可以形式化说明如下:图像定义在矩形区域ABCD之上,源多边形区域P=p1p2…pnp1(Pi为顶点,i=1,2,…n)完全包含在ABCD内;变形就是通过变换f,将P上的图像变换到目的多边形区域Q=Q1Q2…QnQ1(Qi为顶点,i=1,2,…n),其中,P与Q中的各顶点一一对应,即有:Qi=f(Pi)(i=1,2…n)。图1是变形的一个简单例子:图中的源多边形区域是矩形区域ABCD,目的多边形为任意四边形EFGH,阴影部分在变换前后的变化清楚地说明了变形的效果。@@T5S13200.GIF;图1@@那么,变换应该如何进行呢?一种直接的思路是显式地求出变换f的表达式。而f的实施又分两种方法;其一为正向变换法,即用f将P内的任一像素点变换到Q内,取原像素值加以显示。由于P与Q所包含像素点的数目一般不相同,甚至相差很大,造成Q中的像素点或者未被赋值,形成令人讨厌的空洞,或者被多次赋值,浪费了时间,总的效果不理想;其二利用f的反变换f-1,将Q内的每一像素点反变换至P内的对应点,一般此点具有实数坐标,则可以通过插值,确定其像素值,这样,结果图像中的每一像素点均被赋值唯一的一次,既提高了精度,又可以避免不必要的赋值,使用效果较好。上述显示求变换(或反变换)的表达式的思路,比较精确,但是这往往牵涉到复杂的多元方程求解问题,并非轻易可以完成。本文所给出的另外一条思路是:既然P与Q中各顶点一一对应,组成变换对,即源多边形P中的任一顶点Pi(i=1,2…n)经过变换f,得到目的多边形Q中的顶点Qi(i=1,2…n),则Qi的反变换点也必为Pi。这样,对Q内(包括边界)的各像素点A,可以利用各顶点的反变换点的坐标值通过双线性插值技术近似求出其反变换点B;再用点B的坐标值在源图像中进行插值,最终求得结果像素值,用于显示A。第二种方法在保留一定精度的前提下,避免了变换表达式的显式求解,实现简便。本文基于此思想,设计了一个快速变形算法;另外,算法中还借鉴了多边形区域扫描转换的扫描线算法的思路,以实现对Q内各像素点的高效扫描。以下,本文首先介绍了插值技术及增量计算技术,然后将给出二维变形算法的详细步骤。三、插值技术已知目的多边形Q各顶点Qi(i=1,2…n)的变换坐标值,如何求出Q内任一像素的反变换坐标呢?双线性插值法是一种简单快速的近似方法。具体做法是:先用多边形顶点Qi(i=1,2…n)的反变换坐标线性插值出当前扫描线与多边形各边的交点的反变换坐标,然后再用交点的反变换坐标线性插值出扫描线位于多边形内的区段上每一像素处的反变换坐标值用于以后的计算。逐条扫描线处理完毕后,Q内每一像素点的反变换坐标值也就均求出来了。如图2中所示,扫描线Y(纵坐标=Y)与多边形相交于点A和B两点,D则是位于扫描线上位于多边形内的区段AB上的任一点。已知多边形的3个顶点Qi(i=1,2,3)的反变换坐标为(RXi,RYi);又令A、B及D各点的反变换坐标分别是(RXa,RYa),(RXb,RYb)和(RXd,RYd)。则RXp可按以下公式求出:RXa=uRX1+(1-u)RX2式1RXb=vRX1+(1-v)RX3式2RXd=tRXa+(1-t)RXb式3其中,u=|AQ2|/|Q1Q2|,v=|BQ3|/|Q1Q3|,t=|DB|/|AB|,称为插值参数。RYd的值亦可完全类似地求出,甚至不必改变插值参数的计算。(Rxd,Ryd)即是D点在原图像中对应点的坐标近似值。@@T5S13201.GIF;图2@@上述的双线性插值过程可以通过增量计算方法提高速度。其中,在水平方向上,位于多边形内的各区段上的各像素的反变换坐标可以沿扫描线从左至右递增计算。仍以反变换的X坐标为例。如图2所示,在扫描线Y上,C与D是相邻两像素点,对C点,插值参数tc=|CB|/|AB|,对D点,td=|DB|/|AB|,则插值参数之差△t=|CD|/|AB|,由于C与D相邻,且在同一扫描线上,|CD|=1,即△t=1/|AB|,在AB区段上为常数。根据式1~式3,不难推得D点的反变换X坐标Rxd与C点的反变换X坐标Rxc之间的关系如下:Rxd=Rxc+(Rxa-Rxb)·△t=Rxc+△Rxx由于△Rxx在AB区段仍为常数,故AB区段上各像素点的反变换X坐标均可由A点的Rxa依次递增求得,而反变换Y坐标的递增求法亦是相同。这样,AB区段上各像素点的反变换坐标值的计算简化为两次加法,时间的节省是惊人的。事实上,在垂直方向,每条边也可在相邻扫描线间递增计算其与扫描线交点的反变换坐标。如图2中的Q1Q2边,其与相邻的两条扫描线Y与Y-1分别交于A点和E点。则两点的插值参数之差△u=|AE|/|Q1Q2|,而Q1Q2边与扫描线交角固定为θ,且A和E两点的Y坐标之差为1,则有:|AE|=1/Sinθ,对于Q1Q2边而言是常量,因此△u对此边也是常量,于是推得两点反变换X坐标关系如下:Rxa=Rxe+(Rx1-Rx2)△u=Rxe+△Rxy显然,△Rxy沿Q1Q2边亦是常数,故而可知,相邻扫描线与各边交点的反变换坐标也只要两次浮点加法的计算量。这样,区域内每一像素点的反变换均可通过增量计算高效地完成,这大大提高了整个变形算法的速度。另外,前面提到,经过反变换后的点一般具有实数坐标,无法直接在原图像中获得颜色值。但我们知道,一幅所谓数字图像,其实质是对连续图像在整数坐标网格点上的离散采样,因而可以用插值的方法,得到区域内具有任意坐标的点的颜色值。插值即是对任意坐标点的颜色值,用其周围的若干像素(具有整值坐标值,颜色值确定)的颜色值按一定插值公式近似计算。一般有最近邻点法、双线性插值法及3次样条函数法等插值方法,出于精度与速度的折衷要求,选用双线性插值方法对绝大多数的应用场合是适宜的。需特别指出的是,应该对颜色的3原色分量分别进行插值,而不要直接使用读像素点得到的颜色索引号。详细讨论见文献[1]。四、算法细节下面将要给出的彩色图像的二维变形算法以多边形区域扫描转化的扫描线算法为框架,且使用相仿的数据结构,对目的多边形区域高效地进行逐点扫描,同时实现前面讨论的各种技术。首先给出的是用C语言描述的数据结构:structEdge{floatx;/*在边的分类表ET中表示边的下端点的x坐标;在边的活化链表AEL中则表示边与扫描线的交点的x坐标;*/floatdx;/*边的斜率的倒数;即沿扫描线间方向X的增量值*/intYmax;/*边的上端点的y坐标*/floatRx;/*在ET中表示边的下端点*/floatRy;/*的反变换坐标;在AEL中则表示边与扫描线交点的反变换坐标*/表floatdRx;/*沿扫描线间方向,反变*/floatdRy;/*换坐标(Rx,Ry)的增量值*/structEdge*next;/*指向下一条边的指针*/};/*多边形的边的信息*/structEdge*ET[YResolution];/*边的分类表,按边的下端点的纵坐标Y对非水平边进行分类的指针数组。下端点的Y值等于i的边归入第i类,同一类中,各边按X值及△X的值递增顺序排列;YResolution为扫描线数目*/structEdye*AEL;表/*边的活化链表,由与当前扫描线相交的所有多边形的边组成,记录了多边形边沿当前扫描线的交点序列。*/structPolygon{intnpts;/*多边形顶点数*/structPoint*Pts;/*多边形的顶点序列*/};/*多边形信息*/structPoint{intX;intY;/*顶点坐标*/floatRx;floatRy;/*顶点的反变换坐标*/};/*多边形各顶点的信息*/注意以上注释中边的下端点指纵坐标值较小的一端,另一端即为上端点。以下则为算法的详细步骤:1.数据准备对于每一条非水平边QiQi+1,设Qi与Qi+1的坐标分别为(Xi,Yi)及(Xi+1,Yi+1);其反变换坐标为(Rxi,Ryi)及(RXi+1,RYi+1)。则按以下各式对此边的信息结构各域进行填写:X=Xi,Yi<Yi+1Xi+1,Yi>Yi+1RX=RXi,Yi<Yi+1RXi+1,Yi>Yi+1RY=RYi,Yi<Yi+1RYi+1,Yi>Yi+1dx=(xi-xi+1)/(yi-yi+1)Ymax=max(yi,yi+1)dRx=(Rxi-Rxi+1)/(yi-yi+1)dRy=(Ryi-Ryi+1)/(yi-yi+1)然后将其插入链表ET[min(yi,yi+1)]中。活化边表AEL置空。当前扫描线纵坐标y取为0,即最小序号。2.扫描转换反复作以下各步,直到y等于YResolution(1)若ET[y]非空,则将其内所有边插入AEL。(2)若AEL非空,则将其按X及dx的值从小到大排列各边,接(3);否则转(3)将AEL内各边按排列顺序两两依次配对。则沿当前扫描线Y组成若干水平区间[xLeft,xRight],其左右端点的反变换坐标分别为:(lRx,lRy),(rRx,rRy)。则对于每一个这样的区间作以下各步:dRxx=(lRx-rRx)/(xleft-xRight)dRyx=(lRy-rRy)/(xleft-xRight)又设原图像已读入二维数组Image之中。令XX=xleft,Rxy=lRx,Ryx=lRy则对于每个满足xLeft≤xX≤xRight的坐标为(xx,y)的像素,其反变换坐标(Rxy,Ryx)可按下式增量计算:Rxx=Rxx+dRxxRyx=Ryx+dRyy用(Rxx,Ryx)在数组Image之中插值,(参见文献[1]),按所得颜色值显示该像素。然后边x=x+1,计算下一像素。(4)将AEL中满足y=Ymax的边删去,然后按下式调整AEL中各边的信息。X=X+dxRx=Ry+dRxRy=Ry+dRy(5)y=y+1,重复下一点。五、讨论上述算法针对彩色图像的二维变形问题,给出了一个简单快速的实现方案。至于三维变形,由于一般会牵涉到隐藏
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度医疗健康信息平台服务合同
- 2024年度某旅游公司服务合同
- 居家口腔护理案例分享
- 04版危险品仓库租赁合同
- 2024年度厨房设备安装工程质量保证合同
- 浴室承包协议合同模板
- 2024年度出版发行服务合同标的详细描述
- 2024年度工程建设设备采购合同
- 2024年度玻璃幕墙工程竣工验收分包合同
- 2024年度物流专线公司业务拓展与市场开发合同
- 沪科版(2024)八年级全一册物理第一学期期中学业质量测试卷(含答案)
- FURUNO 电子海图 完整题库
- 人教版数学八年级上册《13.4 课题学习 最短路径问题》说课稿2
- 藏族民间舞-热巴舞智慧树知到期末考试答案章节答案2024年西藏大学
- 华东师大版(2024年新教材)七年级上册数学第3章《图形的初步认识》综合素质评价试卷(含答案)
- 五年(2020-2024)高考语文真题分类汇编(全国)专题02 信息类文本阅读(非连续性)(教师卷)
- 电信网络诈骗与校园安全智慧树知到期末考试答案章节答案2024年湖南警察学院
- 中医科PDCA如何提高中医内科优势病种收治率
- JT-T-1199.1-2018绿色交通设施评估技术要求第1部分:绿色公路
- 智能制造(智改数转)架构设计解决方案
- 航空航天用带肋十字槽-编制说明
评论
0/150
提交评论