壁纸拼接软件原理图示
简单介绍一下壁纸扫描自动拼接的原理
分段扫描示意图
将壁纸图案向下进行分段扫描,由于是手工操作,扫描时难免会出现歪斜,所以第一步就要实现分段扫描图片的垂直校正,这样壁纸才能进行有效的拼接。
垂直校正是拼接成功与否的关键,其最主要的算法是关于边界线的线性拟合算法,传统的算法一般是最小二乘法。但是最小二乘法的成功率并不高,原因的嘈杂点对该直线的影响偏大,如意造成一定的误差,所以我们自己研发了一个垂直校正的算法,大大提高了垂直校正成功率。
垂直校正后,需要进行第二步操作利用壁纸重叠部分进行对位,原理很简单,就是在重叠区域内进行判断,找到最佳的重合位置。
该算法道理简单,但是实现起来却不容易,最早的一个版本是为我们自己使用研发的,速度超级慢,大概拼接一张壁纸需要40分钟,完全无法进行商业使用,后经过半年的优化,才把拼接时间控制在1分钟以内。
自动拼接示意图
由于壁纸是有一定厚度的,所以扫描仪在扫描壁纸的时候,边界处容易出现露光的现象,在拼接的部位会有一定的瑕疵。所以第三步,需要对每一个扫描块进行无缝裁切,这样才能是壁纸看上去是一个整体。
裁切一般采用线性裁切,这样操作简单,但是这样的裁切还是容易出现瑕疵,所以我们采用柔性裁切,就是根据一定的区域内,寻找最佳的不规则曲线裁切,这样的裁切效果更加完美。
每一块柔性裁切拼口示意图
关于柔性裁切算法,网上有一些介绍,我是在香港大学的图形研究所网站看到的,但是觉得不够理想,我们有自己独特的算法,但是需要优化,现在大概的计算时间在40秒左右,太慢了,所以我们暂时使用相对快速但是效果一般的柔性裁切,后面我们将对该算法进行优化,优化后我们会作为该软件的更新。
由于壁纸是有纵向单元的,所以第四步进行上下单元位的裁切。方法和拼接是一样的原理,这里就不赘述了。