博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【图像算法】图像特征:几何不变矩--Hu矩
阅读量:5023 次
发布时间:2019-06-12

本文共 2941 字,大约阅读时间需要 9 分钟。

-------------------------------------------------------------------------------------------------------------------------------

【图像算法】图像特征:几何不变矩--Hu矩

      SkySeraph July 19th 2011  HQU

Email:    QQ:452728574

Latest Modified Date:July 19th 2011 HQU

-------------------------------------------------------------------------------------------------------------------------------

一 原理

    几何矩是由Hu(Visual pattern recognition by moment invariants)1962年提出的,具有平移、旋转和尺度不变性。 定义如下:

① (p+q)阶不变矩定义

② 对于数字图像,离散化,定义为

 

③ 归一化中心矩定义

 

④Hu矩定义

 

 

 

-------------------------------------------------------------------------------------------------------------------------------

二 实现(源码)

View Code
1 //#################################################################################//  2 double M[7] = {
0}; //HU不变矩 3 bool HuMoment(IplImage* img) 4 {
5 int bmpWidth = img->width; 6 int bmpHeight = img->height; 7 int bmpStep = img->widthStep; 8 int bmpChannels = img->nChannels; 9 uchar*pBmpBuf = (uchar*)img->imageData; 10 11 double m00=0,m11=0,m20=0,m02=0,m30=0,m03=0,m12=0,m21=0; //中心矩 12 double x0=0,y0=0; //计算中心距时所使用的临时变量(x-x') 13 double u20=0,u02=0,u11=0,u30=0,u03=0,u12=0,u21=0;//规范化后的中心矩 14 //double M[7]; //HU不变矩 15 double t1=0,t2=0,t3=0,t4=0,t5=0;//临时变量, 16 //double Center_x=0,Center_y=0;//重心 17 int Center_x=0,Center_y=0;//重心 18 int i,j; //循环变量 19 20 // 获得图像的区域重心(普通矩) 21 double s10=0,s01=0,s00=0; //0阶矩和1阶矩 22 for(j=0;j

②调用OpenCV方法

1 //  利用OpenCV函数求7个Hu矩 2     CvMoments moments; 3     CvHuMoments hu; 4     cvMoments(bkImgEdge,&moments,0); 5     cvGetHuMoments(&moments, &hu); 6     cout<
<<"/"<
<<"/"<
<<"/"<
<<"/"<
<<"/"<
<<"/"<
<<"/"<<"/"<

-------------------------------------------------------------------------------------------------------------------------------

三 相似性准则

①法一

//  计算相似度1 double dbR =0; //相似度 double dSigmaST =0; double dSigmaS =0; double dSigmaT =0; double temp =0;      {
for(int i=0;i<7;i++) {
temp = fabs(Sa[i]*Ta[i]); dSigmaST+=temp; dSigmaS+=pow(Sa[i],2); dSigmaT+=pow(Ta[i],2); }} dbR = dSigmaST/(sqrt(dSigmaS)*sqrt(dSigmaT));

②法二 

1 //  计算相似度2  2 double dbR2 =0; //相似度  3 double temp2 =0;  4 double temp3 =0;   5     {
for(int i=0;i<7;i++) 6 {
7 temp2 += fabs(Sa[i]-Ta[i]); 8 temp3 += fabs(Sa[i]+Ta[i]); 9 }} 10 dbR2 =1- (temp2*1.0)/(temp3);

-------------------------------------------------------------------------------------------------------------------------------

 

Author:        

 

Email/GTalk:    QQ:452728574

 

From:        

 

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.

 

 -------------------------------------------------------------------------------------------------------------------------------

 

转载于:https://www.cnblogs.com/skyseraph/archive/2011/07/19/2110183.html

你可能感兴趣的文章
Objective-C 使用 C++类
查看>>
浅谈之高级查询over(partition by)
查看>>
Notes: CRM Analytics–BI from a CRM perspective (2)
查看>>
graphite custom functions
查看>>
列出所有的属性键
查看>>
js获取请求地址后面带的参数
查看>>
[原创]使用java批量修改文件编码(ANSI-->UTF-8)
查看>>
设计模式のCompositePattern(组合模式)----结构模式
查看>>
二进制集合枚举子集
查看>>
磁盘管理
查看>>
SAS学习经验总结分享:篇二—input语句
查看>>
UIImage与UIColor互转
查看>>
RotateAnimation详解
查看>>
系统管理玩玩Windows Azure
查看>>
c#匿名方法
查看>>
如何判断链表是否有环
查看>>
【小程序】缓存
查看>>
ssh无密码登陆屌丝指南
查看>>
MySQL锁之三:MySQL的共享锁与排它锁编码演示
查看>>
docker常用命令详解
查看>>