使用矩不变量匹配图像
在图像模式匹配中,可以使用图像矩不变量进行形态匹配,具体如下:
1 图像的矩
图像的(p + q)阶矩可表示为 ,
当同一图像发生平移后,除了 保持不变,其他高阶矩均会发生改变,为了使图像矩的平移不变,需要引入中心矩。
使用以下公式 可得到图像中心,
图像中心矩可表示为 。
图像中心矩与图像矩之间存在一个固定的关系,在时间计算中,一般可以遍历图像以求解到图像矩,
然后根据中心矩与矩之间的关系可直接计算出中心矩形,公式如下:
当同一图像发生缩放变化后,所有中心矩都发生了改变,为了保持缩放不变性,需要引入归一化中心矩。
定义 可对中心矩归一化。
opencv 提供了函数 Moments moments(InputArray array, bool binaryImage=false ) 求解图像矩, 参数 array 可以是二值图像, vector<Point>, N*1 双通道Mat。
返回值 Moments 为一个结构体,定义如下
class Moments
{
public:
double m00, m10, m01, m20, m11, m02, m30, m21, m12, m03;
double mu20, mu11, mu02, mu30, mu21, mu12, mu03;
double nu20, nu11, nu02, nu30, nu21, nu12, nu03;
}
2 旋转不变性
归一化中心矩可以达到平移,缩放不变性,但对于同一图像做任意旋转,归一化中心矩无法满足旋转不变性。
1) 代数不变量
对于二项式 ,对变量 x,y 做旋转变换 ,
得到 ,满足 。
因此, 二项式满足严格的旋转不变性,即代数不变量。
2)矩不变量
根据代数不变量性质,归一化图像中心矩为变量x,y的多项式表达,如果可以构造出类似二项式表达式,则该表达式满足旋转不变性。
MING-KUEI HU 在归一化中心矩基础构造出了7个hu矩以满足旋转不变量,具体如下:
opencv 提供了函数 void HuMoments(const Moments& moments, double hu[7]) 函数来计算7个HU矩,
通过比较各个形状对应的HU矩,可以对相似形状进行匹配。
参考资料 Learning OpenCV 3 Adrian Kaehler & Gary Bradski
Visual Pattern Recognition by Moment Invariants MING-KUEI HU
原文地址:https://www.cnblogs.com/luofeiju/p/15214691.html
- select自定义小三角样式
- 一个非常好用的文字滚动的案例,鼠标悬浮可暂停
- localstorage和sessionstorage上手使用记录
- jquery升级到新版本报错[jQuery] Cannot read property ‘msie’ of undefined错误的解决方法(转)
- thinphp框架的项目svn重新检出后的必备配置
- 对事件委托绑定click的事件的解绑
- 免杀后门之MSF&Veil-Evasion的完美结合
- 【52ABP实战教程】0.3-- 从GitHub推送代码回VSTS实现双向同步
- css绝对定位如何在不同分辨率下的电脑正常显示定位位置?
- nvm安装node和npm,个人踩坑记录
- clang_intprt_t类型探究
- 学习zepto.js(Hello World)
- JS中函数声明与函数表达式的异同
- [技巧]看我如何通过Weeman+Ettercap拿下路由器管理权限
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- java如何将String转换为Int
- java中如何将数组转换为List
- 从一个多层嵌套循环中直接跳出
- 如何给3个布尔变量,当其中有2个或者2个以上为true才返回true
- 比较java枚举成员使用equal还是==
- java如何将String转换为enum
- Markdown极简入门教程(1)—为什么要学习Markdown
- Markdown极简入门教程(2)—斜体和粗体
- 标题—Markdown极简入门教程(3)
- 链接—Markdown极简入门教程(4)
- 某企业授权渗透报告
- 图片—Markdown极简入门教程(5)
- 列表—Markdown极简入门教程(7)
- 段落—Markdown极简入门教程(8)
- 开闭原则