花了一上午的时间把 Census Transform 用 C 给实现了一遍,目前实现的版本按照窗口大小的不同有 3 个版本,3×3,、5×5 以及 9×7 的版本,3×3 的版本最终生成的 bit string 长度为 8 个字位,正好为 1 个字节,可以用一个 opencv 定义的 uchar 类型来表示,5×5 版本的 bit string 则为 24 个字位,3 个字节,因此只能用 4 个字节的数据类型来表示,目前选用的是 MS 的 UINT,最后 9×7 版本的 bit string 为 62 个字位,得用 8 个字节的数据类型表示,一开始理所当然的以为可以选用 double 类型,因为 double 正好 8 个字节,但是由于生成 census transform bit string 的过程中要用到移位的操作,而移位操作只能在整型数据类型上进行,因此最后选用了 opencv 定义的 uint64 类型。下面附上计算 5×5 窗口 census transform bit string 的函数:
两个 census transform bit string 之间的相似性是通过 Hamming distance 来表征的,计算 hamming distance 的 C 实现在 wikipedia 上面就有,http://en.wikipedia.org/wiki/Hamming_distance,是 Wegner 1960 年提出的方法,其运算量和最终的 hamming distance 大小成比例,而不是和 bit string 的长度成比例,函数如下:
没有评论:
发表评论