分割图片(ai怎么分割图片)

本文来自量子位。图像分割作为计算机视觉的基础,是图像理解的重要组成部分,也是图像处理的难点之一。那么,如何优雅得体地分割图像呢?5行代码,分分钟实现的库——Pi

本文来自量子位。

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

那么,如何优雅得体地分割图像呢?

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

5 行代码实现图像分割当然,对于这样一个简单易用的项目,开源是必须的。

为什么要使用图像分割?

虽然计算机视觉研究人员经常会遇到图像分割的问题,但我们还是要重复一遍(为了初学者方便)。

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

图像分割中使用的一些独特技术使得处理一些关键的计算机视觉任务成为可能。主要分为2类:

语义分割:即给图像中的每个像素点一个类别标签,用不同的颜色表示。

例子:它不需要标记每个像素,只需要找到感兴趣对象的边缘轮廓。

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

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

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

卫星图像分析等等。

因此,图像分割技术的应用仍然非常重要。

接下来,我们言归正传,开始认识PixelLib,一个神奇又好用的库。

PixelLib的快速安装

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

照例先介绍一下安装环境。

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

pip3 install tensorflowpip3 install pillowpip3 install opencv-pythonpip3 install scikit-imagepip3 install pixellib

PixelLib实现语义分段

PixelLib在执行语义切分任务时使用DeepalBV3+框架和在pascalvoc上预训练的Xception模型。

基于pascalvoc预训练的异常模型语义切分:

import pixellibfrom pixellib.semantic import semantic_segmentationsegment_image = semantic_segmentationsegment_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 pixellibfrom pixellib.semantic import semantic_segmentation#created an instance of semantic segmentation classsegment_image = semantic_segmentation

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

segment_image.load_pascalvoc_model(“deeplabv3_xception_tf_dim_ordering_tf_kernels.h5”)

调用函数加载在pascal voc上训练的Xcept模型(Xcept模型可以从文末的门户链接下载)。

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

这是分割图像的代码行。该函数包含两个参数:

Path_to_image:图像被分割的路径。

Path_to_output_image:保存输出图像的路径,图像将保存在您当前的工作目录中。

接下来上图,实战!

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

5 行代码实现图像分割执行代码如下:

import pixellibfrom pixellib.semantic import semantic_segmentationsegment_image = semantic_segmentationsegment_image.load_pascalvoc_model(“deeplabv3_xception_tf_dim_ordering_tf_kernels.h5”)segment_image.segmentAsPascalvoc(“sample1.jpg”, output_image_name = “image_new.jpg”)5 行代码实现图像分割如您所见,代码执行后,保存的图像中的所有对象都被分割。

您还可以稍微修改代码,以获得目标对象的分段覆盖图像。

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

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

5 行代码实现图像分割您可以通过修改以下代码来检查执行分段所需的推理时间。

import pixellibfrom pixellib.semantic import semantic_segmentationimport timesegment_image = semantic_segmentationsegment_image.load_pascalvoc_model(“pascal.h5”)start = time.timesegment_image.segmentAsPascalvoc(“sample1.jpg”, output_image_name= “image_new.jpg”)end = time.timeprint(f”Inference Time: {end-start:.2f}seconds”)

输出如下所示:

Inference Time: 8.19seconds

可以看到,对图像进行语义分割只用了8.19秒。

xception模型由pascalvoc数据集训练,共有20个常见的对象类别。

该对象及其对应的颜色映射如下:

5 行代码实现图像分割

PixelLib实现实例分段

虽然语义分割的结果看起来不错,但对于图像分割的一些特定任务来说,可能并不理想。

在语义分割中,相同类别的对象被给予相同的色彩映射表,因此语义分割可能不会提供特别充分的图像信息。

因此,实例分割诞生了——同一类别的对象被赋予不同的颜色图。

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

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

同样,我们先把每行代码反汇编一下。

import pixellibfrom pixellib.instance import instance_segmentationsegment_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,如下图所示。

5 行代码实现图像分割执行代码如下:

import pixellibfrom pixellib.instance import instance_segmentationsegment_image = instance_segmentationsegment_image.load_model(“mask_rcnn_coco.h5”)segment_image.segmentImage(“sample2.jpg”, output_image_name = “image_new.jpg”)5 行代码实现图像分割上图是保存到目录的图片。现在你可以看到语义分割和实例分割的明显区别——在实例分割中,同一类别的所有对象都被赋予不同的颜色图。

如果想用包围盒来实现分割,可以稍微修改一下代码:

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

通过这种方式,您可以获得包含分段遮罩和边界框的已保存图像。

5 行代码实现图像分割同样,也可以通过代码查询实例分段的推理时间:

import pixellibfrom pixellib.instance import instance_segmentationimport timesegment_image = instance_segmentationsegment_image.load_model(“mask_rcnn_coco.h5”)start = time.timesegment_image.segmentImage(“former.jpg”, output_image_name= “image_new.jpg”)end = time.timeprint(f”Inference Time: {end-start:.2f}seconds”)

输出结果如下:

Inference Time: 12.55 seconds

可以看出,对图像进行实例分割需要12.55秒。

入口

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

5 行代码实现图像分割

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/147327.html

发表回复

登录后才能评论