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. ~分隔目标和 ...
随机推荐
- 控制台手动编译Qt5程序
转自:http://www.cnblogs.com/csulennon/p/4479236.html 在上一篇随笔中已经搭建好了Qt5的的开发环境,并且通过Qt Creator自动构建了一个视窗程序. ...
- fatal: Could not read from remote repository.的解决办法
1. git remote –v查看远端地址或者查看配置 git config –list 2. git status 3. git add . git status git commit -m “本 ...
- 1、MVC和EF中的 Model First 和 Code First
准备:先引入MVC和EF的dll包 *命令方法:打开工具——库程序包管理器——程序包管理器控制台,选择自己的项目 a) Install-Package EntityFramework -Ver ...
- 关于变量和函数前&符号的作用
首先看一下下面的例子 <?php $a="val1"; $b="val2"; $a=&$b; echo $a."<br/>& ...
- HDU 1237
http://acm.hdu.edu.cn/showproblem.php?pid=1237 表达式计算,方法是中缀转后缀,再计算.中间处理用栈操作 讲解看http://blog.csdn.net/a ...
- Win10/UWP开发—使用Cortana语音与App后台Service交互
上篇文章中我们介绍了使用Cortana调用前台App,不熟悉的移步到:Win10/UWP开发—使用Cortana语音指令与App的前台交互,这篇我们讲讲如何使用Cortana调用App的后台任务,相比 ...
- ORA-20000 ORU-10027 buffer overflow limit of 2000 bytes
这是在pl/sql中执行存储过程报的错,原因是serveroutput限制存储, 解决方案:set serveroutput on size 10000000;
- MySQL 性能调优之查询优化
见原文: http://www.cnblogs.com/markjiao/p/5665775.html
- 安装 modelsim 10.4
安装教程: http://jingyan.baidu.com/article/da1091fb30d880027849d63a.html 在安装的过程中出现cmd乱(即在输入页面上停留字符),还有吱吱 ...
- 将程序部署到weblogic出现乱码问题
出现错误: 将文件部署到weblogic上,在linux环境下运行程序时出现乱码问题 原因: (1)可能是linux系统的编码问题 解决办法:登陆weblogic 输入命令: cd /etc/sysc ...