当前位置: 首页 > article >正文

C#描述-计算机视觉OpenCV(7):MSER特征检测

C#描述-计算机视觉OpenCV(7):MSER特征检测

    • 基本概念
    • 操作实例
    • 效果优化

基本概念

前文C#描述-计算机视觉OpenCV(6):形态学描述了如何对图像的前后景特征形态进行检测与运算,本篇将分析基于形态的特征检测算法。MSER算法即最大稳定外部区域算法(Maximally Stable Extremal Regions),其基于分水岭的概念:对图像进行二值化,二值化阈值取[0, 255],这样二值化图像就经历一个从全黑到全白的过程(就像水位不断上升的俯瞰图)。在这个过程中,有些连通区域面积随阈值上升的变化很小,这种区域就叫MSER。。其核心思想在于通过不断改变图像的灰度阈值,寻找在不同阈值下保持稳定性的区域,这些区域往往对应着图像中的文本或其他重要信息。
我们还是以本图为例进行操作,在这个场景下,我们尝试把猫作为特征区域结果来测试。
在这里插入图片描述

操作实例

MSER 类的实例可以通过create 方法创建。我们在初始化时指定被检测区域的最小和最大尺寸,以便限制被检测特征的数量,调用方式如下::
MSER.Create(int delta, // 局部检测时使用的增量值,默认值5
int minArea, // 允许的最小面积,默认值60
int maxArea); // 允许的最大面积,默认值14400
然后我们通过DetectRegions来获得结果,结果会储存在一个点集容器和一个矩形容器:

MSER s=MSER.Create(5,5000,14400);//创建MSER检测器
OpenCvSharp.Point[][] outPoint;//点集容器
Rect[] rect;//矩形容器
s.DetectRegions(img1, out outPoint, out rect);//检测方法调用

这时候我们可以看下点集容器里的内容:

foreach(OpenCvSharp. Point[] pts in outPoint)
            {
                foreach(OpenCvSharp.Point p in pts)
                {
                    img1.Circle(p, 1, Scalar.Black);
                }
            }

在这里插入图片描述
然后我们展示矩形的特征区域:

foreach (Rect r in rect)
            {              
                        img1.Rectangle(r, Scalar.White, 2);
            }

在这里插入图片描述
可以看到我们非常粗略的检测出了一些特征。
我们可以根据效果,对大小面积进行调整,来减少或者增加检测的敏感度。

效果优化

在上面的检测中,输出的第二项是一系列矩形,画出所有矩形就能表示检测的结果。但是这样
会画出许多矩形,使结果很不直观(区域之间还会互相包含,结果更加混乱)。对此,基本的优化方法为,对矩形的形态比例设置筛选要求,例如我们排除掉所有长宽比过大或者过小的长方形,来贴合所检测物(猫)大概的形态:

foreach (Rect r in rect)
            {
                if ((double)r.Width / (double)r.Height <1.25&& (double)r.Width / (double)r.Height > 0.2)
                {  
                        img1.Rectangle(r, Scalar.White, 2);
                }
            }

效果图:
在这里插入图片描述
可以看到我们清楚的检测出了目标。
该算法还经常用于提取图片的文字区域,我们适当调小MSER创建的数值,我们取一个光线和前后景都较为复杂的图片来测试效果,
在这里插入图片描述
粗略的调整了下数值,可以看到基本对较为清晰的文字有了识别,如果继续减少局部增量值应该可以更为精确。
在这里插入图片描述


http://www.kler.cn/news/366225.html

相关文章:

  • OpenCV未定义标识符CV_XXX
  • 批处理操作的优化
  • 基于GPT的智能客服落地实践
  • Nginx、Tomcat等项目部署问题及解决方案详解
  • sharpkeys-键盘部分按键不好用,用其它不常用按键代替
  • 分布式光伏发电系统电气一次部分设计(开题报告3)
  • 安全见闻8-9
  • 超级玛丽游戏
  • SQL安全性
  • 【elkb】linux麒麟v10安装ELKB 8.8.X版本(ARM架构)
  • vscode插件live server无法在手机预览调试H5网页
  • Java中Thread类的基本认识与使用(如果想知道Java中有关Thread类的基本知识,那么只看这一篇就足够了!)
  • PostgreSQL(WINDOWS)下载、安装、简单使用
  • 软工毕设开题建议
  • 高等数学 6.2 定积分在几何学上的应用
  • 项目文章 | 药学TOP期刊PRChIP-seq助力揭示激酶LIMK2促进梗死不良重构的机制
  • 基于django的12306火车票
  • 华大去噪算法登Cell子刊封面!助力获取高质量时空转录组数据
  • 伦敦银是24小时交易吗?
  • OpenCV未定义标识符CV_XXX
  • 2024 Rust现代实用教程:1.3获取rust的库国内源以及windows下的操作
  • Flutter鸿蒙next 状态管理高级使用:深入探讨 Provider
  • XPM_CDC_SINGLE
  • XSS攻击原理与解决方法
  • PostgreSQL的学习心得和知识总结(一百五十五)|[performance]优化期间将 WHERE 子句中的 IN VALUES 替换为 ANY
  • 漏洞挖掘 | 基于mssql数据库的sql注入