点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

一、方法

二值图像几何形状提取与分离,是机器视觉中重点之一,在CT图像分析与机器人视觉感知等领域应用广泛,OpenCV中提供了一个对二值图像几何特征描述与分析最有效的工具 - SimpleBlobDetector类,使用它可以实现对二值图像几何形状的分离与分析。而它之所以强大是因为整合OpenCV中其它一些API的功能,主要是有三个:

  • 自动的图像灰度与二值化,根据输入的步长与阈值,得到半径

  • 实现了轮廓查找功能,可以查找所有轮廓,

  • 然后在此基础上基于几何矩的计算实现各种基于几何特征的过滤

在学习Blob特征检测器相关函数之前,我们首先看一下Blob几何特征过滤时候用到几何特征

面积

BLOB特征检测器可以根据面积大小对结果进行过滤,只有面积在指定范围内的几何形状才会被BLOB特征检出并标注。这样就可以通过它实现基于几何形状面积的大小分类。需要说明的是这里的面积是基于像素单位的,主要是利于几何矩进行计算得到。

圆度

圆度的公式可以表示为

  • 当C等于1时候,该形状表示一个完美的圆形

  • 当C趋近于0的时候,该形状表示接近于直线的多边形或者矩形。

  • 当C值在0.75 ~ 0.85之间的时候,多数的时候表示与矩形或者等边的多边形出现。

惯性率

惯性率是跟偏心率,圆形的偏心率等于0, 椭圆的偏心率介于0和1之间,直线的偏心率接近于0, 基于几何矩计算惯性率比计算偏心率容易,所以OpenCV选择了惯性率这个特征值,根据惯性率可以计算出来偏心率,偏心率与惯性率之间关系表示如下

凸度

表示几何形状是凸包还是凹包的度量。说白了就是可以根据参数过滤凸多边形还是凹多边形, 输入的参数一般在0~1之间,最小为0,最大为1。一般圆形多会大于0.5以上

二、演示

演示部分通过两个例子来说明BLOB特征不同用法,第一个例子通过BLOB特征检测向日葵的葵盘,第二例子通过BLOB特征检测来对几何形状进行过滤分类。

示例一 :原图

BLOB检测结果

相关的代码如下:

// 初始化BLOB参数
SimpleBlobDetector::Params params;
params.minDistBetweenBlobs = 0.0f;
params.filterByInertia = false;
params.filterByConvexity = false;
params.filterByColor = false;
params.filterByCircularity = false;
params.filterByArea = false;
// 声明根据面积过滤,设置最大与最小面积
params.filterByArea = true;
params.minArea = 20.0f;
params.maxArea = 2000.0f;
// 声明根据圆度过滤,设置最大与最小圆度
params.filterByCircularity = true;
params.minCircularity = 0.5;
params.maxCircularity = 1.0;
// 凸包形状分析 - 过滤凹包
params.filterByConvexity = true;
params.minConvexity = 0.5;
params.minConvexity = 1.0;
// 参数初始化BLOB检测器,
Ptr<SimpleBlobDetector> detector = SimpleBlobDetector::create(params);
vector<KeyPoint> keypoints;
// 检测得到特征与绘制特征
detector->detect(src, keypoints, Mat());
Mat kp_image;
drawKeypoints(src, keypoints, kp_image, Scalar(255, 0, 0), DrawMatchesFlags::DRAW_RICH_KEYPOINTS);
imshow("keypoints", kp_image);

示例二:原图

参数不同过滤运行结果

蓝色与红色是检测结果表示

相关代码如下

// 几何形状过滤
// 声明根据面积过滤,设置最大与最小面积
params.filterByArea = true;
params.minArea = 1000.0f;
params.maxArea = 12000.0f;
// 声明根据圆度过滤,设置最大与最小圆度
params.filterByCircularity = true;
params.minCircularity = 0.7;
params.maxCircularity = 0.8;
// 凸包形状分析 - 过滤凹包
params.filterByConvexity = true;
params.minConvexity = 0.0;
params.minConvexity = 0.5;
// 参数初始化BLOB检测器,
Ptr<SimpleBlobDetector> detector = SimpleBlobDetector::create(params);
vector<KeyPoint> keypoints;
// 检测得到特征与绘制特征
detector->detect(src, keypoints, Mat());
Mat kp_image;
drawKeypoints(src, keypoints, kp_image, Scalar(0, 0, 255), DrawMatchesFlags::DRAW_RICH_KEYPOINTS);
imshow("keypoints", kp_image);

总结:

图像的BLOB特征提取与分析,除了使用SimpleBlobDetector类之外还可以通过findContours与几何矩Moments计算相结合来实现。后者更加考察对OpenCV相关API函数熟悉程度与图像处理相关知识的掌握程度。

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

OpenCV中BLOB特征提取与几何形状分类相关推荐

  1. OpenCV中图像特征提取与描述

    目录 图像特征提取与描述 图像的特征 Harris和Shi-Tomas算法 Harris角点检测 Shi-Tomasi角点检测 小结 SIFT/SURF算法 SIFT原理 基本流程 尺度空间极值检测 ...

  2. python图像特征提取与匹配_[OpenCV-Python] OpenCV 中图像特征提取与描述 部分 V (二)...

    部分 V 图像特征提取与描述 34 角点检测的 FAST 算法 目标 • 理解 FAST 算法的基础 • 使用 OpenCV 中的 FAST 算法相关函数进行角点检测 原理 我们前面学习了几个特征检测 ...

  3. opencv自然背景下交通标志形状分类c++代码_前端革命时刻:前端代码是怎样智能生成的-图像分离篇

    作为阿里经济体前端委员会四大技术方向之一,前端智能化项目经历了 2019 双十一的阶段性考验,交出了不错的答卷,天猫淘宝双十一会场新增模块 79.34% 的线上代码由前端智能化项目自动生成.在此期间研 ...

  4. 电池的几何形状和标准尺寸

    除了可重复使用性和电池化学性能,电池的包装方式也是一个重要因素,因为它应该能够在不损害安全标准的情况下安装在设备中.电池的几何形状和大小在其应用于电路中也起着至关重要的作用. 电池从18世纪就开始使用 ...

  5. opencv 检测几何图形_使用OpenCV + ConvNets检测几何形状

    opencv 检测几何图形 A simple yet powerful pipeline for detecting shapes in scanned documents 一个简单而强大的管道,用于 ...

  6. OpenCV绘制线、矩形、圆等基本几何形状

    OpenCV绘制线.矩形.圆.椭圆等基本几何形状 画线 画矩形 画圆 通过javaOpenCV中的Imgproc函数进行简单几何图形的绘制 画线 代码 public class DemoMat {st ...

  7. openCV任意几何形状感兴趣区域(ROI)提取

    图像感兴趣区域(ROI)提取主要使用掩模来进行.掩模是二值图像,感兴趣区域的掩模值设置为255,非感兴趣区域的掩模值为0 获取掩模的方法主要有两种 方法一 使用opencv中Mat函数方法,调用Mat ...

  8. 几何图形识别 python_OpenCV中几何形状识别与测量

    经常看到有学习OpenCV不久的人提问,如何识别一些简单的几何形状与它们的颜色,其实通过OpenCV的轮廓发现与几何分析相关的函数,只需不到100行的代码就可以很好的实现这些简单几何形状识别与对象测量 ...

  9. opencv图片矩形网格边线_OpenCV C++(九)----几何形状的检测和拟合

    9.1.点集的最小外包 点集是坐标点的集. 9.1.1.最小外包旋转矩形 //点集 Mat points = (Mat_(5, 2) << 1, 1, 5, 1, 1, 10, 5, 10 ...

最新文章

  1. mysql数据去重语句_数据库 mysql 语句
  2. 基建狂魔:硬核技术之隔绝厌氧菌的涂料
  3. 微软解释Edge浏览器比Chrome更加安全的原因
  4. Dicom Test Files
  5. [Android]用架构师角度看插件化(3)-Replugin 需要占坑跳转?
  6. 使用SignalR从服务端主动推送警报日志到各种终端(桌面、移动、网页)
  7. 如何看待潘石屹搞python_潘石屹考了99分的Python,到底是一种什么存在?
  8. 分时系统是计算机网络嘛,简述计算机网络与分时多用户系统多机系统分布式系统的区别...
  9. .NET BackgroundWorker的一般使用方式
  10. Linux安装webmin
  11. 如果想成为数据科学家,请学习这3种语言
  12. 12306第一波春运售票高峰:“云查询”每秒40万次
  13. yum 安装 sz与rz(上传、下载)
  14. 《跑步人生》 作者:村上春树
  15. ML1.1 机器学习误差分析
  16. 松下MINAS-A6伺服电机调试记录
  17. android 背景 投影,Android ImageView投影
  18. %d, %ld, %lld 区别
  19. VPS、SPS、PPS、SS简介
  20. 中国学生常见的英文论文写作问题

热门文章

  1. 2019北京智源大会在京开幕, 中外学术大咖共话人工智能研究前沿
  2. Facebook开源模型可解释库Captum,这次改模型有依据了
  3. 9月推荐 | 从近1000篇Python文章中精选Top10
  4. 深度学习框架哪家强?MXNet称霸CNN、RNN和情感分析,TensorFlow仅擅长推断特征提取
  5. 为什么说Netty是性能之王,因为它用了 Reactor 模型啊
  6. 阿里 Sentinel 源码解析
  7. 漫画 | Bug是如何产生的?
  8. 罗浩.ZJU | 如何看待 2020 届校招算法岗「爆炸」的情况?
  9. 【numpy学习笔记】数组的切片,索引,迭代
  10. 谷歌大脑新研究:强化学习如何学会用声音来观察?