类似地,参考图3C,对于pizza slice 310中的每个对角像素,可以在剩余的三个象限中识别对称的其他三个对角像素,并且它们的范数与320中的对角像素的范数相同。例如,参考pizza slice 310中(2,2)处的对角像素与其余三个象限中(−2,2、(−2、−2)、(2,−2)处对称的其他三个对角像素。由于(2,2)处对角像素的平方范数为8,所以(−2,2,(−2),(−1,−2)和(2,−2,−3)处对称的其他对角像素的均方范数同样为8。
在一个实施例中,在感兴趣区域中按其规范排序的像素被存储在查找表中。图4A示出了完整查找表400A的示例,所述完整查找表包含在感兴趣区域中按其规范排序的像素序列。
如图所示,平方范数为0的(0,0)中心像素列为第一个像素,而平方范数为1的(1,0)、(0,1)、(−1,1)和(0,−1)的轴向像素则列为下一组像素;平方范数为2的(1,1)、(-1,1),(-1,-1)和(1,-1)的对角像素列为下一组像素,依此类推。
值得注意的是,完整查找表的大小与特征提取应用的最大感兴趣区域的大小成比例。例如,如果最大感兴趣区域是50×50以提取特征,则完整查找表只需要记录50×50边界内的像素。
作为另一个例子,最大感兴趣区域是100×100以提取特征,完整的查找表需要记录100×100边界内的像素。
一组对称像素具有相同的范数,并且它们在完整查找表400A中彼此相邻地列出。例如,平方范数为1、(1,0)、(0,1)、(−1,1)和(0,−1)的对称轴点彼此相邻。平方范数为2、(1,1)、(−1,2)、(-1,1)和(1,−1)的对称对角点彼此相邻,这是冗余的,占用了更多的存储空间。
在一个实施例中,只有pizza slice的像素记录在缩减查找表中。然后,计算系统110配置为计算剩余pizza slice中的其他对称像素。图4B示出了基于其规范仅记录参考pizza slice中的像素的简化查找表400B的示例。
如图所示,范数为0的位于(0,0)的中心像素列为第一像素,范数为1的位于(1,0)的轴向像素列作为第二像素,范数平方为2的位于(2,1)的对角线像素列第三像素,依此类推。渐进地,对于相同大小的感兴趣区域,缩减查找表400B比完整查找表400A节省了八倍的存储空间。
在一个实施例中,简化查找表同时配置为记录像素的位置。图4C示出了简化查找表400C的示例,所述简化查找表不仅如图4B所示记录参考pizza slice中的像素,而且记录每个像素是位于y=x还是y=0线上。
如图所示,表400C包括两个附加列“y=x”和“y=0”,每个列对应于布尔值。如果点位于直线y=x上,则其对应的布尔值为True;否则,其对应的布尔值为False。类似地,如果点位于直线y=0上,则其对应的布尔值为True;否则,其对应的布尔值为False。
值得注意的是,当“y=x”和“y=0”都为True时,像素点是中心点;当“y=x”为假且“y=0”为True时,像素点为轴点;当“y=x”为真且“y=0”为False时,像素点为对角点;当“y=x”和“y=0”都为False时,像素点是内部点。这样,像素的位置可以由两个布尔值表示。布尔值可以预先计算并存储在简化查找表400C中。
因此,计算系统110不需要每次遍历时检查像素的位置。计算系统110可以简单地检索存储在表400C中的像素的布尔值,并基于检索到的像素位置执行对称变换。
一旦生成了查找表400A、400B或400C,计算系统110配置为基于记录在查找表400B、400C中的像素序列遍历感兴趣区域中的每个像素,并确定其是否是局部特征。图5A-5E示出了在螺旋序列中遍历感兴趣区域中的每个像素的示例,其可以从完整或缩减的查找表(例如,查找表400A、400B或400C)获得。
在一个实施例中,计算系统110配置为简单地遵循完整查找表400A中的每个像素坐标(例如,(x,y)坐标),并遍历感兴趣区域中的每一个像素。在另一实施例中,对于缩减查找表400B或400C中的每个像素,计算系统110被配置为通过对称变换来识别其他对称像素,并以逆时针、顺时针、任何其他预定义序列或随机序列遍历它们。