大家好,有没有人知道photoshop中自由变换中变形的相关算法原理?

解决方案 »

  1.   

    楼上说的不对,其实所有的变换都是可以或者近似用一个方程来描述的
    如果X2 = a1*X1 + b1*Y1 + C1;
    Y2 = a2*X1 + b2*Y1 + C2;
    这样一个方程组,不同的a b c就能够组成不同的变换(实际上这个方程能够组成所有的一维变换,平移、仿射、对称、放大缩小等等)
    对于上面楼主的实例,实际上PS是使用更高阶的方程组来描述这个变换而已,所谓最终就是确定方程的阶数和方程的参数,给一个通用的方程描述:
    X2 = A1*X(n) + A2*X(n-1)+……+AnX(0)+B1*Y(n)+ B2*Y(n-1)……+C1*X(1)*Y(N-1)+……
    Y2=……                 x(n)表示X的N次方
    类似的一个变换就能描述对图像的变换了,楼主的实例是进行了多个变换。一般来说2维变换就可以满足要求了,也就是方程的最高阶为2
      

  2.   

    fandh可以看这里,在GOOGLE上找的 ,就是Photoshop里面的warp变形。
    http://images.google.cn/imglanding?q=photoshop%20warp&imgurl=http://images.digitalmedianet.com/2005/Week_15/s9443bf6/story/ps09-warp1.jpg&imgrefurl=http://corporatemedianews.digitalmedianet.com/articles/viewarticle.jsp%3Fid%3D31601-1&usg=__nfVYMTXipwJMcmyG-6NkTCPnGf4=&h=537&w=332&sz=18&hl=zh-CN&tbnid=-oPMXetVjStRoM:&tbnh=132&tbnw=82&prev=/images%3Fq%3Dphotoshop%2Bwarp%26gbv%3D2%26ndsp%3D21%26hl%3Dzh-CN%26sa%3DN%26start%3D63%26newwindow%3D1&gbv=2&ndsp=21&sa=N&start=60&newwindow=1#tbnid=-oPMXetVjStRoM&start=64
      

  3.   

    ding 一 ding, 别沉了。
      

  4.   

    我现在不懂的就是,在Photoshop里面,拖拽外面的控制点,周边的曲线会变化,就跟BEZIER曲线差不多,而且里面的曲线也会跟BEZIER曲线一样,跟着变形,同时下面的图像就会变形。这是怎么插值的??我这个不懂。
      

  5.   

    这个问题的核心就是方程的阶数和参数,我认为这个方程的阶数为2就够了。也就是说最后的形式是
    X2 = A1*X(2)+A2*Y(2)+A3*X*Y+A4*X+A5*Y+A6
    Y2 = B1*X(2)+……+B6
    确定A1-A6,B1-B6就相当于确定了这一组变换。
    当然他使用的模型可能更加简单,也就是说AB中有些为0.
    具体模型是什么样我这里也无法猜测。至于你拉动一些点,然后图形就变换,其实这些点是用来计算AB这些
    参数使用的,所以点位变了之后,变换模型也就变了,如果你理解BEZIER曲线,那就是点的一维控制(控制斜率),变成了点控制二维的面而已。所以,你要完成以上的工作的话,首先确定一个变换模型,然后确定若干个控制点,控制点坐标计算模型变换参数。
    我说的应该够详细了吧。剩下的就是确定一个模型,设置一些控制点来控制模型参数(这个部分比较复杂)
      

  6.   

    比如说最上面的一条横边把,如果我拉动左上角的控制点,这条横边会变成BEZIER曲线状,成弯曲的了。但此时我只知道我拉动的点的位移,其他点参与运算,我也不知道他们的位移啊。
      

  7.   

    这么说吧,最简单的线性模型。你拉动最上面的边,那么从最上面线条到最下面的线条的距离就不一样了{Y值}
    设置原来为Y,移动之后为Y1,你使用直接压缩的方式,将Y个像素插值到Y1个单元格内,就完成了你所要的效果,当然这个模型是最简单的一次模型。也就是Y = A*Y;
    明白了没,今天不早了。回答了这么多也不给点分,不懂留言吧,明天再回
      

  8.   

    楼主搞定没,给这么多分,必须卖力a
    给你一点试探性的建议吧,你先做一个矩形,矩形的4边是4条BEZIER曲线,围成的框内就是一个图像。四条曲线端点位置固定,直线内的控制点可以移动(用来控制图片变形),然后Y方向是由上下两天曲线控制,X方向由左右两条曲线控制(图像边缘始终与曲线重合)X = 某固定值(P),LY是指从上曲线X固定值(P)的点到下曲线X固定值(P)的点的Y值的差(设为LY(P)),原始矩形的高为LY(0),对于每一个X(也就是P从矩形最左到最右),都使用原图像插值到扩展后的空间(Y(0)->Y(P))
    对于Y=固定值,LX类似的处理,就完成了一个最简单的变化。
      

  9.   

    恩,有点感觉哈。不过你说的,是假设只有周边的四个BEZIER边变形,而整个网格中间的几条交叉边是不会变形的,依然是直线。现在PHOTOSHOP里面的网格中每一条线都能进行类似于BEZIER曲线的变换。
      

  10.   

    你说,他这个会不会用了BEZIER曲面的知识??其实你这个效果图,其实就是一个BEZIER曲线交错成的曲面啊。