opencv 中将 MSER 修改成 Hierarchical MSER 方法

article/2025/9/13 1:35:42


http://code.opencv.org/issues/1577


描述

I attach a patch implementing the Hierarchical MSER. It extends the OpenCV MSER implementation to return the underlying component tree used by the MSER algorithm.

The tree is returned in the CvSeq tree fields (h_next, h_prev, v_next, v_prev) which were previously unused. The result of the algorithm is expanded by these fields, producing otherwise the same output as before.

There is no performance penalty as the component tree is already constructed by the MSER algorithm. This patch just exposes this information.

Two patches are attached: mser-hierarchical.patch and mser-hierarchical-c++.patch. The second one provides a C++ interface for retrieving the tree, equivalent to the one returned by cv::findContours().

A test program that draws the tree and an example output is also provided. Darker regions are closer to the root of the tree.


Hierarchical MSER is introduced in this paper:

Carlos Merino-Gracia, Karel Lenc and Majid Mirmehdi. _A Head-mounted Device for Recognizing Text in Natural Scenes. InCBDAR 2011.


mser-hierarchical.patch(2.2 KB) uganson -, 2012-02-01 18:23

original.jpg(155.6 KB) uganson -, 2012-02-01 18:24

test-mser-hierarchical.cpp(1.8 KB) uganson -, 2012-02-01 18:25

result.jpg(180.1 KB) uganson -, 2012-02-01 18:27


//

使用和制作patch文件


创建补丁文件:


CODE:

diff -Naur 旧的目录 新的目录 > patch文件
或者
diff -Naur 旧的文件 新的文件 > patch文件

对于目录层数的一些限制


在创建patch的时候文件夹的层数应当是一样的,比如

CODE:

--- old/modules/pcitableMon Sep 27 11:03:56 1999
+++ new/modules/pcitableTue Dec 19 20:05:41 2000

这样是可以的。



CODE:

--- old/try1/other/modules/pcitableMon Sep 27 11:03:56 1999
+++ new/modules/pcitableTue Dec 19 20:05:41 2000

这样做可能会有一些问题。


如何使用patch
对于一个patch文件,有两种常用使用方法:
1.

CODE:

cat new-patch | patch -p02.

2、

CODE:

patch -p0 < new-patch

patch命令里面的层数(-p0?-p1?)
参数-p来指定从第几层开始比较。比如有一个patch文件的补丁头是这样的:

CODE:

--- old/modules/pcitableMon Sep 27 11:03:56 1999
+++ new/modules/pcitableTue Dec 19 20:05:41 2000


如果使用参数-p0,就表示从当前目录,找一个叫作new的目录,在它下面找一个叫modules的目录,再在它下面找一个叫pcitableMon的目录。
如果使用参数-p1,就表示忽略第一层,从当前目录找一个叫modules的目录,在它下面找一个叫modules的目录。这样会忽略掉补丁头提到的new目录。
依此类推。

patch文件的结构
补丁头
补丁头是分别由---/+++开头的两行,用来表示要打补丁的文件。
一个补丁文件中的多个补丁
一个补丁文件中可能包含以---/+++开头的很多节,每一节用来打一个补丁。所以在一个补丁文件中可以包含好多个补丁。

块是补丁中要修改的地方。它通常由一部分不用修改的东西开始和结束。他们只是用来表示要修改的位置。他们通常以@@开始,结束于另一个块的开始或者一个新的补丁头。
块的缩进
块会缩进一列,而这一列是用来表示这一行是要增加还是要删除的。
块的第一列
+号表示这一行是要加上的。
-号表示这一行是要删除的。
没有加号也没有减号表示这里只是引用的而不需要修改。

一个patch的例子

CODE:

diff -u old/modules/pcitable new/modules/pcitable
--- old/modules/pcitableMon Sep 27 11:03:56 1999
+++ new/modules/pcitableTue Dec 19 20:05:41 2000
@@ -1,4 +1,6 @@
0x0e110xae10"cpqarray""Compaq|Smart-2/P RAID Controller"
+0x10000x0010"cpqarray""Compaq|Integrated Array Controller"
+0x10110x0046"cpqarray""Compaq|Smart-2/P RAID Controller"
0x0e110xae32"tlan""Compaq|Netelligent 10/100"
0x0e110xae34"tlan""Compaq|Netelligent 10"
0x0e110xae35"tlan""Compaq|Integrated NetFlex-3/P"
@@ -21,6 +23,7 @@
0x10000x000f"ncr53c8xx""Symbios|53c875"
0x10000x0012"ncr53c8xx""Symbios|53c895a"
0x10000x008f"ncr53c8xx""Symbios|53c875J"
+0x10000x000a"sym53c8xx""Symbios|53c1510"
0x10000x0701"yellowfin""Symbios|83C885 gigabit ethernet"
0x10000x0702"yellowfin""Symbios|Yellowfin G-NIC gigabit ethernet"
0x10110x0001"tulip""DEC|DECchip 21050"
--- old/usr/share/kudzu/pcitableSun Sep 26 17:11:23 1999
+++ new/usr/share/kudzu/pcitableTue Dec 19 20:05:41 2000
@@ -15,6 +15,8 @@
0x0e110x3034"unknown""Compaq|QVision 1280/p"
0x0e110x4000"unknown""Compaq|4000 [Triflex]"
0x0e110xa0f3"ignore""Compaq|Triflex PCI to ISA Bridge"
+0x10000x0010"cpqarray""Compaq|Integrated Array Controller"
+0x10110x0046"cpqarray""Compaq|Smart-2/P RAID Controller"
0x0e110xae10"cpqarray""Compaq|Smart-2/P RAID Controller"
0x0e110xae29"unknown""Compaq|MIS-L"
0x0e110xae2a"unknown""Compaq|MPC"
@@ -46,6 +48,7 @@
0x10000x000f"ncr53c8xx""Symbios|53c875"
0x10000x0012"ncr53c8xx""Symbios|53c895a"
0x10000x008f"ncr53c8xx""Symbios|53c875J"
+0x10000x000a"sym53c8xx""Symbios|53c1510"
0x10000x0701"yellowfin""Symbios|83C885 gigabit ethernet"
0x10000x0702"yellowfin""Symbios|Yellowfin G-NIC gigabit ethernet"
0x10000x0901"unknown""Symbios|61C102"

分析
这个例子是由命令

CODE:

diff -u old/modules/pcitable new/modules/pcitable

创建的。不过最好是用命令diff -Naur来代替diff -u。
它修改了两个文件,new/modules/pcitable和new/usr/share/kudzu/pcitable。
第一个补丁头包含两个块,分别增加了两行和一行。

这个是参考了这篇文http://www.cpqlinux.com/patch.html来总结翻译。由于刚刚接触这些东西,很多地方可能翻译的不恰当,尤其是一些术语,如有发现问题,请给我留言说明,以便我来改正,谢谢。


//


相关的问题 (新增)



http://chatgpt.dhexx.cn/article/faFJXUhh.shtml

相关文章

OpenCV实践之MSER/MSCR极值区域检测算法

MSER/MSCR极值区域检测算法 OpenCV中features2d.hpp中MSER类接口实现了MSER极值区域检测算法&#xff0c;MSER类根据输入参数判断是否为彩色or灰度图像进行不同的算法检测。若输入为灰度图像&#xff0c;那么采取MSER极值区域检测算法&#xff0c;若输入为彩色图像&#xff0c;…

MSER仿射不变特征匹配算法

MSER原理简述 个人博客 OpenCV实践之MSER仿射匹配算法 已更新讲述MSER仿射匹配算法代码      区域检测(Region Detection)方法是根据图像中具有某种同类性质的像元进行分类(例如相同像素值大小的点),然后把具有相同性质的像元合并成区域,实现区域的检测即图像分割。MSER…

OpenCV用MSER 算法提取特征区域

计算图像 MSER 的基础类是 cv::MSER&#xff0c;继承自 cv::Feature2D 类&#xff0c;cv::MSER 类的实例可以通过create 方法创建。我们在初始化时指定被检测区域的最小和最大尺寸&#xff0c;以便限制被检测特征的数量&#xff0c;调用方式如下&#xff1a; cv::Ptr<cv::M…

车牌定位之MSER — 文本检测

最大稳定极值区域&#xff08;MSER-Maximally Stable Extremal Regions&#xff09;可以用于图像的斑点区域检测。它是基于分水岭的概念。 SIFT和SURF算法高效实现了具有尺度和旋转不变性的特征检测&#xff0c;但这些特征不具有仿射不变性。区域检测针对各种不同形状的图像区域…

图像局部特征(十四)--MSER特征

原文: http://blog.csdn.net/zhaocj/article/details/40742191 最大稳定极值区域&#xff08;MSER-Maximally Stable Extremal Regions&#xff09;可以用于图像的斑点区域检测。该算法最早是由Matas等人于2002年提出&#xff0c;它是基于分水岭的概念。 MSER的基本原理是对…

【AI实战】手把手教你深度学习文字识别(文字检测篇:基于MSER, CTPN, SegLink, EAST等方法)

文字检测是文字识别过程中的一个非常重要的环节&#xff0c;文字检测的主要目标是将图片中的文字区域位置检测出来&#xff0c;以便于进行后面的文字识别&#xff0c;只有找到了文本所在区域&#xff0c;才能对其内容进行识别。 文字检测的场景主要分为两种&#xff0c;一种是…

MSRCR

带色彩恢复的多尺度视网膜增强算法&#xff08;MSRCR&#xff09;的原理、实现及应用。 Retinex这个词是由视网膜(Retina)和大脑皮层(Cortex) 两个词组合构成的。Retinex理论主要包含了两个方面的内容&#xff1a;物体的颜色是由物体对长波、 中波和短波光线的反射能力决定的&a…

mser场景文字检测及筛选

发现很多人都用mser,swt等进行场景文字的检测&#xff0c;最近也去实现了一下&#xff0c;虽然swt较新的算法&#xff0c;但实现过程中传统的mser算法反而更稳定&#xff0c;速度也会更快&#xff0c;可能是我还没有完全领会swt的精髓。ps:暂时只做水平及水平倾斜的文字 demo …

mser python篇

之前一直在matlab上用这个函数&#xff0c;现在转移到python上面使用 ———————————————————————————————————— 1、代码 I cv2.cvtColor(I, cv2.COLOR_BGR2GRAY); mser cv2.MSER_create() regions,boxes mser.detectRegions(I) for bo…

MSER — 自然场景文本检测

MSER是最大稳定极值区域&#xff1a;是对一幅灰度图像&#xff08;灰度值为0&#xff5e;255&#xff09;取阈值进行二值化处理&#xff0c;阈值从0到255依次递增。阈值的递增类似于分水岭算法中的水面的上升&#xff0c;随着水面的上升&#xff0c;有一些较矮的丘陵会被淹没&a…

文字检测与识别1-MSER

导语 文字识别在现实场景中的用途非常广泛&#xff0c;现在已经有很多公司将这项技术用于实际中。比如车牌识别&#xff0c;图片转换成文档&#xff0c;拍照搜题&#xff0c;拍照翻译等。这让很多人有了错觉&#xff0c;感觉文字识别的技术已经炉火纯青&#xff0c;可以广泛应…

MSER常见参数

MSER用于文本检测已经成熟了&#xff0c;现简单使用来识别车牌号。 目录 MSER参数最大最小区域固定 MSER参数 默认&#xff1a;int delta 5, int min_area 60, int max_area 14400, double max_variation 0.25, double min_diversity .2 * Full constructor for %MSER d…

MSER算法

最稳定极值区域介绍 如把灰度图看成高低起伏的地形图&#xff0c;其中灰度值看成海平面高度的话&#xff0c;MSER的作用就是在灰度图中找到符合条件的坑洼。条件为坑的最小高度&#xff0c;坑的大小&#xff0c;坑的倾斜程度&#xff0c;坑中如果已有小坑时大坑与小坑的变化率…

【MSER】基于MSER算法的交通标志分割仿真

1.软件版本 MATLAB2021a 2.本算法理论知识 [1]钱坤. 基于MSER和遗传优化SVM的交通标志识别的研究[D]. 大连理工大学. [2]王斌, 常发亮, 刘春生. 基于MSER和SVM的快速交通标志检测[J]. 光电子.激光, 2016. 3.部分源码 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%…

MSER相关总结

最近做项目用到了MSER&#xff0c;特地在这做总结。 以前提到字符检测首先会想到Tesseract&#xff0c;但是tesseact对图像的二值化要求过高&#xff0c;比较适合于白底黑字的字符识别&#xff0c;对于复杂情况就无能为力了&#xff1b; 于是就想到用轮廓检测&#xff0c;这种…

最大稳定极值区域(MSER)检测

Lowe和Bay提出的SIFT和SURF算法高效实现了具有尺度和旋转不变性的特征检测&#xff0c;但这些特征不具有仿射不变性。 区域检测针对各种不同形状的图像区域&#xff0c;通过对区域的旋转和尺寸归一化&#xff0c;可以实现仿射不变性。 MSER&#xff08;Maximally Stable Extr…

MSER最稳定极值区域源码分析

最稳定极值区域介绍 如把灰度图看成高低起伏的地形图&#xff0c;其中灰度值看成海平面高度的话&#xff0c;MSER的作用就是在灰度图中找到符合条件的坑洼。条件为坑的最小高度&#xff0c;坑的大小&#xff0c;坑的倾斜程度&#xff0c;坑中如果已有小坑时大坑与小坑的变化率。…

OpenCVSharp入门教程 特征提取①——MSER区域特征提取Maximally Stable Extremal Regions

文章目录 一、前文二、特征提取流程三、界面布局四、功能实现4.1 打开图片4.2 特征提取—源码4.3 特征提取—参数讲解4.4 特征提取—Detect和DetectRegions 五、运行效果图六、发现并解决问题七、其他问题 一、前文 MSER Maximally Stable Extremal Regions 最大极值稳定区 业…

【OpenCV 例程 300篇】247. 特征检测之最大稳定极值区域(MSER)

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程 300篇】247. 特征检测之最大稳定极值区域&#xff08;MSER&#xff09; 1. 最大稳定极值区域&#xff08;MSER&#xff09; 最大稳定极值区域&#xff08;MSER-Maximally Stable Extremal Regions&#xf…

师傅带徒弟学JavaScript-关东升-专题视频课程

师傅带徒弟学JavaScript—430人已学习 课程介绍 本课程是学习Web前端的基础课程&#xff0c;是学习Web前端框架、JavaWeb开发、Python Web开发、PHP开发和.NET Web开发前置课程。 课程收益 掌握JavaScript 讲师介绍 关东升 更多讲师课程 一个在IT领域摸爬滚打20多年的老程…