获取当前特征点法线方向两侧点的纹理模型
在基于ASM人脸面部特征定位中,要获取当前特征点法线方向两侧点的纹理模型,计算抽样点坐标方法如下:
1. 涉及到的图形学知识:
画直线的方法:数值微分法,中点画线法,Bresenham画线方法
2. 注意问题
(1)在求解特征点法线方向的N个抽样点的局部纹理信息时,抽样点坐标的计算可以按照以上提到的三种方法中的一种(具体介绍见图形学方面的书籍)。
(2)数值微分法涉及到浮点数,不利于硬件的实现,可以考虑用图形学领域应用最广泛的Bresenham直线扫描转换算法。
3. 求解法线方法
(1)错误方法:先根据当前特征点前后两个特征点求过该特征点的法线,然后取x++,求处y坐标,然后将(x,y)作为抽样点的坐标。
错误原因:当法线斜率k < 1时该方法求出的坐标误差不是很明显,但当k >>1时,那么当x += 1时,y的增量可能会很大可能造成两个取样点之间的距离很大,甚至抽样点的坐标会超出图像的范围。因此这种方法思路上是错误的,没有考虑到斜率的各种情况对抽样点选择的影响。
(2)正确方法:
鉴于错误方法的思想,可以考虑到利用计算机最基本的绘制像素宽度直线的算法,这样可以解决抽样点选择问题。方法很多种,基本思想都是基于以上三种算法。
4. 用数值微分法(硬件上考虑其他算法)
y(i+1) =k * x(i+1) + b
= k * (x(i) + △x) + b
= k * x(i) + k * △x + b
= y(i) + k * △x
当△x = 1时,有y(i+1) = y(i) + k,即x每增1时,y递增k(斜率)
注意问题:
以上是当|k| <= 1时成立,即x++, y += k;当|k| > 1时,x,y的地位要交换,即y++,
x += (1/k)。