MSER算法介绍
图像I为一个映射 . 极值区域在图像上的定义为:
1. S是全序的,例如存在满足自反性,反对称性和传递性的二元关系“小于等于”。论文里考虑到的范围仅是S={0,1,2,...,255},但是极值区域可以被定义在实值图像上(S=R)。

4 2 2 4 2 1 4
4 2 2 4 1 2 4
4 3 3 4 3 3 4
4 2 2 4 4 3 4
4 1 1 4 3 4
4 4 4 4 4 4 4
ner: 0. value:1,area: 2, parent: 3
ner: 1. value:1,area: 2, parent: 4
ner: 2. value:2,area: 4, parent: 5
ner: 3. value:2,area: 5, parent: 5
ner: 4. value:2,area: 4, parent: 6
ner: 5. value:3,area: 11, parent: 7
ner: 6. value:3,area: 8, parent: 7
ner: 7. value:4,area: 49, parent: 7
1 3 3 2 3 4 1
1 3 3 2 3 4 1
1 1 1 1 1 3 1
1 3 4 2 1 1 1
1 4 3 2 2 2 1
1 1 1 1 1 1 1
ner: 1. value:2,area: 36, parent: 2
ner: 2. value:3,area: 45, parent: 3
ner: 3. value:4,area: 49, parent: 3
{
1.弹出当前像素的索引和值
2.将邻结点的索引指向当前索引
3.将当前像素结点插入到树中
4.while(依次处理以该像素为中心的8邻域像素)
{
a.邻域像素在图像边界以内
b.邻域像素不是自身
c.邻域像素已经在树中了,也就是说这个像素已经被处理过了
if(满足a,b,c)
{
1.将当前此节点,以及当前此节点的上一层父节点,..., 直到根节点的所有链路节点的shortcut都置为根节点
2.将此邻域节点,以及此邻域节点的上一层父节点,..., 直到根节点的所有链路节点的shortcut都置为根节点
i. 如果当前节点的根节点等于邻域像素的根节点,这种情况下两个树已经加入了同一个树当中了
ii. 如果当前节点的根节点的亮度等于邻域像素的根节点的亮度,此种情况索引将被扩展到具有相同亮度的一个极值区域,因为邻域像素的根节点不会是整个图像的一个极值区域;当前索引的根节点能够安全的被添加到邻域像素的根节点作为邻域像素的孩子结点。
iii.如果当前节点的根节点的亮度大于邻域像素的根节点的亮度并且当前节点是一个极值区域,这时仅仅增加它的层数。这种情况下邻域像素根节点将会是最终整个图像的一个极值区域并且只有唯一的可能性作为添加到当前像素所属的树中当前像素的孩子
}
}
}



/* -----------------------------------------------------------------
* Fit ellipses
* -------------------------------------------------------------- */
ell_pt = ;
if (nout >= ) {
int midx = ;
int d, index, j ; verbose && mexPrintf("Fitting ellipses...\n") ; /* enumerate maxstable regions */
for(i = ; i < ner ; ++i) {
if(! regions_pt [i].maxstable) continue ;
regions_pt [i].maxstable = midx++ ;
} /* allocate space */
acc_pt = mxMalloc(sizeof(acc_t) * nel) ;
ell_pt = mxMalloc(sizeof(acc_t) * gdl * nmer) ; /* clear accumulators */
memset(ell_pt, , sizeof(int) * gdl * nmer) ;
for(index = ; index < nel ; ++ index){
mexPrintf("%d\t",joins_pt[index]) ;
if( == (index+)%dims[]) mexPrintf("\n");
} for(index = ; index < nel ; ++ index){
mexPrintf("%d\t",forest_pt [ index ].parent) ;
if( == (index+)%dims[]) mexPrintf("\n");
} /* for each gdl */
for(d = ; d < gdl ; ++d) {
/* initalize parameter */
memset(subs_pt, , sizeof(int) * ndims) ; //注意这里的0和1下标不是0阶矩和1阶矩,而是表示X和Y之间的均值,相关系数
//例如(0,0)表示corr(X,X), (0,1)表示corr(X,Y),(1,0)表示corr(Y,X),(1,1)表示corr(Y,Y)不要搞混!!! by frisch
if(d < ndims) {
//图像每个像素的行[0], 列坐标[1]坐标, x方向和y方向的均值,by frisch
verbose && mexPrintf(" mean %d\n",d) ;
for(index = ; index < nel ; ++ index) {
acc_pt[index] = subs_pt[d] ;
adv(dims, ndims, subs_pt) ; } } else { //图像每个像素的行[0], 列坐标[1]的相关度计算, by frisch
//corr[0,0](行与行), corr[1,0](行与列), corr[0,1](列与行), corr[1,1](列与列), by frisch
/* decode d-ndims into a (i,j) pair */
i = d-ndims ;
j = ;
while(i > j) {
i -= j + ;
j ++ ;
} verbose && mexPrintf(" corr (%d,%d)\n",i,j) ; /* add x_i * x_j */
//计算相关值,将其放入二维数组
for(index = ; index < nel ; ++ index){
acc_pt[index] = subs_pt[i]*subs_pt[j] ;
mexPrintf("(%d\t%d\t)",subs_pt[i],subs_pt[j]) ;
if( == (index+)%dims[]) mexPrintf("\n");
adv(dims, ndims, subs_pt) ;
}
} for(index = ; index < nel ; ++ index){
mexPrintf("%d\t",acc_pt[index]) ;
if( == (index+)%dims[]) mexPrintf("\n");
} /* integrate parameter */
//对每个区域进行均值或者相关值积分,by frisch
for(i = ; i < njoins ; ++i) {
idx_t index = joins_pt[i] ;
idx_t parent = forest_pt [ index ].parent ;
acc_pt[parent] += acc_pt[index] ;
} /* save back to ellpises */
//保存椭圆参数, 五个参数(包含椭圆的中心点,长短轴幅值,方向向量) by frisch
for(i = ; i < ner ; ++i) {
idx_t region = regions_pt [i].maxstable ; /* skip if not extremal region */
if(region-- == ) continue ;
ell_pt [d + gdl*region] = acc_pt [ regions_pt[i].index ] ;
} /* next gdl */
}
mxFree(acc_pt) ;
}
MSER算法介绍的更多相关文章
- 【原创】机器学习之PageRank算法应用与C#实现(1)算法介绍
考虑到知识的复杂性,连续性,将本算法及应用分为3篇文章,请关注,将在本月逐步发表. 1.机器学习之PageRank算法应用与C#实现(1)算法介绍 2.机器学习之PageRank算法应用与C#实现(2 ...
- KNN算法介绍
KNN算法全名为k-Nearest Neighbor,就是K最近邻的意思. 算法描述 KNN是一种分类算法,其基本思想是采用测量不同特征值之间的距离方法进行分类. 算法过程如下: 1.准备样本数据集( ...
- ISP基本框架及算法介绍
什么是ISP,他的工作原理是怎样的? ISP是Image Signal Processor的缩写,全称是影像处理器.在相机成像的整个环节中,它负责接收感光元件(Sensor)的原始信号数据,可以理解为 ...
- Python之常见算法介绍
一.算法介绍 1. 算法是什么 算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制.也就是说,能够对一定规范的输入,在有限时间内获得所要求的输 ...
- RETE算法介绍
RETE算法介绍一. rete概述Rete算法是一种前向规则快速匹配算法,其匹配速度与规则数目无关.Rete是拉丁文,对应英文是net,也就是网络.Rete算法通过形成一个rete网络进行模式匹配,利 ...
- H2O中的随机森林算法介绍及其项目实战(python实现)
H2O中的随机森林算法介绍及其项目实战(python实现) 包的引入:from h2o.estimators.random_forest import H2ORandomForestEstimator ...
- STL 算法介绍
STL 算法介绍 算法概述 算法部分主要由头文件<algorithm>,<numeric>和<functional>组成. <algorithm ...
- Levenshtein字符串距离算法介绍
Levenshtein字符串距离算法介绍 文/开发部 Dimmacro KMP完全匹配算法和 Levenshtein相似度匹配算法是模糊查找匹配字符串中最经典的算法,配合近期技术栏目关于算法的探讨,上 ...
- 机器学习概念之特征选择(Feature selection)之RFormula算法介绍
不多说,直接上干货! RFormula算法介绍: RFormula通过R模型公式来选择列.支持R操作中的部分操作,包括‘~’, ‘.’, ‘:’, ‘+’以及‘-‘,基本操作如下: 1. ~分隔目标和 ...
随机推荐
- sis9280触摸ic 基于rk3288 的安卓4.4的 多点触摸
前言:sis提供的驱动ic.基于rk3288的安卓系统.亲眼看到人家完成一次移植.很激动的记下一些东西..虽然我看不懂.其实现在的工作也不需要看懂.叫人协助就好,只需要知道有这个东西. 1linux下 ...
- Python学习路程day15
Python之路[第十五篇]:Web框架 Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/en ...
- 将IIS6.0中的某页设置成首页
- Varnish常用相关命令工具
varnishd启动./varnishd -f /usr/local/varnish-3.0.2/etc/varnish/default.vcl -s malloc,1G -T 127.0.0.1: ...
- j2ee学习资料收集
1 tomcat web.xml加载顺序, 讲解了web.xml什么时候加载,内部的各个组件加载的顺序 http://blog.sina.com.cn/s/blog_4553489c01010 ...
- AC中保存数据与查询数据
//保存数据 hui.ajax(function (ret, err) { }, url, {values: {t:"test",m:"Search",c:&q ...
- Ubuntu 使用Cisco VPN、AnyConnect、OpenConnect的方法。
自己建的廉价Shadowsocks服务器总是不稳定,众所周知,PPTP在中国大陆已经废了.为了连接外网,所以购买了BlueCloud的VPN.但是他们家的VPN是使用Cisco VPN,可以使用Any ...
- Draw_extend使用OpenGL显示数据点
//alter load_map.dev //safety verion 2016/1/12 #include <iostream> #include <fstream> #i ...
- Kruskal算法
1.基本思想:设无向连通网为G=(V, E),令G的最小生成树为T=(U, TE),其初态为U=V,TE={ },然后,按照边的权值由小到大的顺序,考察G的边集E中的各条边.若被考察的边的两个顶点属于 ...
- AMD系统中,virtualbox 不能为虚拟电脑打开一个新任务
我的电脑装的Genymotion,之前开发Andriod4.4版本的时候在Genymotion上都可以运行,可是开发Andriod5.0+的时候,Genymotion就不能运行了,究其原因,原来是Vi ...