图像扭曲算法

2016-3-12 admin 图像处理

前几天在解决公司一个项目时候,遇到个扭曲算法问题,图像扭曲在DX或者OPENGL中非常容易实现,只需要修改uv坐标或者修改顶点坐标就行了,至于怎么扭曲全部交给DX,OPENGL了.这次得自己写内部算法的细节.


2d/3d中一般都是使用矩阵来控制图形变换,不过之前的变换都是标准的变换,也就是不管怎么缩放旋转极坐标系始终是垂直的,可是扭曲就不一样了,极坐标系还有不垂直的情况.先直接套用仿射矩阵,结果输出的图是错的,难道仿射矩阵不适用于扭曲? 后来查了资料,发现原来还是我矩阵极坐标系弄错了 以前使用引擎时候,输出效果不对,直接转置一下,在输出看看效果,这次居然给忘记了.

 

QQ图片20160312125810.png

如图,三角形从左往右变换

可以设

B为坐标系原点, BC为x轴, BA为y轴

根据公式

              (AxisX.x  AxisX.y  0)

(u v 1)  x (AxisY.x  AxisY.y  0) = (x y 1)

              (0          0          1)

AxisX就是向量BC,AxisY就是向量BA

由于uv是一个权重值,在变换过程中是不会发生变化的

所以只需要先算出三角形1的uv值, 再把uv带入三角形2种,就能得到x' y' . 扭曲的核心算法也就完成了.


直接上最终效果图

原图:

out-Orig.png

扭曲后:

out-Warp.png


标签: 计算机图形学 矩阵 算法

发表评论:

Powered by emlog | |

浙ICP备17021512号 |浙公网安备 33010602008237号