使用 Python 的基于边缘和基于区域的分割

重磅干货,第一时间送达

在这篇文章中,我将重点介绍基于边缘和基于区域的分割技术,在进入细节之前,我们需要了解什么是分割以及它是如何工作的。

分割

图像分割是一种将数字图像分割成各种图像对象的技术。

一个区域(图像对象)中的每个像素在某些属性上是相似的,例如颜色、强度、位置或纹理,这可以降低图像的复杂性,以便于分析。在分割的帮助下,还可以从图像中检测出隐藏信息。

分割算法处理图像的两个基本属性:

  • 强度值,例如不连续性(边界法)

  • 相似性(区域法)

在下图中,我们看到了一张以椅子、桌子、窗户等为特征的图像。我们可以通过分割来分别获取这些对象。中间的图像有一把椅子、一张桌子和窗户作为我们的分割图像对象。在最右边的图像中,通过标记图像对象来使用实例分割。

在使用 Python 进行机器学习之后,分割变得非常容易。

图像分割的必要性

将图像划分为不同的图像对象,从中获取信息,然后使用标签来训练各种 ML 模型以解决业务问题,其中一个例子是一个面部识别系统,该系统通过分割自动标记出勤情况。

分割的另一个应用是在医学领域中,在检测到肿瘤、癌症等严重疾病后进行高效和快速的诊断,以及查看由射线照相、MRI、热成像、内窥镜检查、细胞和组织的超声检查生成的医学图像中的模式。图像分割在机器人等领域也有巨大的应用。

图像分类是一种流行的分割应用,算法只能从图像中捕获所需的成分。在 Python 中实现图像分割很容易,以获得快速的结果。

基于边缘分割

在这种方法中,区域的边界彼此之间以及与背景之间的差异很大,允许基于强度(灰度级)的局部不连续性进行边界检测。

换句话说,它是在图像中定位边缘的过程。这是理解图像特征的非常重要的一步,因为我们知道边缘由有意义的特征组成并且具有重要的信息。

基于区域分割

这种方法包括根据一组特定的标准将图像划分为相似的区域。

基于区域的分割技术涉及一种算法,该算法通过将图像划分为具有相似像素特征的各种组件来进行分割,该技术在输入图像中搜索小块或大块以进行分割。

它将向选定的块添加更多像素,或者将块点进一步缩小为更小的段,并将它们与其他更小的块点合并。因此,基于该方法还有两种更基本的技术:区域生长和区域合并与分割。

分割的主要应用
  • 重大疾病检测

  • 人脸识别系统

  • 自动驾驶汽车

  • 机器人学

Python实现
import numpy as npimport matplotlib.pyplot as pltfrom skimage import datacoins = data.coins()hist = np.histogram(coins, bins=np.arange(0, 256))fig, (ax1) = plt.subplots()ax1.imshow(coins, cmap=plt.cm.gray,interpolation='nearest')
基于边缘的分割
from skimage.feature import cannyedges = canny(coins/255.)fig, ax = plt.subplots(figsize=(4, 3))ax.imshow(edges, cmap=plt.cm.gray, interpolation='nearest')ax.axis('off')ax.set_title('Canny detector')Text(0.5, 1.0, 'Canny detector')

在这段代码中,我们使用了 canny 库,这是一种流行的边缘检测算法来检测输入图像的边缘。

通过设置有效对象的最小大小,可以轻松去除小的虚假对象:

from scipy import ndimage as ndifill_coins = ndi.binary_fill_holes(edges)fig, ax = plt.subplots(figsize=(4, 3))ax.imshow(fill_coins, cmap=plt.cm.gray, interpolation='nearest')ax.axis('off')ax.set_title('Filling the holes')Text(0.5, 1.0, 'Filling the holes')

我们使用ndimage as ndi,这意味着一个n维图像,它是处理图像处理操作的子模块,如输入、输出、裁剪、过滤等。

Ndi.binary_fill_holes用于填充连接到边界的n维二进制阵列孔和侵入孔。

基于区域的分割
from skimage.filters import sobelelevation_map = sobel(coins)fig, ax = plt.subplots(figsize=(4, 3))ax.imshow(elevation_map, cmap=plt.cm.gray, interpolation='nearest')ax.axis('off')ax.set_title('elevation_map')Text(0.5, 1.0, 'elevation_map')

在这里,我们从skimage.filters导入sobel模块,该模块用于查找输入图像中的边缘。

Sobel transform 还可以帮助我们找到输入图像中的垂直和水平边缘。

结论

这篇文章用 Python 实现详细解释了分割及其两种重要技术(基于边缘的分割和基于区域的分割)。

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

相关推荐

  • 二值化处理与边缘检测

    问题:我在提取图像边缘的时候,首先对图像进行灰度变换,之后进行二值处理,最后进行边缘检测得到边缘图像. 但是在查阅资料的过程中我经常发现很多人忽略二值化的步骤,直接进行边缘检测:还有很多人在实现某些功 ...

  • 边缘和轮廓检测——计算机视觉的应用

    计算机视觉的重点是从计算机中的视频和图像中提取有意义的信息.在本文中,我们将从初学者开始探索一个使用 OpenCV 的出色计算机视觉项目. 其标题是"使用计算机视觉进行边缘和轮廓检测&quo ...

  • 利用边缘检测计算物体面积(内含源码)

    在农业中,通常希望获取不同土地的面积.虽然获取这些土地的面积操作相对容易,但是却涉及高额的费用.另外,如果对于不规则形状的土地,测量土地面积的大小就变得相对困难. 幸运的是,有大量以卫星图像的形式公开 ...

  • python保存生成的图像的方法

    这篇文章将为大家详细讲解有关python保存生成的图像的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获. python中保存图片的方法: 1.使用io模块的ims ...

  • 图像特征提取(颜色,纹理,形状)

    来源:新机器视觉 来自:小白学视觉公众号 编辑:王萌(深度学习冲鸭公众号) 著作权归作者所有,本文仅作学术分享,若侵权,请联系后台删文处理 后台回复西瓜手推获得西瓜书手推笔记 后台回复CV入坑必备获得 ...

  • python画双y轴图像

    很多时候可能需要在一个图中画出多条函数图像,但是可能y轴的物理含义不一样,或是数值范围相差较大,此时就需要双y轴. matplotlib和seaborn都可以画双y轴图像.一个例子: import s ...

  • 频域图像增强-锐化

    图像增强技术根据增强处理过程所在的空间不同,可分为基于频域的算法和基于空域的算法两大类.基于频域的算法是在图像的某种变换域内对图像的变换系数值进行某种修正,是一种间接增强的算法,把图像看成一种二维信号 ...

  • 6、Halcon图像边缘提取和轮廓识别

    目录 1.图像边缘提取原理 2.边缘提取算子介绍 3.图像的亚像素边缘提取 4.亚像素轮廓的特征分析 5.xld的分割及直线拟合 6.圆及椭圆的拟合 7.中心线的提取 1.图像边缘提取原理 网上搜索图 ...

  • (5条消息) 复杂户型图处理(基于边缘特征)

    需求突然转换到,识别有背景的户型图: 具体效果参考空间大师,首先提出墙体,然后识别门窗.家具. 空间大师对实现思路几乎没有帮助,绝望之际找到一篇论文,看结果还不错,于是我们就开始根据论文一步步实现. ...

  • 新论文:基于实测地震记录的区域地震动场模拟方法

    论文链接: https://pubs.geoscienceworld.org/ssa/bssa/article/doi/10.1785/0120200243/593868/Regional-Groun ...

  • 基于边缘计算的大规模传感器高频采集系统研究

    相关链接: 1.6G万网互联的场景和需求研究 2.5G基站与射频电磁辐射漫谈 3.5G时代的数字校园专利分析 ★原文发表于<广东通信技术>2020年第9期★ DOI:10.3969/j.i ...

  • Python IDE之Pydev: 基于Eclipse搭建python的编译环境(Eclipse+pydev)简介、安装、使用的详细攻略

    Python IDE之Pydev: 基于Eclipse搭建python的编译环境(Eclipse+pydev)简介.安装.使用的详细攻略 pydev简介 2003年7月16日,以 Fabio Zadr ...

  • 【学术论文】基于边缘计算的计算即服务模式

    摘要 边缘计算是随着万物互联时代而产生,适用于从云端到边缘路径中的所有终端设备的一种计算模型.现有云计算模型下的服务模式已经无法满足边缘计算模型的应用需求,主要体现在边缘设备资源的有限性.服务的实时性 ...

  • python与anaconda安装(先安装了python后安装anaconda,基于python已存在的基础上安装anaconda)

    目录 一.安装python(python3.7.4) 1.下载 (1)下载1(32位) (2)下载2(64位) 2.安装 3.配置python环境变量 4.检验python 二.安装anaconda( ...

  • 基于局部凹凸性进行目标分割

    基于局部凹凸性进行目标分割 Object Partitioning using Local Convexity 摘要 如何对场景进行适当的三维分割仍然是一个难题. 尽管目前阶段的方法持续提高基准性能, ...

  • 基于Transformer对透明物体进行分割

    重磅干货,第一时间送达 小白导读 论文是学术研究的精华和未来发展的明灯.小白决心每天为大家带来经典或者最新论文的解读和分享,旨在帮助各位读者快速了解论文内容.个人能力有限,理解难免出现偏差,建议对文章 ...

  • 宏基因组专题 | 宏基因组分析流程,基于reads VS 基于组装?

    本文由Bayegy根据实践经验而整理,希望对大家有帮助. 原创微文,欢迎转发转载. 导读 所谓宏基因组学 (或元基因组学, metagenomics) 就是一种以环境样品中的微生物群体基因组为研究对象 ...