5 行代码实现图像分割

MATLAB图像分割实验代码及运行结果 Matlab使用多种方法进行图像分割处理的实验源代码和运行截图 阅读详情

本文来自量子位

图像分割,作为计算机视觉的基础,是图像理解的重要组成部分,也是图像处理的难点之一。

那么,如何优雅且体面的图像分割?

5行代码、分分钟实现的库——PixelLib,了解一下。

当然,如此好用的项目,开源是必须的。

为什么要用到图像分割?

虽然计算机视觉研究工作者,会经常接触图像分割的问题,但是我们还是需要对其做下“赘述”(方便初学者)。

我们都知道每个图像都是有一组像素值组成。简单来说,图像分割就是在像素级上,对图像进行分类的任务。

图像分割中使用的一些“独门秘技”,使它可以处理一些关键的计算机视觉任务。主要分为2类:

  • 语义分割:就是把图像中每个像素赋予一个类别标签,用不同的颜色来表示。

  • 实例分割:它不需要对每个像素进行标记,它只需要找到感兴趣物体的边缘轮廓就行。

它的身影也经常会出现在比较重要的场景中:

  • 无人驾驶汽车视觉系统,可以有效的理解道路场景。

  • 医疗图像分割,可以帮助医生进行诊断测试。

  • 卫星图像分析,等等。

所以,图像分割技术的应用还是非常重要的。

接下来,我们就直奔主题,开始了解一下PixelLib,这个神奇又好用的库。

快速安装PixelLib

PixelLib这个库可以非常简单的实现图像分割——5行代码就可以实现语义分割和实例分割。

老规矩,先介绍一下安装环境。

安装最新版本的TensorFlow、Pillow、OpenCV-Python、scikit-image和PixelLib:

pip3 install tensorflow
pip3 install pillow
pip3 install opencv-python
pip3 install scikit-image
pip3 install pixellib

PixelLib实现语义分割

PixelLib在执行语义分割任务时,采用的是Deeplabv3+框架,以及在pascalvoc上预训练的Xception模型。

用在pascalvoc上预训练的Xception模型执行语义分割:

import pixellib
from pixellib.semantic import semantic_segmentation
segment_image = semantic_segmentation()
segment_image.load_pascalvoc_model(“deeplabv3_xception_tf_dim_ordering_tf_kernels.h5”)
segment_image.segmentAsPascalvoc(“path_to_image”, output_image_name = “path_to_output_image”)

让我们看一下每行代码:

import pixellib
from pixellib.semantic import semantic_segmentation

#created an instance of semantic segmentation class
segment_image = semantic_segmentation()

用于执行语义分割的类,是从pixellib导入的,创建了一个类的实例。

segment_image.load_pascalvoc_model(“deeplabv3_xception_tf_dim_ordering_tf_kernels.h5”)

调用函数来加载在pascal voc上训练的xception模型(xception模型可以从文末传送门链接处下载)。

segment_image.segmentAsPascalvoc(“path_to_image”, output_image_name = “path_to_output_image”)

这是对图像进行分割的代码行,这个函数包含了两个参数:

  • path_to_image:图像被分割的路径。

  • path_to_output_image:保存输出图像的路径,图像将被保存在你当前的工作目录中。

接下来,上图,实战!

图像文件命名为:sample1.jpg,如下图所示。

执行代码如下:

import pixellib
from pixellib.semantic import semantic_segmentation
segment_image = semantic_segmentation()
segment_image.load_pascalvoc_model(“deeplabv3_xception_tf_dim_ordering_tf_kernels.h5”)
segment_image.segmentAsPascalvoc(“sample1.jpg”, output_image_name = “image_new.jpg”)

可以看到,在执行代码后,保存的图像中,所有对象都被分割了。

也可以对代码稍作修改,获取一张带有目标对象分割重叠(segmentation overlay)的图像。

segment_image.segmentAsPascalvoc(“sample1.jpg”, output_image_name = “image_new.jpg”, overlay = True)

添加了一个额外的参数,并设置为True,就生成了带有分隔叠加的图像。

可以通过修改下面的代码,来检查执行分割所需的推理时间。

import pixellib
from pixellib.semantic import semantic_segmentation
import time
segment_image = semantic_segmentation()
segment_image.load_pascalvoc_model(“pascal.h5”)
start = time.time()
segment_image.segmentAsPascalvoc(“sample1.jpg”, output_image_name= “image_new.jpg”)
end = time.time()
print(f”Inference Time: {end-start:.2f}seconds”)

输出如下:

Inference Time: 8.19seconds

可以看到,在图像上执行语义分割,只用了8.19秒。

这个xception模型是用pascalvoc数据集训练的,有20个常用对象类别。

对象及其相应的color map如下所示:

PixelLib实现实例分割

虽然语义分割的结果看起来还不错,但在图像分割的某些特定任务上,可能就不太理想。

在语义分割中,相同类别的对象被赋予相同的colormap,因此语义分割可能无法提供特别充分的图像信息。

于是,便诞生了实例分割——同一类别的对象被赋予不同的colormap。

PixelLib在执行实例分割时,基于的框架是Mask RCNN,代码如下:

import pixellib
from pixellib.instance import instance_segmentation
segment_image = instance_segmentation()
segment_image.load_model(“mask_rcnn_coco.h5”)
segment_image.segmentImage(“path_to_image”, output_image_name = “output_image_path”)

同样,我们先来拆解一下每行代码。

import pixellib
from pixellib.instance import instance_segmentation
segment_image = instance_segmentation()

导入了用于执行实例分割的类,创建了该类的一个实例。

segment_image.load_model(“mask_rcnn_coco.h5”)

这是加载 Mask RCNN 模型来执行实例分割的代码(Mask RCNN模型可以从文末传送门链接处下载)。

segment_image.segmentImage(“path_to_image”, output_image_name = “output_image_path”)

这是对图像进行实例分割的代码,它需要两个参数:

  • path_to_image:模型所要预测图像的路径。

  • output_image_name:保存分割结果的路径,将被保存在当前的工作目录中。

上图,实战第二弹!

图像文件命名为:sample2.jpg,如下图所示。

执行代码如下:

import pixellib
from pixellib.instance import instance_segmentation
segment_image = instance_segmentation()
segment_image.load_model(“mask_rcnn_coco.h5”)
segment_image.segmentImage(“sample2.jpg”, output_image_name = “image_new.jpg”)

上图便是保存到目录的图片,现在可以看到语义分割和实例分割之间的明显区别——在实例分割中,同一类别的所有对象,都被赋予了不同的colormap。

若是想用边界框(bounding box)来实现分割,可以对代码稍作修改:

segment_image.segmentImage(“sample2.jpg”, output_image_name = “image_new.jpg”, show_bboxes = True)

这样,就可以得到一个包含分割蒙版和边界框的保存图像。

同样的,也可以通过代码查询实例分割的推理时间:

import pixellib
from pixellib.instance import instance_segmentation
import time
segment_image = instance_segmentation()
segment_image.load_model(“mask_rcnn_coco.h5”)
start = time.time()
segment_image.segmentImage(“former.jpg”, output_image_name= “image_new.jpg”)
end = time.time()
print(f”Inference Time: {end-start:.2f}seconds”)

输出结果如下:

Inference Time: 12.55 seconds

可以看到,在图像上执行实例分割,需要12.55秒的时间。

最后,奉上项目、模型下载地址,快去试试吧~

传送门

PixelLib项目地址:
https://github.com/ayoolaolafenwa/PixelLib

xception模型下载地址:
https://github.com/bonlime/keras-deeplab-v3-plus/releases/download/1.1/deeplabv3_xception_tf_dim_ordering_tf_kernels.h5

Mask RCNN模型下载地址:
https://github.com/matterport/Mask_RCNN/releases/download/v2.0/mask_rcnn_coco.h5

欢迎扫码关注:

U-Net Transformer:用于医学图像分割的自我和交叉注意力模块 U-Transformer 阅读详情

相关推荐

基于计算机视觉实现医学影像分割可视化 matlab

通过图像预处理、CNN 分割和 GUI 可视化三个主要步骤的结合,使得用户可以轻松地进行医学影像分割操作,并查看分割结果,为医疗行业的数字化发展提供了有力的支持。接下来,我们使用 MATLAB 中的 GUI 工具箱来构建一个可视化界面,以方便用户对影像分割进行操作和查看结果。首先需要导入 DICOM 格式的医学影像数据,对其进行基本的预处理,如图像去噪、平滑、增强等,保证后续分割的准确性。本文将介绍一种基于计算机视觉的方法,使用 MATLAB 实现医学影像分割,并通过 GUI 界面进行可视化。

持续更新 409

5行代码,快速实现图像分割,代码逐行详解,手把手教你处理图像 | 开源

金磊 发自 凹非寺量子位 报道 | 公众号 QbitAI图像分割,作为计算机视觉的基础,是图像理解的重要组成部分,也是图像处理的难点之一。那么,如何优雅且体面的图像分割?5行代码、分分钟...

量子位 1891

5行Python代码实现图像分割

众所周知图像是由若干有意义的像素组成的,图像分割作为计算机视觉的基础,对具有现有目标和较精确边界的图像进行分割,实现在图像像素级别上的分类任务。本博客主要通过PixelLib模块帮助用户快速便捷实现图像分割。

不脱发的程序猿 1万+

vrmlpad家居场景实例代码_日常场景与照明联动场景——智能家居场景与自动化应用之二...

本篇主要讲解日常场景和照明联动场景。为了方便大家,我这里尽量用例子来呈现,这样大家可以直接在例子的基础上增减即可打造自己的场景和自动化了。受限于个人水平,部分场景和联动可能考虑的不够全面,希望各位朋友能批评指正,也希望各位朋友能提出宝贵的意见建议,让这一系列文章成为广大智能家居爱好者的入门利器。日常场景前文讲过,日常场景指的是比较基础的大家应用比较多的场景,包括离家、回家、早安、晚安等。这一类场景...

weixin_39949776的博客 772

vrml 代码实例 20多个吧

vrml的基本实例, 20多个吧, 各种形状什么的都有涉及,可以直接使用的, 还有一个教程

解决fetch_california_housing数据集403错误的3种实用方法(附手动下载地址)

本文针对机器学习中常见的fetch_california_housing数据集403 Forbidden错误,提供了三种实用的解决方案。从理解HTTP 403错误的根源出发,详细介绍了修改源码路径、使用国内镜像源以及手动下载并配置数据文件这三种方法,并附带了可靠的手动下载地址,帮助开发者彻底解决数据加载障碍,确保机器学习项目顺利进行。

weixin_29062963的博客 561

简单粗暴,5行代码,快速实现图像分割

点击上方“视学算法”,选择“星标”公众号重磅干货,第一时间送达本文来自量子位图像分割,作为计算机视觉的基础,是图像理解的重要组成部分,也是图像处理的难点之一。那么,如何优雅且体面的图像分...

zandaoguang的博客 1800

【微信小程序开发与设计】垃圾智能分类小程序

垃圾分类是将来生活可持续发展的必需项。但是很多人由于缺乏垃圾分类知识,或是因为垃圾分类困难,费时费力,所以没有好好贯彻垃圾分类政策,此时设计一款方便于群众进行智能化垃圾识别分类的微信小程序就显得尤为必要。

Markelle_Fultz的博客 8246

用matlab图像分割代码_5 行代码实现图像分割

本文来自量子位图像分割,作为计算机视觉的基础,是图像理解的重要组成部分,也是图像处理的难点之一。那么,如何优雅且体面的图像分割?5行代码、分分钟实现的库——PixelLib,了解一下。当然,如此好用的项目,开源是必须的。为什么要用到图像分割?虽然计算机视觉研究工作者,会经常接触图像分割的问题,但是我们还是需要对其做下“赘述”(方便初学者)。我们都知道每个图像都是有一组像素值组成。简单来说,图像分割...

weixin_39622398的博客 460

百度无人车ApolloAuto使用入门

1.安装原版ubuntu 14.04 http://www.ubuntu.org.cn/download/alternative-downloads 2.安装对应ubuntu 14.04的indigo版ROS http://wiki.ros.org/indigo/Installation/Ubuntu 3.安装Apollo Kernel https://github.co

ss910的博客 3万+

超详细!动态规划详解分析(典型例题分析和对比,附源码)

为啥要使用动态规划?什么时候使用动态规划?以下是我的一些理解和心得,如果你感兴趣,就接着往下看吧。 对您有帮助的话记得给我点个赞哟! 动态规划的基本思想 动态规划(Dynamic Programming,DP)算法通常用于求解某种具有最优性质的问题。在这类问题中,可能会有许多可行解,每一个解都对应一个值,我们希望找到具有最优值的解。 动态规划算法与分治法类似,其基本思想也是将待求解的问题分解成若干个子问题,先求解子问题,然后从这些子问题的解中 得到原有问题的解。与分治法不同的是,动态规划经分解后得到的子问题

qq_44398094的博客 8万+

vrmlpad家居场景实例代码_5 行代码实现图像分割

本文来自量子位图像分割,作为计算机视觉的基础,是图像理解的重要组成部分,也是图像处理的难点之一。那么,如何优雅且体面的图像分割?5行代码、分分钟实现的库——PixelLib,了解一下。当然,如此好用的项目,开源是必须的。为什么要用到图像分割?虽然计算机视觉研究工作者,会经常接触图像分割的问题,但是我们还是需要对其做下“赘述”(方便初学者)。我们都知道每个图像都是有一组像素值组成。简单来说...

weixin_39746794的博客 1084

【OpenCV实战】简洁易懂的车牌号识别Python+OpenCV实现“超详解”(含代码)

简洁易懂的车牌号识别Python实现(含代码)1、整体思路2、代码详解 1、整体思路 2、代码详解

qq_40784418的博客 9万+

kmeans图像分割matlab代码_简单粗暴,5行代码,快速实现图像分割

点击上方“小白学视觉”,选择“星标”公众号重磅干货,第一时间送达本文来自量子位图像分割,作为计算机视觉的基础,是图像理解的重要组成部分,也是图像处理的难点之一。那么,如何优雅且体面的图像分割?5行代码、分分钟实现的库——PixelLib,了解一下。当然,如此好用的项目,开源是必须的。为什么要用到图像分割?虽然计算机视觉研究工作者,会经常接触图像分割的问题,但是我们还是需要对其做下“赘述”...

weixin_39963819的博客 1306

智能车图像处理3-入门级分析2 ---直道冲刺

PS :入门级文章适合新手,如果已经有基础可以去看进阶篇文章。

taiyuezyh的博客 4322

Xilinx平台SRIO介绍(一)RapidIO协议介绍

菜鸟到老鸟:会用工具; 老鸟到大佬:深入理解原理。 ——FPGA大叔·沃自己硕得

数字IC/FPGA杂货铺,找一找,或许有你想要的~ 1万+

python实现图像分割_5行Python代码实现图像分割的步骤详解

众所周知图像是由若干有意义的像素组成的,图像分割作为计算机视觉的基础,对具有现有目标和较精确边界的图像进行分割,实现在图像像素级别上的分类任务。图像分割可分为语义分割和实例分割两类,区别如下:语义分割:将图像中每个像素赋予一个类别标签,用不同的颜色来表示;实例分割:无需对每个像素进行标记,只需要找到感兴趣物体的边缘轮廓。图像分割通常应用如下所示:专业检测:应用于专业场景的图像分析,比如在卫星图像中...

weixin_39913472的博客 944

GEE土地分类:土地分类精度评定和分类后影像进行(Kmeans,Gmeans,SNIC (Simple Non-Iterative Clustering)聚类分析和滤波(focal_mode)分析

使用聚类分析和滤波分析来进一步处理土地分类后的影像数据。聚类分析可以帮助您识别影像中的相似区域。您可以使用聚类算法,如K均值聚类或层次聚类,将像素分组到具有相似像素值的群集中。这可以帮助您更好地理解图像中的空间模式和结构,并可能揭示有用的信息。滤波分析可以帮助您平滑图像并去除噪声。常见的滤波器包括中值滤波器和高斯滤波器。这些滤波器可以帮助您消除图像中的随机变化,并使其更易于解释和分析。

此星光明博客 2518

图像分割matlab代码实现_5行代码,快速实现图像分割,代码逐行详解,手把手教你处理图像...

金磊 发自 凹非寺量子位 报道 | 公众号 QbitAI图像分割,作为计算机视觉的基础,是图像理解的重要组成部分,也是图像处理的难点之一。那么,如何优雅且体面的图像分割?5行代码、分分钟实现的库——PixelLib,了解一下。当然,如此好用的项目,开源是必须的。为什么要用到图像分割?虽然计算机视觉研究工作者,会经常接触图像分割的问题,但是我们还是需要对其做下“赘述”(方便初学者)。我们都知道每个图...

weixin_31459571的博客 729

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

用matlab图像分割代码_5行代码,快速实现图像分割,代码逐行详解,手把手教你处理图像

金磊 发自 凹非寺量子位 报道 | 公众号 QbitAI图像分割,作为计算机视觉的基础,是图像理解的重要组成部分,也是图像处理的难点之一。那么,如何优雅且体面的图像分割?5行代码、分分钟实现的库——PixelLib,了解一下。当然,如此好用的项目,开源是必须的。为什么要用到图像分割?虽然计算机视觉研究工作者,会经常接触图像分割的问题,但是我们还是需要对其做下“赘述”(方便初学者)。我们都知道每个图...

weixin_39573287的博客 492

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

python图像分割识别_5行Python代码实现图像分割的步骤详解

众所周知图像是由若干有意义的像素组成的,图像分割作为计算机视觉的基础,对具有现有目标和较精确边界的图像进行分割,实现在图像像素级别上的分类任务。图像分割可分为语义分割和实例分割两类,区别如下:语义分割:将图像中每个像素赋予一个类别标签,用不同的颜色来表示;实例分割:无需对每个像素进行标记,只需要找到感兴趣物体的边缘轮廓。图像分割通常应用如下所示:专业检测:应用于专业场景的图像分析,比如在卫星图像中...

weixin_39800918的博客 1835

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

上一篇: 想机器学习实战却不会特征降维?这可不行
下一篇: 一位中国博士把整个 CNN 都可视化了,可交互有细节,每次卷积 ReLU 池化都清清楚楚...
机器学习算法那些事
博客等级 码龄9年 1633粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值