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

重磅干货,第一时间送达

今天我们将一起探究如何使用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实战:提取中心线

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

  2. 基于opencv,使用python提取视频帧以及提取TVL1光流

    处理视频,最常用的开源工具箱非opencv莫属了,python可以很好的支持它. 一 从视频读取帧.得到相关属性.并设置保存哪些帧 首先:我们得新建一个videocapture对象: cap=cv2. ...

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

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

  4. 基于OpenCV提取特定区域

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

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

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

  6. 《OpenCv视觉之眼》Python图像处理十二 :Opencv图像轮廓提取之基于一阶导数的Roberts算法、Prewitt算法及Sobel算法

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

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

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

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

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

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

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

最新文章

  1. IIS 应用程序池设置
  2. Elasticsearch-02CentOS7安装elasticsearch-head插件
  3. 阿里云飞天论文获国际架构顶会 ATC 2021最佳论文:全球仅三篇
  4. Entity Data Model (EDM) 深入分析, Part 3
  5. 领航服务器系统,应用领航:盘点那些年我们一起追过的OS
  6. linux手动安装mysql8.16,MySQL8.0.16-linux-x64安装介绍(binary package)
  7. UE3 渲染线程的分析及优化
  8. 成立一年 百度搜索公司迎来首任 CTO
  9. -bash: pip: command not found错误
  10. 2017百度之星资格赛:1001. 度度熊保护村庄(floyd最小环)
  11. selinux --chcon命令
  12. 数学分析 反函数存在性定理,连续性定理与求导定理
  13. 神经网络arm neon加速实现
  14. meterpreter下抓取windows系统明文密码实验
  15. 弘辽科技:淘宝评分飘绿四大原因及快速提高评分之解决技巧
  16. springboot+nodejs+vue+elementui教师下乡支教岗位申请系统java项目源码
  17. python抓取网站访客手机号_网站获取访客QQ系统
  18. 关于javaBean运行后出现Name was not previously introduced as per JSP.5.3的解决方法
  19. CHERRY 键盘 alt 组合键失灵或开始菜单键失灵
  20. Mindjet MindManager思维导图空间快捷键

热门文章

  1. 360推两款无刘海新机,主打安全和AI,起售价1199
  2. 资源 | 2018年值得关注的200场机器学习会议(建议收藏)
  3. SpringBoot + Redis:模拟 10w 人的秒杀抢单!
  4. 编写 if 时不带 else,你的代码会更好!
  5. 再有人问你Netty是什么,就把这篇文章发给他
  6. 180万奖金!数据挖掘,NLP,CV等23个赛道,2020 科大讯飞AI大赛正式发布!
  7. 吴恩达《Machine Learning》Jupyter Notebook 版笔记发布!图解、公式、习题都有了
  8. 美团语音交互部招聘NLP/知识图谱/语音识别等算法职位(可实习)
  9. 如何使用有限的数据来训练 GANs?
  10. Hinton再挖新坑:改进胶囊网络,融合Transformer神经场等研究