![图像视频滤镜与人像美颜美妆算法详解](https://wfqqreader-1252317822.image.myqcloud.com/cover/287/33831287/b_33831287.jpg)
2.3 几何滤镜
几何滤镜是指通过算法改变像素的位置,进而达到某种变形效果的滤镜。图像像素位置的变换过程,就是该滤镜的算法实现过程。
几何滤镜定义简单,但是更加多变,相对于颜色滤镜,显得没有规律性,往往一种变形效果对应一种图像处理算法,因而,开发成本较高。
几何滤镜的处理逻辑如下所述。
①输入原图。
②定义像素坐标位置计算公式,即变形算法。
③遍历原图中的所有像素,对符合要求的像素进行新位置计算。
④根据新位置映射得到滤镜效果。
本节以最常见的哈哈镜滤镜效果为例给大家讲解,方便大家对几何滤镜的逻辑和定义有更深入的理解。
哈哈镜实际上就是球面镜,球面镜在视觉效果上表现为:在半径为R的圆内,越接近圆心的地方,图像挤压变形得越厉害,从而呈现出挤压变形的搞怪效果。这里我们分别以凹面镜和凸面镜为例,凹面镜表现为周围向中间挤压变形,凸面镜则表现为中间向周围扩散变形。
哈哈镜凹面镜的算法原理如下所述。
假设O(x, y)为哈哈镜变形的圆心,示意图如图2.15所示。
![](https://epubservercos.yuewen.com/AE27E4/18096060308238006/epubprivate/OEBPS/Images/39018_110_1.jpg?sign=1739313920-ob95gM1Vt4cdkj9RbrvtrtZNvUjtc2HG-0-d314c87ef884d0fed6e2f1e85674f88b)
图2.15 哈哈镜算法示意图
C点像素坐标相对于O点坐标为 C(CX,CY),变形范围半径R=OC, C点变形后的点位坐标为C',C'点相对于O的位移向量为(OX,OY),则C'(X',Y')点的坐标计算如下:
![](https://epubservercos.yuewen.com/AE27E4/18096060308238006/epubprivate/OEBPS/Images/39018_110_2.jpg?sign=1739313920-wxjpDbLtJ14b9BGCp9Qr9GyW3h5evMKP-0-bfd447fe10b5eb26592ac00814acc4c1)
其中,k为变形程度调节变量,k≥0时,k越大,球面变形效果越明显,反之,越平缓。O为图像中我们选取的变形中心,可以根据所需要变形的位置自行设定。
哈哈镜凸面镜的算法原理如下所述。
假设O(x, y)为哈哈镜变形的圆心, C点像素坐标相对于O点坐标为C(CX,CY),变形范围半径R=OC,C点变形后的点位坐标为C′,C′点相对于O的位移向量为(OX,OY),则C'(X',Y')点的坐标计算如下:
![](https://epubservercos.yuewen.com/AE27E4/18096060308238006/epubprivate/OEBPS/Images/39018_111_1.jpg?sign=1739313920-cKsIRejrckBRD5evr0uQpeex3FbyQCsD-0-a3de3d0babd97e2cb300e3c49189a49b)
在上述算法中可以看到,算法计算涉及的都是像素坐标的几何变换,与像素的 RGB 值没有关系,因此,将这类滤镜称为几何滤镜。
用C语言实现算法如下:
![](https://epubservercos.yuewen.com/AE27E4/18096060308238006/epubprivate/OEBPS/Images/39018_111_2.jpg?sign=1739313920-H6ZWNnOwpchEuVfOMJdgBHwh5QCi3SHS-0-29a36b96b51856d5bcc9fdb20fe33ac5)
![](https://epubservercos.yuewen.com/AE27E4/18096060308238006/epubprivate/OEBPS/Images/39018_112_1.jpg?sign=1739313920-7sISGR2WaiB3aSFdOI4z0EKHSokwAkbh-0-713117d4a7bf49edf83a64e5e10c9b50)
![](https://epubservercos.yuewen.com/AE27E4/18096060308238006/epubprivate/OEBPS/Images/39018_113_1.jpg?sign=1739313920-lOKIBOr0rybIqJ5QoWqcYSTppQjsPuYK-0-36f5a582ebdfd8df97fd4fe38ecac55d)
算法效果如图2.16所示。
![](https://epubservercos.yuewen.com/AE27E4/18096060308238006/epubprivate/OEBPS/Images/39018_113_2.jpg?sign=1739313920-s4uCKTcoYpjsFROnKvxpvrEDP7NnRF78-0-9e3cf3fbbad1249dc6093918e2abeb1b)
图2.16 哈哈镜效果图
在 Faceu和 B612之类的 App中,有着大量的这种人脸变形特效,充斥着搞笑与呆萌,大家可以仔细研究,细细体会。
本节所有代码工程及DEMO见代码包中2.3文件夹中的文件。