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

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

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

OpenCV4中聯(lián)通組件分析的一個(gè)缺點(diǎn)

OpenCV學(xué)堂 ? 來源:OpenCV學(xué)堂 ? 2024-01-04 15:51 ? 次閱讀

數(shù)據(jù)集

最近別人給了我一個(gè)生物數(shù)據(jù)分割的標(biāo)注數(shù)據(jù)集,讓我訓(xùn)練一下,發(fā)現(xiàn)這個(gè)數(shù)據(jù)集比較詭異,圖像格式是tif的16位的浮點(diǎn)數(shù),OpenCV讀取過來要顯示得先轉(zhuǎn)換,然后它的Mask是PNG的帶透明通道,最坑人的是Mask標(biāo)記都是1、只有相互連接的對(duì)象標(biāo)記才相互不同。官方給出的原始圖像解析以后是這樣:

0c28d444-aad6-11ee-8b88-92fbcf53809c.png

OpenCV讀取顯示圖像樣本

OpenCV讀取tif格式16位的圖像在于imread的第二個(gè)參數(shù),默認(rèn)情況下會(huì)轉(zhuǎn)換為BGR彩色八位字節(jié)的圖像,如果這樣就是一片漆黑;這里選擇為-1表示不改變?cè)瓐D像的通道數(shù)據(jù)信息,這樣就可以讀取原始圖像數(shù)據(jù)了,然后轉(zhuǎn)換為32f的,再歸一化到0~1之間,直接顯示即可。代碼如下:

importnumpyasnp
img=cv.imread("D:/11111.tif",-1)#uint16
img_16=img.astype(np.float32)
cv.normalize(img_16,img_16,0,1,cv.NORM_MINMAX)
img_16.astype(np.float32)
result=np.uint8(img_16*255)
cv.imwrite('D:/tensor_cv2.jpg',result)

0c32a4a6-aad6-11ee-8b88-92fbcf53809c.jpg

OpenCV讀取顯示Mask圖像

Mask圖像是帶透明通道的RGBA的圖像,但是實(shí)際上所有的標(biāo)注信息只存在于red通道中,所以讀取以后,直接拆分通道,然后把red通道數(shù)據(jù)作為灰度圖像處理,因?yàn)榛叶戎堤土?,顯示的時(shí)候我給擴(kuò)大了點(diǎn)倍數(shù),直接把灰度圖像扔到聯(lián)通組件掃描的函數(shù)中,然后就可以看到結(jié)果了。相關(guān)代碼如下:

importnumpyasnp
img=cv.imread("D:/11111.png")#uint16
bb,gg,rr=cv.split(img)
h,w,c=img.shape
print(img.shape,img.dtype)
numOfcons,labels=cv.connectedComponents(rr)

colors=[]
foriinrange(numOfcons):
b=np.random.randint(0,256)
g=np.random.randint(0,256)
r=np.random.randint(0,256)
colors.append((b,g,r))

colors[0]=(0,0,0)
image=np.zeros((h,w,3),dtype=np.uint8)
forrowinrange(h):
forcolinrange(w):
image[row,col]=colors[labels[row,col]]

cv.imshow("coloredlabels",image)
cv.imwrite("D:/opencv_labels.png",image)
cv.imshow("bgr",rr*100)
cv.waitKey(0)
cv.destroyAllWindows()

標(biāo)記的Mask信息原圖

0c3b9584-aad6-11ee-8b88-92fbcf53809c.jpg

基于聯(lián)通組件查找以后的彩色顯示(注意白色粘連)

0c49233e-aad6-11ee-8b88-92fbcf53809c.png

對(duì)比與解決

對(duì)比之后發(fā)現(xiàn),OpenCV中聯(lián)通組件掃描以后把不同標(biāo)簽的樣本粘連在一起了,這個(gè)是因?yàn)镺penCV尋找聯(lián)通組件只分為兩種值0為背景,非0就作為前景,不做灰度級(jí)別區(qū)分的聯(lián)通域識(shí)別,所以導(dǎo)致了粘連。這個(gè)時(shí)候,只要用skimage庫的函數(shù)來替換OpenCV的聯(lián)通組件掃描就可以避免粘連了,因?yàn)閟kimage庫的聯(lián)通組件掃描支持獨(dú)立標(biāo)簽分級(jí)。代碼演示如下:

importskimage.io
importskimage.morphology

#Loadoneimageafteruncompressingmasks.zip
gt=skimage.io.imread("D:/11111.png")

#Keepfirstchannelonly
gt=gt[:,:,0]

#Labelindependentconnectedcomponents
gt=skimage.morphology.label(gt)
colors=[]
foriinrange(150):
b=np.random.randint(0,256)
g=np.random.randint(0,256)
r=np.random.randint(0,256)
colors.append((b,g,r))
colors[0]=(0,0,0)
h,w=gt.shape
image=np.zeros((h,w,3),dtype=np.uint8)
forrowinrange(h):
forcolinrange(w):
image[row,col]=colors[gt[row,col]]

#Displayimageoruseasneeded
cv.imshow("coloredlabels",image)
cv.imwrite("D:/labels.png",image)
cv.waitKey(0)
cv.destroyAllWindows()
運(yùn)行結(jié)果對(duì)比 - 可以發(fā)現(xiàn)白色區(qū)域沒有粘連,成功分割!

0c4f4af2-aad6-11ee-8b88-92fbcf53809c.png

希望OpenCV遲早有一天可以支持這種分級(jí)的區(qū)域聯(lián)通組件掃描算法。







審核編輯:劉清

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

    關(guān)注

    27

    文章

    1272

    瀏覽量

    56511
  • OpenCV
    +關(guān)注

    關(guān)注

    29

    文章

    623

    瀏覽量

    41184

原文標(biāo)題:新知 | OpenCV4中聯(lián)通組件分析的一個(gè)缺點(diǎn)

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    OpenCV4.8 CUDA編程代碼教程

    OpenCV4支持通過GPU實(shí)現(xiàn)CUDA加速執(zhí)行,實(shí)現(xiàn)對(duì)OpenCV圖像處理程序的加速運(yùn)行,當(dāng)前支持加速的模塊包括如下。
    的頭像 發(fā)表于 12-05 09:56 ?916次閱讀
    <b class='flag-5'>OpenCV</b>4.8 CUDA編程代碼教程

    OpenCV自帶組件HighGUI怎么使用?

    將介紹OpenCV自帶組件HighGUI的簡單使用。當(dāng)我們?cè)跍y試算法,查看算法效果的時(shí)候,需要用到可視化,動(dòng)態(tài)調(diào)參的界面,也可能需要監(jiān)聽鼠標(biāo),鍵盤等的動(dòng)作,這時(shí),HighGUI就發(fā)揮大作用了,HighGUI作為
    發(fā)表于 11-05 06:54

    魯班貓0 -安裝opencv

    ON要等那么會(huì)兒,結(jié)事之后就可以make了:sudo make -j4這里就是漫長的等待,我這里大約兩個(gè)小時(shí)結(jié)束結(jié)束后執(zhí)行sudo make install配置#opencv4.pc
    發(fā)表于 04-09 13:29

    Yuzuki Lizard 全志V851S開發(fā)板 –編譯 OPENCV 4.5.4

    ,設(shè)定) 到此編譯成功 6、編譯出來的文件 動(dòng)態(tài)庫文件 /usr/local/lib/ 文件庫 /usr/local/include/opencv4/ 注意下面步驟成功編譯出來的固件,是不含動(dòng)態(tài)庫
    發(fā)表于 05-08 09:22

    CMake在Linux 6.1.1-1.0.0搜索包opencv損壞了嗎?

    我有個(gè) cmake 項(xiàng)目,使用以下 CMake 語句從 Yocto Linux SDK 導(dǎo)入 OpenCV 庫: find_package (需要OpenCV ) 在
    發(fā)表于 05-09 11:32

    中聯(lián)通公開招募3G電子渠道合作企業(yè)

    中聯(lián)通公開招募3G電子渠道合作企業(yè)      12月11日消息,中國聯(lián)通12月10日發(fā)布公告,開始面向社會(huì)公開招募社會(huì)電子渠
    發(fā)表于 12-11 09:42 ?547次閱讀

    基于opencv4和Yolo-Fastest,實(shí)現(xiàn)PC和單片機(jī)通信,控制步進(jìn)電機(jī)捕獲目標(biāo)

    效果視頻 基于opencv4和yolo,實(shí)現(xiàn)PC和單片機(jī)通信,控制步進(jìn)電機(jī)捕獲目標(biāo)
    發(fā)表于 11-23 17:36 ?16次下載
    基于<b class='flag-5'>opencv4</b>和Yolo-Fastest,實(shí)現(xiàn)PC和單片機(jī)通信,控制步進(jìn)電機(jī)捕獲目標(biāo)

    分享兩個(gè)OpenCV圖像處理與分析的問題

    仔細(xì)觀察圖,可以看到兩個(gè)最直接的是靶心有十字交叉線,而在OpenCV形態(tài)學(xué)處理,支持十字交叉結(jié)構(gòu)元素,所以我們可以先檢測兩條線,然后獲取十字交叉結(jié)構(gòu),最后對(duì)結(jié)構(gòu)進(jìn)行輪廓
    的頭像 發(fā)表于 08-22 09:40 ?887次閱讀

    如何在Raspberry Pi 3上安裝OpenCV4

    今天我們將學(xué)習(xí)如何在 Raspberry Pi 3 上安裝 OpenCV4 庫,以便我們可以將其用于計(jì)算機(jī)視覺應(yīng)用程序。這將允許 OpenCV 在像 Pi 這樣的便攜式設(shè)備上運(yùn)行,從而打開許多可能性的大門。所以讓我們開始吧
    的頭像 發(fā)表于 09-08 16:09 ?1553次閱讀
    如何在Raspberry Pi 3上安裝<b class='flag-5'>OpenCV4</b>庫

    OpenCV4SIFT算法概述

    SIFT特征是非常穩(wěn)定的圖像特征,在圖像搜索、特征匹配、圖像分類檢測等方面應(yīng)用十分廣泛,但是它的缺點(diǎn)也是非常明顯,就是計(jì)算量比較大,很難實(shí)時(shí),所以對(duì)些實(shí)時(shí)要求比較高的常見SIFT算法還是無法適用。
    的頭像 發(fā)表于 11-23 09:48 ?1430次閱讀

    OpenCV4源碼分析

    宏定義必須寫在函數(shù)之外,其作用域是 #define 開始,到源程序結(jié)束。如果要提前結(jié)束它的作用域則用 #undef 命令
    的頭像 發(fā)表于 02-22 10:00 ?885次閱讀
    <b class='flag-5'>OpenCV4</b>源碼<b class='flag-5'>分析</b>

    學(xué)習(xí)OpenCV4的系統(tǒng)化路線圖

    OpenCV4發(fā)布測試版本開始,作者就直關(guān)注!根據(jù)自己近十年圖像處理OpenCV開發(fā)相關(guān)工作經(jīng)驗(yàn),花了七個(gè)月的時(shí)間,針對(duì)OpenCV4
    的頭像 發(fā)表于 07-05 11:30 ?563次閱讀
    學(xué)習(xí)<b class='flag-5'>OpenCV4</b>的系統(tǒng)化路線圖

    OpenCV4筆記之連通域分析

    連通:若 S 是圖像個(gè)像素子集,對(duì)于任意的 。如果存在條由 S 像素組成的從 p 到 q 的通路,則稱 p 在像素集 S
    的頭像 發(fā)表于 12-25 17:16 ?823次閱讀
    <b class='flag-5'>OpenCV4</b>筆記之連通域<b class='flag-5'>分析</b>

    OpenCV4圖像分析之BLOB特征分析

    BLOB是圖像灰度塊的種專業(yè)稱呼,更加變通點(diǎn)的可以說它跟我們前面二值圖像分析聯(lián)通組件類似
    的頭像 發(fā)表于 12-28 12:28 ?1115次閱讀
    <b class='flag-5'>OpenCV4</b>圖像<b class='flag-5'>分析</b>之BLOB特征<b class='flag-5'>分析</b>

    opencv-python和opencv樣嗎

    樣。OpenCV(Open Source Computer Vision Library)是個(gè)開源的計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)軟件庫,它提供了大量的圖像和視頻處理功能。
    的頭像 發(fā)表于 07-16 10:38 ?699次閱讀