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

重磅干货,第一时间送达

近年来,计算机视觉快速发展。目前流行的计算机视觉技术如图像分类、目标检测等已被广泛应用于解决许多计算机视觉问题。在图像分类中,对整个图像进行分类。在目标检测中,则是通过检测图像中单个目标的位置来扩展图像分类。

图像分割

一些计算机视觉问题需要让计算机对图像内容有更深入的理解。分类和目标检测可能不适合解决这些问题,我们非常需要一种有效的技术来解这类的计算机视觉问题,图像分割技术应运而生。

每个图像都由一组像素值组成。图像分割是在像素级对图像进行分类的任务。机器能够根据分配给图像中每个像素值的类将图像分割成不同的段,从而更有效地分析图像。

在图像分割中采用的独特技术使其适用于解决某些计算机视觉问题。这些问题需要有关图像中出现的对象详细信息,无法通过对整个图像进行分类或为图像中存在的对象提供边界框来提供详细信息。图像分割的一些主要应用包括:

  • 帮助无人驾驶汽车视觉系统有效的了解道路场景。

  • 医学图像分割:为执行诊断测试提供身体部位的分割。

  • 卫星图像分析。

图像分割有两种主要类型:

语义分割:使用相同类别的对象使用相同的颜色映射进行分割。

实例分割:它不同于语义分割,它会对同一对象的不同实例用不同的颜色映射来进行分割。

下面三幅图片有助于你理解语义分割和实例分割。

原图:

语义分割:

实例分割:

PixelLib:是为了在现实生活中更容易实现图像分割而构建的库。PixelLib是一个灵活的库,可以集成到需要应用图像分割的软件解决方案中。

语义分割和实例分割可以用五行代码实现。

安装PixelLib及其依赖项:

安装最新版本的tensorflow(tensorflow 2.0),使用:

  • pip3 install tensorflow

使用以下命令安装opencv python:

  • pip3 install opencv-python

使用以下命令安装scikit映像:

  • pip3 install scikit-image

安装Pillow :

  • pip3 install pillow

安装Pixellib:

  • pip3 install pixellib

用PixelLib实现语义分割:

在pascal voc数据集上训练deeplabv3+模型来实现语义分割的代码。

import pixellib
from pixellib.semantic import semantic_segmentationsegment_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
segment_image = semantic_segmentation()

执行语义分割的类是从pixelLib导入的,我们创建了该类的一个实例。

segment_image.load_pascalvoc_model(“deeplabv3_xception_tf_dim_ordering_tf_kernels.h5”)

在上面的代码中,我们加载了在pascal voc上训练的用于分割对象的xception 模型。模型可以从这里下载。

  • https://github.com/ayoolaolafenwa/PixelLib/releases/download/1.1/deeplabv3_xception_tf_dim_ordering_tf_kernels.h5

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

我们加载该函数对图像执行分割。这个函数有两个参数…

  • path_to_image:这个是要分割的图像路径。

  • output_image_name:这个是保存分割图像的路径。它将保存在当前工作目录中。

sample1.jpg:

import pixellib
from pixellib.semantic import semantic_segmentationsegment_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")

对图像中的对象进行分割并保存结果。如果需要,可以在图像上应用覆盖分割。

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

我们添加了额外的参数overlay并将其设置为true,我们得到了一个对象上具有覆盖分割的图像。

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

import pixellib
from pixellib.semantic import semantic_segmentation
import timesegment_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: 7.38seconds

对图像进行语义分割需要7.38秒。

该模型是在pascal voc数据集上训练的,这个数据集有20个对象类别。

对象及其对应的颜色映射:

PixelLib也是可以返回分割输出的数组:

使用此代码获取分割输出的数组,

output, segmap = segment_image.segmentAsPascalvoc()

通过修改下面的语义分割代码,可以测试获取数组的代码并打印出输出的形状。

import pixellib
from pixellib.semantic import semantic_segmentation
import cv2segment_image = semantic_segmentation()
segment_image.load_pascalvoc_model("pascal.h5")
output, segmap = segment_image.segmentAsPascalvoc("sample1.jpg")
cv2.imwrite("img.jpg", output)
print(output.shape)

使用此代码获取输出和覆盖分割的数组,

segmap, segoverlay = segment_image.segmentAsPascalvoc(overlay = True)
import pixellibfrom pixellib.semantic import semantic_segmentationimport cv2segment_image = semantic_segmentation()segment_image.load_pascalvoc_model("pascal.h5")segmap, segoverlay = segment_image.segmentAsPascalvoc("sample1.jpg", overlay= True)cv2.imwrite("img.jpg", segoverlay)print(segoverlay.shape)

使用PIXELLIB的实例分割:

基于Mask R-CNN框架的PixelLib实例分割。

实现实例分割的代码:

import pixellib
from pixellib.instance import instance_segmentationsegment_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 r-cnn模型执行实例分割的代码。从这里下载mask r-cnn模型。

  • https://github.com/ayoolaolafenwa/PixelLib/releases/download/1.2/mask_rcnn_coco.h5

segment_image.segmentImage("path_to_image", output_image_name = "output_image_path")

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

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

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

sample2.jpg:

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

这是当前工作目录中保存的图像。

可以使用边界框实现分割。这可以通过修改代码来实现。

segment_image.segmentImage("path_to_image", output_image_name = "output_image_path", show_bboxes = True)

我们添加了一个额外的参数show_bboxes并将其设置为true,分割掩码由边界框生成。

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

import pixellib
from pixellib.instance import instance_segmentation
import timesegment_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.87seconds

在图像上运行实例分割需要12.87秒。

Mask Rúu CNN模型是在microsoftco数据集上训练的,该数据集有80个公共对象类别。该模型可以对这些对象类别进行实例分割。

Coco数据集中的对象类别列表:

[‘BG’, ‘person’, ‘bicycle’, ‘car’, ‘motorcycle’, ‘airplane’, ‘bus’, ‘train’, ‘truck’, ‘boat’, ‘traffic light’, ‘fire hydrant’, ‘stop sign’, ‘parking meter’, ‘bench’, ‘bird’, ‘cat’, ‘dog’, ‘horse’, ‘sheep’, ‘cow’, ‘elephant’, ‘bear’, ‘zebra’, ‘giraffe’, ‘backpack’, ‘umbrella’, ‘handbag’, ‘tie’, ‘suitcase’, ‘frisbee’, ‘skis’, ‘snowboard’, ‘sports ball’, ‘kite’, ‘baseball bat’, ‘baseball glove’, ‘skateboard’, ‘surfboard’, ‘tennis racket’, ‘bottle’, ‘wine glass’, ‘cup’, ‘fork’, ‘knife’, ‘spoon’, ‘bowl’, ‘banana’, ‘apple’, ‘sandwich’, ‘orange’, ‘broccoli’, ‘carrot’, ‘hot dog’, ‘pizza’, ‘donut’, ‘cake’, ‘chair’, ‘couch’, ‘potted plant’, ‘bed’, ‘dining table’, ‘toilet’, ‘tv’, ‘laptop’, ‘mouse’, ‘remote’, ‘keyboard’, ‘cell phone’, ‘microwave’, ‘oven’, ‘toaster’, ‘sink’, ‘refrigerator’, ‘book’, ‘clock’, ‘vase’, ‘scissors’, ‘teddy bear’, ‘hair drier’, ‘toothbrush’]

PixelLib的专业用途有很多,例如分割。

获取以下数组:

  • 检测到的对象数组

  • 对象对应类的id数组

  • 分割掩码数组

  • 输出的数组

使用此代码

segmask, output = segment_image.segmentImage()

通过修改下面的实例分割代码,可以测试获取数组的代码并打印出输出的形状。

import pixellib
from pixellib.instance import instance_segmentation
import cv2instance_seg = instance_segmentation()
instance_seg.load_model("mask_rcnn_coco.h5")
segmask, output = instance_seg.segmentImage("sample2.jpg")
cv2.imwrite("img.jpg", output)
print(output.shape)

通过包含参数show_bboxes,获得带边界框的分割数组。

segmask, output = segment_image.segmentImage(show_bboxes = True)
import pixellib
from pixellib.instance import instance_segmentation
import cv2instance_seg = instance_segmentation()
instance_seg.load_model("mask_rcnn_coco.h5")
segmask, output = instance_seg.segmentImage("sample2.jpg", show_bboxes= True)
cv2.imwrite("img.jpg", output)
print(output.shape)

安装PixelLib并用你的图像来测试它。

访问PixelLib的官方github存储库。

  • https://github.com/ayoolaolafenwa/PixelLib

访问PixelLib的官方文档

  • https://pixellib.readthedocs.io/en/latest/

参考链接:https://towardsdatascience.com/image-segmentation-with-six-lines-0f-code-acb870a462e8

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

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

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

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

下载3:OpenCV实战项目20讲

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

交流群

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

使用PixelLib来实现图像分割相关推荐

  1. CV之IS:利用pixellib库基于deeplabv3_xception模型对《庆余年》片段实现语义分割/图像分割简单代码全实现

    CV之IS:利用pixellib库基于deeplabv3_xception模型对<庆余年>片段实现语义分割/图像分割简单代码全实现 目录 利用pixellib库基于deeplabv3_xc ...

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

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

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

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

  4. 5 行代码实现图像分割

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:机器学习算法那些事 图像分割,作为计算机视觉的基础,是图 ...

  5. 只需5行代码,手把手教你快速实现图像分割,代码逐行详解!

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 转载自:量子位 图像分割,作为计算机视觉的基础,是图像理解的重要组成部分,也是图像 ...

  6. Py之pixellib:pixellib库的简介、安装、经典案例之详细攻略

    Py之pixellib:pixellib库的简介.安装.经典案例之详细攻略 目录 pixellib库的简介 1.基础案例 pixellib库的安装 pixellib库的经典案例 1.使用pixelli ...

  7. 使用5行代码的实时图像分割

    目录 计算机视觉应用中的图像分割 图像分割 批处理图像分割 视频分割 摄像机视频的分割 计算机视觉应用中的图像分割 计算机视觉是计算机看到和分析他们所看到的东西的能力.图像分割是计算机视觉的一个方面, ...

  8. 图像分割技术语义分割代码_用5行代码对150类对象进行语义分割

    图像分割技术语义分割代码 It is now possible to perform segmentation on 150 classes of objects using ade20k model ...

  9. MindSpore部署图像分割示例程序

    MindSpore部署图像分割示例程序 本端侧图像分割Android示例程序使用Java实现,Java层主要通过Android Camera 2 API实现摄像头获取图像帧,进行相应的图像处理,之后调 ...

最新文章

  1. poj2352(树状数组)
  2. VS2010 调用RFC 时注意(.net4.0) 使用nco
  3. 在Docker中的ubuntu中安装Python3和Pip
  4. 计算机ip地址配置参数,指定电脑的IP地址和DNS等参数配置方法
  5. 视频教程-网络工程师小白入门--【思科CCNA、华为HCNA等网络工程师认证】-网络技术
  6. 基于python下django框架 实现校园二手书籍交易系统详细设计
  7. android offtime编程,OFFTIME - 做功课就憋玩手机了! - Android 应用 - iPad - 【最美应用】...
  8. 2022年全球与中国ODM和EMS网络硬件行业发展趋势及投资战略分析报告
  9. 设计模式 _第五招式_建造者模式
  10. 【java毕业设计】基于javaEE+SSM+MySql的个人博客系统设计与实现(毕业论文+程序源码)——个人博客系统
  11. 尚硅谷Redis6从入门到精通
  12. 魔兽世界服务器不显示角色信息,网易公告:部分服务器限制新角色创建功能
  13. APP的缓存文件到底应该存在哪?
  14. [机器学习]Logistic回归
  15. python之正则表达式2
  16. Excel 保存文件出现 您试图打开的文件类型(Excel 2007和更高版本的启用宏的工作簿和模板)被信任中心的文件阻止设置阻止
  17. SQL SERVER 2005安装:此计算机存在相同实例名解决办法
  18. Java集成移动云短信服务
  19. win10输入法变成繁体中文还原成简体中文的方法
  20. 基于数据中台的数据治理解决方案

热门文章

  1. 提高建模效率,改变手工作坊式生产,AutoML的技术研究与应用进展如何了?
  2. Facebook加入AI芯片大战,挖走Google芯片产品开发负责人
  3. 吴恩达晒妻又晒车,顺便宣布了一个重大消息
  4. MySQL + JSON = 王炸!!
  5. SpringBoot静态获取 bean的三种方式,你学会了吗?
  6. 推荐一个工作流自动化工具
  7. 如何使用 Arthas 定位 Spring Boot 接口超时 ?
  8. 老板说“把系统升级到https”,我用一个脚本实现了,而且永久免费!
  9. MySql 之 left join 避坑指南
  10. 通俗讲解从Transformer到BERT模型!