在CSDN论坛上闲逛,碰到http://topic.csdn.net/u/20120411/07/d7d8bd3a-5fe7-4570-9dd4-44321de0b82c.html
遇到的问题,下面就详细介绍一下cvMatchShape的含义以及用法
使用Hu矩进行匹配:
double cvMatchShapes(
const void* object1,
const void* object2,
int method,
double parameter = 0
);
这个函数的
第一个参数为待匹配的物体1
第二个参数为待匹配的物体2
第三个参数为匹配所使用的方法
总共有三种匹配方法
其中
上式中是物体1和物体2的hu矩
那么何为hu矩呢?
Hu矩
感谢http://blog.csdn.net/wrj19860202/article/details/6327094他给我们做的介绍,这里引用了他的文章
在连续情况下,图像函数为 ,那么图像的
(1)标准矩(p+q阶几何矩)
其定义为:
(2)p+q阶中心距
其定义为:
其中 和 代表图像的重心,
那么如果是数字图像的话,则需要使用其离散形式,采用求和号代替积分:
则
(1)标准矩:
(2)p+q阶中心距:
和 分别是图像的高度和宽度;
(3)归一化的中心距
其定义为:
;其中
利用二阶和三阶归一化中心矩构造了7个不变矩 :
这7个不变矩构成一组特征量,Hu.M.K在1962年证明了他们具有旋转,缩放和平移不变性。
实际上,在对图片中物体的识别过程中,只有 和 不变性保持的比较好,其他的几个不变矩带来的误差比较大,有学者认为只有基于二阶矩的不变矩对二维物体的描述才是真正的具有旋转、缩放和平移不变性(和 刚好都是由二阶矩组成的)。不过我没有证明是否是真的事这样的。
由Hu矩组成的特征量对图片进行识别,优点就是速度很快,缺点是识别率比较低,我做过手势识别,对于已经分割好的手势轮廓图,识别率也就30%左右,对于纹理比较丰富的图片,识别率更是不堪入眼,只有10%左右。这一部分原因是由于Hu不变矩只用到低阶矩(最多也就用到三阶矩),对于图像的细节未能很好的描述出来,导致对图像的描述不够完整。
Hu不变矩一般用来识别图像中大的物体,对于物体的形状描述得比较好,图像的纹理特征不能太复杂,像识别水果的形状,或者对于车牌中的简单字符的识别效果会相对好一些。
补充:得分越低说明越好,下面我给出一个测试的代码(vs2005,已经附带并配置好库文件位置和包含的头文件,只需要安装vs即可)
下载地址:http://download.csdn.net/detail/xizero00/5008369
这下应该好理解了吧....Mark