四边形顶点变形变换(200分)

  • 主题发起人 主题发起人 hospitaltnt2
  • 开始时间 开始时间
H

hospitaltnt2

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟最近开发以图像程序,遇到一些问题,请各位富翁指点。
为了实现类似photoshop的图像扭曲变形功能,即四边形任意顶点平移变换,我有以下想法:
首先假设在图像中有一供选取区域用的四边形ABCD,其中顶点B平移到M后,形成新的四边形AMCD,要求四边形区域中的图像也随之变形。
由以往写程序的经验,须对AMCD中的任一点Q,求出该点在ABCD中的对应点P,再进行颜色赋值即可。但是,如何找到PQ的对应关系呢?
在ABCD中,有B点向对边AC和CD上的各点作直线,理论上有无数条,这些可以覆盖ABCD中的所有点,在计算机图像系统中,“直线”的数目是有限的,因为AC和CD上的点是有限的,所谓直线也只是折线拟合成的直线,但这些拟合后的直线同样能因为拟合的缘故覆盖ABCD中所有的像素点。同样,对于AMCD也是如此。
现在,只需找出Q点在AMCD中所处的直线MX(X为直线与四边形边的焦点),因为X点是不动的,因此可以得到在ABCD中的BX,再根据Q点再MX上的位置得到BX上P点即可。
这个想法会不会运算量太大,求点对应的线的时候可能用到拟合算法。
或有更好的方法,请大虾指点迷津,小弟再拜。
 
你的问题难度太大了. 先搞点简单的. 基本的图像变换有三种:

平移, 旋转, 拉伸, 其它的可以看成是这三种的组合, 每一种可以通过矩阵变换来完成. 可以找本平面图形技术的书看看.

任意变形的计算可以用下面的方法实现. 找一个原点, 找一个参考点(就是你要移的点). 图像中的每一个点和这两个点组成一个三角形. 参考点移动后, 跟据三角形缩放规则计算图形中的点在变形后的位置. 最后完成变形, 所有的点变形计算完成后, 再调用插值算法.
 
M应是ABCD内任意一点,将直线|AM|延长与ABCD的边BC交点为B',将直线|CM|延长与ABCD的边AB交点为 B";
设A点座标为A(x1,y1), C点座标为A(x2,y2),
利用
三角形ABB',与三角形AMB',具有相似形.
可以计算任一点P(x,y)的新x座标.

利用
三角形CBB",与本角形AMB",具有相似形.
可以计算任一点P(x,y)的新y座标.

我先帮你画了画了画,还没推公式.
 
robot88大侠,好像这种变换不是线性的,无法用复合矩阵,还有,您所说的三角形缩放规则是什么,能详细点吗?
apw大侠,好像这几个三角形不一定相似阿,就是相似,怎么利用它们呢?请赐教。
photoshop中好像很容易就实现了,找了国内的一些网站没人提到过。国外倒是有很多这样的软件,就是没说原理,苦!做图像程序没算法真苦!!大侠们若不多加指点就更苦了!!!
 
三角形缩放规则就是指三角形的各内角不变, 只改变边长和整体旋转角度.
 
假设ABCD之B点的变形情况.
图中只计算了Q点对于P点的X坐标计算.
计算出于如下原理:
对于P点所在行像素的整体变形量为|Px'Px"|;
图像P点x座标Px,对于在行上各点的变形量为,其Px在整行上的位置占整行的比例关系.
从图上可见,左边第一点的变形量为|Px'Px"|,而右边最后一点的变形量为0;
|Px到图左边的距离|
即 |PxQx| = ------------------ x 该行的整体变形量|Px'Px"|
|图像的原始宽度|
以上所述的距离量均是有符号的.

对于y方向上的考虑,也可如此.

下面这个图是对算法的说明.
PicMove.JPG

未考虑变形成凹四边形的情况.
 

:-),首先,谢谢两位大侠的指点。
robot88大侠,您的意思我已明白,我先写个程序试试看。
apw大侠,您的意思是求分别求位移分量,几天前我也曾想过此法,但四边形ABC不是矩形阿
,我的直线逼近法您看可行吗?
 
难度不少,帮顶
 
原始图像不都是矩形的么。
应该存贮的原始图像大小和变换后的图像,只输出变换后的像图。
要不用户多次调整后,图像信息损失太大。
 
apw兄,原始图像是矩形,但调整一次后就不是了,用户会接着平移其他顶点。
您说的也许是每次都从原始图像进行变换,那就是一次移动多顶点变换了,甚妙!我理理思路先。
承蒙各位的关照,我今天就去现场调程序了,这段时间不能上网,回来后再给分,请谅解。
小弟再拜。
 
我的算法是自己想的, 以前也考虑过变形的问题...

不过, 最好是找本计算机图形概论或算法一类的书来看看. 记得以前看过一个画圆周的算法, 根本不用浮点的, 整数运算就搞定了, 暴快.
 
后退
顶部