1. 程式人生 > 程式設計 >5行Python程式碼實現影象分割的步驟詳解

5行Python程式碼實現影象分割的步驟詳解

眾所周知影象是由若干有意義的畫素組成的,影象分割作為計算機視覺的基礎,對具有現有目標和較精確邊界的影象進行分割,實現在影象畫素級別上的分類任務。

5行Python程式碼實現影象分割的步驟詳解

影象分割可分為語義分割和例項分割兩類,區別如下:

  • 語義分割:將影象中每個畫素賦予一個類別標籤,用不同的顏色來表示;
  • 例項分割:無需對每個畫素進行標記,只需要找到感興趣物體的邊緣輪廓。

影象分割通常應用如下所示:

  • 專業檢測:應用於專業場景的影象分析,比如在衛星影象中識別建築、道路、森林,或在醫學影象中定位病灶、測量面積等;
  • 智慧交通:識別道路資訊,包括車道標記、交通標誌等。

本部落格主要通過PixelLib模組幫助使用者快速便捷實現影象分割。

5行Python程式碼實現影象分割的步驟詳解

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的顏色格式進行。此函式有兩個必選引數:

  • path_to_image:分割的目標影象的路徑;
  • path_to_output_image:儲存分割後輸出影象的路徑。

將路徑替換為自己環境路徑即可,程式碼如下所示:

segment_image.segmentAsPascalvoc("path_to_image",output_image_name = "path_to_output_image")

上傳影象,語義分割後效果如下所示:

5行Python程式碼實現影象分割的步驟詳解

也可以生成了帶有分段疊加層的影象,只需要將segmentAsPascalvoc()函式的overlay屬性設定為True,程式碼如下所示:

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

分段疊加層效果如下所示:

5行Python程式碼實現影象分割的步驟詳解

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()函式對影象執行例項分割。此函式有兩個必選引數:

  • path_to_image:模型要預測的影象的路徑;
  • output_image_name:儲存分割結果的路徑。

將路徑替換為自己環境路徑即可,程式碼如下所示:

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

上傳影象,即時分割後效果如下所示:

5行Python程式碼實現影象分割的步驟詳解

也可以生成分割蒙版邊界框,只需要將show_bboxes()函式的overlay屬性設定為True,程式碼如下所示:

segment_image.segmentImage("sample2.jpg",show_bboxes = True)

生成分割蒙版邊界框效果如下所示:

5行Python程式碼實現影象分割的步驟詳解

到此這篇關於5行Python程式碼實現影象分割的步驟詳解的文章就介紹到這了,更多相關Python 影象分割內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!