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

重磅干货,第一时间送达

今天我们将一起探究如何使用OpenCV和Python从图像中提取感兴趣区域(ROI)。

在之间的文章中,我们完成了图像边缘提取,例如从台球桌中提取桌边。使用了简单的OpenCV函数即可完成这项任务,例如inRange、findContours、boundingRect、minAreaRect、 minEnclosingCircle、circle、HoughLines、line等,都可以。

今天我们的任务是从包含患者大脑活动快照的图像中提取所需的片段。之后可以将该提取的过程应用于其他程序中,例如诊断健康与否的机器学习模型。

因此,让我们从查看输入图像开始。这是由神经科学领域的医疗仪器生成的典型报告,该仪器使用传感器检测来自患者大脑的信号并将其显示为彩色地图。通常,有四张图片,所有图片都描绘了某个特征并一起分析以进行诊断。

本练习的目标图像包含四个大脑图

从上面的图像中,我们只想提取与四个地图(头部扫描)相对应的区域,而将其他所有内容都排除在外。因此,让我们开始吧。

第一步是检测我们要提取的片段的边缘。这是一个多步骤过程,如下所述:

1. 使用“ cvtColor()”将RGB图像转换为灰度

2. 通过应用模糊函数“ GaussianBlur()”来消除灰度图像中的噪声

3. 最后将“ Canny()”函数应用于模糊图像以获得边缘

边缘检测过程的输出如下所示:

使用Canny算法的边缘检测输出

请注意,尽管已识别出脑图片段,但仍有许多不需要的边缘需要消除,并且某些边缘之间有间隙需要封闭。

解决这个问题的一种常用方法是形态转换,它涉及在图像上使用一系列的扩张和腐蚀来去除不需要的边缘和闭合间隙。

我们在多次迭代中使用OpenCV函数“ dilate()”和“ erode()”来获得如下输出。

使用OpenCV对边缘进行了一些增强

如我们看到的那样,边缘现在已经完成并且比以前光滑得多。

现在,我们可以使用OpenCV函数“ findContours()”提取该图像中的轮廓,并仅选择具有以下属性的轮廓:

1. 几何形状是圆形或椭圆形

2. 面积大于某个阈值(在此示例中,值7000可以正常工作)。

对于第一部分,我们将使用OpenCV的“ boundingRect()”检测每个轮廓的边界矩形,并检查纵横比(高宽比)是否接近1。

现在我们的任务已经完成,但还需要进行一些微调。

通常情况是在一个片段上检测到多个重叠的轮廓,而我们只对一个感兴趣。

使用非极大抑制可以解决此问题,即我们查看所有重叠的轮廓,然后选择面积最大的轮廓作为最终候选轮廓。逻辑非常简单,因此我们不需要任何内置的OpenCV或Python函数。

另一个重要的逻辑是分别识别四个部分,即左上,右上,左下和右下。

这也非常简单,涉及识别图像中心坐标以及每个检测到的片段的质心。对段轮廓进行质心检测需要在轮廓上应用OpenCV “ moments()”函数,然后使用以下公式计算中心 X,Y坐标:
center_x,center_y =(int(M [“ m10”] / M [” m00”]),int(M [“ m01”] / M [“ m00”]))

将线段质心坐标与图像中心坐标进行比较,可以将四个线段分别放置在各自的位置。

现在我们已经确定了四个部分,我们需要构建图像蒙版,这将使我们能够从原始图像中提取所需的特征。

我们将使用OpenCV函数“ drawContours()”,将颜色用作白色(R,G,B = 255,2555,255),将厚度用作FILLED(-1)在黑色背景上绘制所有四个线段轮廓。结果如下所示:

用于提取我们的ROI的蒙版

在原始图像上应用此蒙版可以在我们选择的背景(例如黑色或白色)上为我们提供所需的分段。

对于黑色背景,我们创建一个黑色画布,然后使用OpenCV函数“ bitwise_and()”以及先前获得的蒙版在其上进行绘制。

在黑色背景上提取的ROI

对于白色背景,我们首先创建一个白色画布,然后通过使用OpenCV函数“ drawContours()”绘制轮廓为黑色(R,G,B = 0,0,0)且厚度为FILLED的轮廓,如下所示创建颜色反转的蒙版(-1)。

用于ROI提取的备用倒置掩模(图像源作者)

然后,我们使用OpenCV “ add()”函数将此反向蒙版添加到先前获得的黑色背景中,并获得相同的结果,但使用白色背景。

在白色背景上提取的ROI

到此为止,我们总结了几种方法,可以轻松地从图像中提取感兴趣区域。

应当注意,在具有变化的复杂度的其他图像的情况下,上面使用的方法可以进行修改。

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

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

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

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

下载3:OpenCV实战项目20讲

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

交流群

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

基于OpenCV提取特定区域相关推荐

  1. 基于OpenCV提取特定区域方法汇总

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 今天我们将一起探究如何使用OpenCV和Python从图像中提取感 ...

  2. 基于OpenCV的特定区域提取

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 今天我们将一起探究如何使用OpenCV和Python从图像中提取感 ...

  3. 基于OpenCV的表格文本内容提取

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 小伙伴们可能会觉得从图像中提取文本是一件很麻烦的事情,尤其是需要提 ...

  4. 基于OpenCV实战:提取中心线

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|AI算法与图像处理 问题 前几天有个人问了我一个问题,问 ...

  5. 基于Opencv实现眼睛控制鼠标

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 如何用眼睛来控制鼠标?一种基于单一前向视角的机器学习眼睛姿态估计方 ...

  6. 基于opencv实战眼睛控制鼠标

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 如何用眼睛来控制鼠标?一种基于单一前向视角的机器学习眼睛姿态估计方 ...

  7. 语义分割:基于openCV和深度学习(二)

    语义分割:基于openCV和深度学习(二) Semantic segmentation in images with OpenCV 开始吧-打开segment.py归档并插入以下代码: Semanti ...

  8. 语义分割:基于openCV和深度学习(一)

    语义分割:基于openCV和深度学习(一) Semantic segmentation with OpenCV and deep learning 介绍如何使用OpenCV.深度学习和ENet架构执行 ...

  9. 基于OpenCV的图像梯度与边缘检测!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:姚童,Datawhale优秀学习者,华北电力大学 严格的说,梯度计 ...

最新文章

  1. MyEclipse或者Eclipse内存溢出问题
  2. bzoj1334[Baltic2008]Elect(背包dp)
  3. Accent-Insensitive, Accent Sensitive, a ã, e é 模糊查询
  4. 在一个数组中找出和为目标值的那 两个 整数,并返回他们的数组下标python代码(Leetcode1)
  5. 华为开源构建工具_为什么我构建了用于大数据测试和质量控制的开源工具
  6. 3399 mysql_手动安装 mysql
  7. lodash是否是数组_lodash源码解析:for家族
  8. 对话陆奇:用产品思维变革百度工程师文化,欣赏腾讯内部赛马机制
  9. 软件测试工程师如何编写一篇杀手级简历?
  10. Swift基础语法学习-4.Bool类型
  11. 办公软件入门--word01
  12. 键盘按键损坏 注册表更改_如何彻底清洁键盘(不损坏任何东西)
  13. 系统集成项目管理工程师计算题(进度管理总浮动时间、自由浮动时间、工期)
  14. oracle的over和group,分组函数group by 和分析函数over()
  15. 计算机网络课程主机号怎么看,已知Ip地址_子网掩码如何计算子网号、主机号(收集整理)...
  16. 汉诺塔的非递归实现(借助堆栈模拟递归)
  17. randon变换(拉东变换)
  18. Collecting Luggage - UVALive 2397 - 蓝桥杯 算法训练
  19. 推荐系统实践(项亮)读书笔记
  20. PCIE协议解析 synopsys IP DBI and LBC 读书笔记(5)

热门文章

  1. Python爬取B站5000条视频,揭秘为何千万人为它流泪
  2. 自然语言处理十问!独家福利
  3. 周礼栋:现在是计算机系统和网络研究“最好的时代”
  4. 重磅!Facebook公布PyTorch 1.0预览版!
  5. Java 11 正式发布!
  6. 一文帮你理解什么是深层置信网络(DBN)
  7. 神奇的 SQL 之别样的写法 → 行行比较
  8. 公司终于决定放弃微服务传统设计模式,全面拥抱 DDD!
  9. 部门内 IDEA 分享,超实用技巧!
  10. 跟我学Springboot开发后端管理系统4:数据库连接池Druid和HikariCP