0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何優(yōu)雅且體面的圖像分割

OpenCV學(xué)堂 ? 來(lái)源:量子位 ? 作者:量子位 ? 2022-08-24 09:10 ? 次閱讀

圖像分割,作為計(jì)算機(jī)視覺(jué)的基礎(chǔ),是圖像理解的重要組成部分,也是圖像處理的難點(diǎn)之一。

那么,如何優(yōu)雅且體面的圖像分割?

5行代碼、分分鐘實(shí)現(xiàn)的庫(kù)——PixelLib,了解一下。

當(dāng)然,如此好用的項(xiàng)目,開(kāi)源是必須的。

為什么要用到圖像分割?

雖然計(jì)算機(jī)視覺(jué)研究工作者,會(huì)經(jīng)常接觸圖像分割的問(wèn)題,但是我們還是需要對(duì)其做下“贅述”(方便初學(xué)者)。

我們都知道每個(gè)圖像都是有一組像素值組成。簡(jiǎn)單來(lái)說(shuō),圖像分割就是在像素級(jí)上,對(duì)圖像進(jìn)行分類的任務(wù)。

圖像分割中使用的一些“獨(dú)門(mén)秘技”,使它可以處理一些關(guān)鍵的計(jì)算機(jī)視覺(jué)任務(wù)。主要分為2類:

語(yǔ)義分割:就是把圖像中每個(gè)像素賦予一個(gè)類別標(biāo)簽,用不同的顏色來(lái)表示。

實(shí)例分割:它不需要對(duì)每個(gè)像素進(jìn)行標(biāo)記,它只需要找到感興趣物體的邊緣輪廓就行。

它的身影也經(jīng)常會(huì)出現(xiàn)在比較重要的場(chǎng)景中:

無(wú)人駕駛汽車視覺(jué)系統(tǒng),可以有效的理解道路場(chǎng)景。

醫(yī)療圖像分割,可以幫助醫(yī)生進(jìn)行診斷測(cè)試。

衛(wèi)星圖像分析,等等。

所以,圖像分割技術(shù)的應(yīng)用還是非常重要的。

接下來(lái),我們就直奔主題,開(kāi)始了解一下PixelLib,這個(gè)神奇又好用的庫(kù)。

快速安裝PixelLib

PixelLib這個(gè)庫(kù)可以非常簡(jiǎn)單的實(shí)現(xiàn)圖像分割——5行代碼就可以實(shí)現(xiàn)語(yǔ)義分割和實(shí)例分割。

老規(guī)矩,先介紹一下安裝環(huán)境。

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

pip3installtensorflow
pip3installpillow
pip3installopencv-python
pip3installscikit-image
pip3installpixellib

PixelLib實(shí)現(xiàn)語(yǔ)義分割

PixelLib在執(zhí)行語(yǔ)義分割任務(wù)時(shí),采用的是Deeplabv3+框架,以及在pascalvoc上預(yù)訓(xùn)練的Xception模型。

用在pascalvoc上預(yù)訓(xùn)練的Xception模型執(zhí)行語(yǔ)義分割:

importpixellib
frompixellib.semanticimportsemantic_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”)

讓我們看一下每行代碼:

importpixellib
frompixellib.semanticimportsemantic_segmentation

#createdaninstanceofsemanticsegmentationclass
segment_image=semantic_segmentation()

用于執(zhí)行語(yǔ)義分割的類,是從pixellib導(dǎo)入的,創(chuàng)建了一個(gè)類的實(shí)例。

segment_image.load_pascalvoc_model(“deeplabv3_xception_tf_dim_ordering_tf_kernels.h5”)

調(diào)用函數(shù)來(lái)加載在pascal voc上訓(xùn)練的xception模型(xception模型可以從文末傳送門(mén)鏈接處下載)。

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

這是對(duì)圖像進(jìn)行分割的代碼行,這個(gè)函數(shù)包含了兩個(gè)參數(shù)

path_to_image:圖像被分割的路徑。

path_to_output_image:保存輸出圖像的路徑,圖像將被保存在你當(dāng)前的工作目錄中。

接下來(lái),上圖,實(shí)戰(zhàn)!

圖像文件命名為:sample1.jpg,如下圖所示。

執(zhí)行代碼如下:

importpixellib
frompixellib.semanticimportsemantic_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”)

可以看到,在執(zhí)行代碼后,保存的圖像中,所有對(duì)象都被分割了。

也可以對(duì)代碼稍作修改,獲取一張帶有目標(biāo)對(duì)象分割重疊(segmentation overlay)的圖像。

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

添加了一個(gè)額外的參數(shù),并設(shè)置為T(mén)rue,就生成了帶有分隔疊加的圖像。

可以通過(guò)修改下面的代碼,來(lái)檢查執(zhí)行分割所需的推理時(shí)間。

importpixellib
frompixellib.semanticimportsemantic_segmentation
importtime
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”InferenceTime:{end-start:.2f}seconds”)

輸出如下:

InferenceTime:8.19seconds

可以看到,在圖像上執(zhí)行語(yǔ)義分割,只用了8.19秒。

這個(gè)xception模型是用pascalvoc數(shù)據(jù)集訓(xùn)練的,有20個(gè)常用對(duì)象類別。

對(duì)象及其相應(yīng)的color map如下所示:

a247dbfc-22e5-11ed-ba43-dac502259ad0.png

PixelLib實(shí)現(xiàn)實(shí)例分割

雖然語(yǔ)義分割的結(jié)果看起來(lái)還不錯(cuò),但在圖像分割的某些特定任務(wù)上,可能就不太理想。

在語(yǔ)義分割中,相同類別的對(duì)象被賦予相同的colormap,因此語(yǔ)義分割可能無(wú)法提供特別充分的圖像信息。

于是,便誕生了實(shí)例分割——同一類別的對(duì)象被賦予不同的colormap。

PixelLib在執(zhí)行實(shí)例分割時(shí),基于的框架是Mask RCNN,代碼如下:

importpixellib
frompixellib.instanceimportinstance_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”)

同樣,我們先來(lái)拆解一下每行代碼。

importpixellib
frompixellib.instanceimportinstance_segmentation
segment_image=instance_segmentation()

導(dǎo)入了用于執(zhí)行實(shí)例分割的類,創(chuàng)建了該類的一個(gè)實(shí)例。

segment_image.load_model(“mask_rcnn_coco.h5”)

這是加載 Mask RCNN 模型來(lái)執(zhí)行實(shí)例分割的代碼(Mask RCNN模型可以從文末傳送門(mén)鏈接處下載)。

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

這是對(duì)圖像進(jìn)行實(shí)例分割的代碼,它需要兩個(gè)參數(shù):

path_to_image:模型所要預(yù)測(cè)圖像的路徑。

output_image_name:保存分割結(jié)果的路徑,將被保存在當(dāng)前的工作目錄中。

上圖,實(shí)戰(zhàn)第二彈!

圖像文件命名為:sample2.jpg,如下圖所示。

執(zhí)行代碼如下:

importpixellib
frompixellib.instanceimportinstance_segmentation
segment_image=instance_segmentation()
segment_image.load_model(“mask_rcnn_coco.h5”)
segment_image.segmentImage(“sample2.jpg”,output_image_name=“image_new.jpg”)

上圖便是保存到目錄的圖片,現(xiàn)在可以看到語(yǔ)義分割和實(shí)例分割之間的明顯區(qū)別——在實(shí)例分割中,同一類別的所有對(duì)象,都被賦予了不同的colormap。

若是想用邊界框(bounding box)來(lái)實(shí)現(xiàn)分割,可以對(duì)代碼稍作修改:

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

這樣,就可以得到一個(gè)包含分割蒙版和邊界框的保存圖像。

同樣的,也可以通過(guò)代碼查詢實(shí)例分割的推理時(shí)間:

importpixellib
frompixellib.instanceimportinstance_segmentation
importtime
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”InferenceTime:{end-start:.2f}seconds”)

輸出結(jié)果如下:

InferenceTime:12.55seconds

可以看到,在圖像上執(zhí)行實(shí)例分割,需要12.55秒的時(shí)間。

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 圖像分割
    +關(guān)注

    關(guān)注

    4

    文章

    180

    瀏覽量

    17930
  • 計(jì)算機(jī)視覺(jué)

    關(guān)注

    8

    文章

    1685

    瀏覽量

    45811
  • 無(wú)人駕駛
    +關(guān)注

    關(guān)注

    98

    文章

    3975

    瀏覽量

    119622

原文標(biāo)題:簡(jiǎn)單粗暴,5行代碼,快速實(shí)現(xiàn)圖像分割

文章出處:【微信號(hào):CVSCHOOL,微信公眾號(hào):OpenCV學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何使用Arduino和圖形LCD創(chuàng)建體面的游戲

    在本教程中,我們將學(xué)習(xí)如何使用 Arduino 和圖形 LCD 創(chuàng)建體面的游戲。
    的頭像 發(fā)表于 11-15 17:29 ?1741次閱讀
    如何使用Arduino和圖形LCD創(chuàng)建<b class='flag-5'>體面的</b>游戲

    基于改進(jìn)遺傳算法的圖像分割方法

    基于改進(jìn)遺傳算法的圖像分割方法提出一種應(yīng)用于圖像分割的改進(jìn)遺傳算法,算法中引入了優(yōu)生算子、改進(jìn)的變異算子和新個(gè)體,避免了局部早熟,提高了收斂速度和全局收斂能力。   關(guān)鍵詞:
    發(fā)表于 09-19 09:36

    【Firefly RK3399試用體驗(yàn)】之三——基于閾值的圖像分割

    :先使用Otsu默認(rèn)的分割閾值進(jìn)行分割,代碼如下:運(yùn)行結(jié)果如下:然后分別設(shè)一個(gè)低一點(diǎn)的閾值和高一點(diǎn)的閾值,代碼如下:運(yùn)行結(jié)果如下: 圖中左上角為原圖,右上角為Otsu算法分割圖像,左
    發(fā)表于 07-06 20:30

    PCB缺陷檢測(cè)中圖像分割算法

    圖像分割圖像處理中占有重要的地位,分割結(jié)果的好壞直接影響圖像的后續(xù)處理。本文介紹了4種常用的圖像
    發(fā)表于 06-16 15:31 ?0次下載
    PCB缺陷檢測(cè)中<b class='flag-5'>圖像</b><b class='flag-5'>分割</b>算法

    圖像分割—基于圖的圖像分割

    圖像分割—基于圖的圖像分割圖像分割—基于圖的圖像
    發(fā)表于 11-19 16:17 ?0次下載

    基于Matlab圖像分割的研究

    圖像分割圖像處理過(guò)渡到圖像分析這個(gè)過(guò)程中起著非常重要的作用,它是圖像工程的核心,圖像
    發(fā)表于 01-04 15:10 ?0次下載

    圖像分割圖像邊緣檢測(cè)

     圖像分割的研究多年來(lái)一直受到人們的高度重視,至今提出了各種類型的分割算法。Pal把圖像分割算法分成了6類:閾值
    發(fā)表于 12-19 09:29 ?1.1w次閱讀
    <b class='flag-5'>圖像</b><b class='flag-5'>分割</b>和<b class='flag-5'>圖像</b>邊緣檢測(cè)

    圖像分割技術(shù)的原理及應(yīng)用

    圖像分割至今尚無(wú)通用的自身理論。隨著各學(xué)科許多新理論和新方法的提出,出現(xiàn)了許多與一些特定理論、方法相結(jié)合的圖像分割方法。特征空間聚類法進(jìn)行圖像
    發(fā)表于 12-19 15:00 ?4.1w次閱讀
    <b class='flag-5'>圖像</b><b class='flag-5'>分割</b>技術(shù)的原理及應(yīng)用

    圖像分割的基本方法解析

    本文詳細(xì)介紹了圖像分割的基本方法有:基于邊緣的圖像分割方法、閾值分割方法、區(qū)域分割方法、基于圖論
    發(fā)表于 12-20 11:06 ?10.9w次閱讀
    <b class='flag-5'>圖像</b><b class='flag-5'>分割</b>的基本方法解析

    基于內(nèi)容的圖像分割方法綜述

    圖像分割是指將圖像分成若干具有相似性質(zhì)的區(qū)域的過(guò)程,是許多圖像處理任務(wù)的預(yù)處理步驟.近年來(lái),國(guó)內(nèi)外學(xué)者主要研究基于圖像內(nèi)容的
    發(fā)表于 01-02 16:52 ?2次下載
    基于內(nèi)容的<b class='flag-5'>圖像</b><b class='flag-5'>分割</b>方法綜述

    人體分割識(shí)別圖像技術(shù)的原理及應(yīng)用

    人體分割識(shí)別圖像技術(shù)是一種將人體從圖像分割出來(lái),并對(duì)人體進(jìn)行識(shí)別和特征提取的技術(shù)。該技術(shù)主要利用計(jì)算機(jī)視覺(jué)和圖像處理算法對(duì)人體
    的頭像 發(fā)表于 06-15 17:44 ?969次閱讀

    什么是圖像分割?圖像分割的體系結(jié)構(gòu)和方法

    圖像分割(Image Segmentation)是計(jì)算機(jī)視覺(jué)領(lǐng)域中的一項(xiàng)重要基礎(chǔ)技術(shù),是圖像理解中的重要一環(huán)。前端時(shí)間,數(shù)據(jù)科學(xué)家Derrick Mwiti在一篇文章中,就什么是圖像
    的頭像 發(fā)表于 08-18 10:34 ?4627次閱讀
    什么是<b class='flag-5'>圖像</b><b class='flag-5'>分割</b>?<b class='flag-5'>圖像</b><b class='flag-5'>分割</b>的體系結(jié)構(gòu)和方法

    機(jī)器人視覺(jué)技術(shù)中常見(jiàn)的圖像分割方法

    機(jī)器人視覺(jué)技術(shù)中的圖像分割方法是一個(gè)廣泛深入的研究領(lǐng)域。圖像分割是將圖像劃分為多個(gè)區(qū)域或?qū)ο蟮?/div>
    的頭像 發(fā)表于 07-09 09:31 ?239次閱讀

    圖像分割和語(yǔ)義分割的區(qū)別與聯(lián)系

    圖像分割和語(yǔ)義分割是計(jì)算機(jī)視覺(jué)領(lǐng)域中兩個(gè)重要的概念,它們?cè)?b class='flag-5'>圖像處理和分析中發(fā)揮著關(guān)鍵作用。 1. 圖像
    的頭像 發(fā)表于 07-17 09:55 ?327次閱讀

    圖像語(yǔ)義分割的實(shí)用性是什么

    圖像語(yǔ)義分割是一種重要的計(jì)算機(jī)視覺(jué)任務(wù),它旨在將圖像中的每個(gè)像素分配到相應(yīng)的語(yǔ)義類別中。這項(xiàng)技術(shù)在許多領(lǐng)域都有廣泛的應(yīng)用,如自動(dòng)駕駛、醫(yī)學(xué)圖像分析、機(jī)器人導(dǎo)航等。 一、
    的頭像 發(fā)表于 07-17 09:56 ?228次閱讀