保存桌面快捷方式 - - 设为首页 - 手机版
凹丫丫旗下网站:四字成语大全 - 故事大全 - 范文大全
您现在的位置: 范文大全 >> 理工论文 >> 计算机论文 >> 正文

彩色图象的二维变形


浮点加法的计算量。这样,区域内每一像素点的反变换均可通过增量计算高效地完成,这大大提高了整个变形算法的速度。
另外,前面提到,经过反变换后的点一般具有实数坐标,无法直接在原图像中获得颜色值。但我们知道,一幅所谓数字图像,其实质是对连续图像在整数坐标网格点上的离散采样,因而可以用插值的方法,得到区域内具有任意坐标的点的颜色值。插值即是对任意坐标点的颜色值,用其周围的若干像素(具有整值坐标值,颜色值确定)的颜色值按一定插值公式近似计算。一般有最近邻点法、双线性插值法及3次样条函数法等插值方法,出于精度与速度的折衷要求,选用双线性插值方 法对绝大多数的应用场合是适宜的。需特别指出的是,应该对颜色的3原色分量分别进行插值,而不要直接使用读像素点得到的颜色索引号。详细讨论见文献[1]。
四、算法细节
下面将要给出的彩色图像的二维变形算法以多边形区域扫描转化的扫描线算法为框架,且使用相仿的数据结构,对目的多边形区域高效地进行逐点扫描,同时实现前面讨论的各种技术。
首先给出的是用C语言描述的数据结构:
struct Edge {
float x; /*在边的分类表ET中表示边的下端点的x

坐标;在边的活化链
表AEL中则表示边与扫描线的交点的x坐标;*/
float dx; /*边的斜率的倒数;即沿扫描线间方向X的增量值*/
int Ymax; /*边的上端点的y坐标*/
float Rx; /*在ET中表示边的下端点*/
float Ry; /*的反变换坐标;在AEL中则表示边与扫描线交点的反变换坐标*
/
表float dRx; /*沿扫描线间方向,反变*/
float dRy; /*换坐标(Rx,Ry)的增量值*/
struct Edge *next;/*指向下一条边的指针*/
}; /*多边形的边的信息*/
struct Edge *ET[YResolution];
/*边的分类表,按边的下端点的纵坐标Y对非水平边进行分类的指针数组。
下端点的Y值等于i的边归入第i类,同一类中,各边按X值及△X的值递增顺序排列;YResolution为扫描线数目*/
struct Edye *AEL;
表 /*边的活化链表,由与当前扫描线相交的所有多边形的边组成,记录了多边形边沿当前扫描线的交点序列。*/
struct Polygon {
int npts; /*多边形顶点数*/
struct Point *Pts;
/*多边形的顶点序列*/
}; /*多边形信息*/
struct Point {
int X;
int Y; /*顶点坐标*/
float Rx;
float Ry; /*顶点的反变换坐标*/
}; /*多边形各顶点的信息*/
注意以上注释中边的下端点指纵坐标值较小的一端,另一端即为上端点。
以下则为算法的详细步骤:
1.数据准备
对于每一条非水平边QiQi+1,设Qi与Qi+1的坐标分别为(Xi,Yi)
及(X
i+1,Yi+1);其反变换坐标为(Rxi,Ryi)及(RXi+1,RYi+1)。
则按以下各式对此边的信息结构各域进行填写:
X=Xi,Yi<Yi+1
Xi+1,Yi>Yi+1
RX=RXi,Yi<Yi+1
RXi+1,Yi>Yi+1
RY=RYi,Yi<Yi+1
RYi+1,Yi>Yi+1
dx=(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+dRxx
Ryx=Ryx+dRyy
用(Rxx,Ryx)在数组Image之中插值,(参见文献[1]),按所得颜色值显示该像素。然后边x=x+1,计算下一像素。
(4)将AEL中满足y=Ymax的边删去,然后按下式调整AEL中各边的信息。
X=X+dx
Rx=Ry+dRx
Ry=Ry+dRy
(5)y=y+1,重复下一点。
五、讨论
上述算法针对彩色图像的二维变形问题,给出了一个简单快速的实现方案。至于三维变形,由于一般会牵涉到隐藏面消除等问题,比较复杂。但在一些情况下,可以避开消隐问题,如目的曲面形状比较简单,投影到屏幕后,各部分均不发生重叠,也就没有必要使用消隐技术,直接投影就可以了。这时就仍然可以利用本文介绍的二维变形技术,进行处理。方法是:
将曲面用许多小平面多边形进行逼近,再将各个

《彩色图象的二维变形(第2页)》
本文链接地址:http://www.oyaya.net/fanwen/view/171915.html

★温馨提示:你可以返回到 计算机论文 也可以利用本站页顶的站内搜索功能查找你想要的文章。