复刻PS的液化形变功能二-局部缩放和局部旋转

之前介绍并复刻了PS的液化功能中的推脸形变,这个依靠鼠标推拉图像部分像素点的液化形变为液化形变中的局部缩放功能,与之对应的还有局部缩放局部旋转,设计师侧也称为膨胀褶皱、旋转画笔。

原理

局部缩放

首先有一个缩放变换

$$f_{s}(r) = (1 - (\frac{r}{r_{max}} - 1)^2a) r$$

$r_{max}$为圆形区域的半径,r为控制点移动的位移,即目的的矢量。a是为范围[-1, 1]的缩放系数,小于0表示缩小,大于0表示放大。给出点X,可以求出它变换前的坐标U,然后使用变化前图像在U点附近的像素进行插值,求出U的像素值。重复对圆形区域内所有点进行相同的处理,就完成了液化局部缩放的变换。

$$u = c + f_s(r) \ = c + f_s(x - c)$$

从公式可以看到,影响缩放形变的效果的参数有$r_{max}$和a,即圆形选区的半径和控制缩放的系数。这个在Photoshop里面液化工具对应的含义是画笔大小和画笔强度。

局部旋转

变换方程

$$f_s(\theta) = \theta + (1 - \frac{r^2}{r_{max}^2})^2 \alpha$$

其中,$r_{max}$同样为圆形区域半径,r为点到圆心距离。$\theta$ 为原有点的角度,做旋转的参考基准,$\alpha$ 则是控制旋转角度的参数,符号表示顺时针逆时针的方向,数值大小则表示旋转的大小。

微信公众号