Applying distortion to Bézier surface

321 Views Asked by At

I am trying to simulate the image warp effect, that is used in Adobe Photoshop.

The rectangular image is warped according to a cubic Bézier surface (in 2D, all Z components are 0). Having any Bézier surface, vertical distortion $d \in[0,1]$ can be applied to it.

Left: input bézier surface, $d=0$, Right: output surface, $d=0.8$

enter image description here enter image description here enter image description here

Do you have any idea, what is done to the Bézier surface (16 points), when converting from the version on the left to the output on the right?

1

There are 1 best solutions below

2
On BEST ANSWER

Clearly the $y$-coordinates of the Bezier patch control points are being left unchanged, and the $x$-values are being "tapered". When I say "tapered", I mean that the upper edge of the patch is being shrunk inwards, the lower edge is being expanded outwards, and the mid-height curve is being left unchanged.

I don't really know what the "$d=0.8$" value means. You say $d=0$ corresponds to no tapering, and I'd guess that $d=1$ is very strong tapering, where the top edge of the patch gets shrunk to a point (which means that the lower edge will double in width).

Let's assume that the left-hand patch has corners at $(-1,-1)$, $(-1,1)$, $(1,-1)$, $(1,1)$. If my guess about $d$ is correct, then the required transformation is: $$ T(x,y) = \big( (1-dy)x, y\big) $$ It's easy to confirm that: $$ T(x,0) = (x,0) \quad \text{for all } x $$ $$ T(1,-1) = (1+d, -1) $$ $$ T(1,1) = (1-d, 1) $$ and so on.