(编辑:jimmy 日期: 2024/11/14 浏览:2)
众所周知图像是由若干有意义的像素组成的,图像分割作为计算机视觉的基础,对具有现有目标和较精确边界的图像进行分割,实现在图像像素级别上的分类任务。
图像分割可分为语义分割和实例分割两类,区别如下:
图像分割通常应用如下所示:
本博客主要通过PixelLib模块帮助用户快速便捷实现图像分割。
1、环境部署
在进行项目设计前,需要安装所需的第三方库文件:TensorFlow、Pillow、OpenCV-Python、scikit-image和PixelLib,指令如下所示:
pip install tensorflow pip install pillow pip install opencv-python pip install scikit-image pip install pixellib
2、语义分割
PixelLib使用Deeplabv3+框架实现语义分割,在pascalvoc数据集上训练的Xception模型用于语义分割。
第1步:导入PixelLib模块,代码如下所示:
import pixellib from pixellib.semantic import semantic_segmentation
第2步:创建用于执行语义分割的类实例,代码如下所示:
segment_image = semantic_segmentation()
第3步:调用load_pascalvoc_model()函数加载在Pascal voc上训练的Xception模型,代码如下所示:
segment_image.load_pascalvoc_model("deeplabv3_xception_tf_dim_ordering_tf_kernels.h5")
第4步:调用segmentAsPascalvoc()函数对图像进行分割,并且分割采用pascalvoc的颜色格式进行。此函数有两个必选参数:
将路径替换为自己环境路径即可,代码如下所示:
segment_image.segmentAsPascalvoc("path_to_image", output_image_name = "path_to_output_image")
上传图像,语义分割后效果如下所示:
也可以生成了带有分段叠加层的图像,只需要将segmentAsPascalvoc()函数的overlay属性设置为True,代码如下所示:
segment_image.segmentAsPascalvoc("sample1.jpg", output_image_name = "image_new.jpg", overlay = True)
分段叠加层效果如下所示:
3、即时分割
PixelLib的实例分割基于MaskRCNN框架实现,也仅需5行Python代码实现。
第1步:导入PixelLib模块,代码如下所示:
import pixellib from pixellib.instance import instance_segmentation
第2步:导入用于执行实例细分的类并创建该类的实例,代码如下所示:
segment_image = instance_segmentation()
第3步:调用load_model()函数加载Mask RCNN模型以执行实例分割的代码,代码如下所示:
segment_image.load_model("mask_rcnn_coco.h5")
第4步:调用segmentImage()函数对图像执行实例分割。此函数有两个必选参数:
将路径替换为自己环境路径即可,代码如下所示:
segment_image.segmentImage("path_to_image", output_image_name = "output_image_path")
上传图像,即时分割后效果如下所示:
也可以生成分割蒙版边界框,只需要将show_bboxes()函数的overlay属性设置为True,代码如下所示:
segment_image.segmentImage("sample2.jpg", output_image_name = "image_new.jpg", show_bboxes = True)
生成分割蒙版边界框效果如下所示: