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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

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

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

數(shù)據(jù)集

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

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

OpenCV讀取顯示圖像樣本

OpenCV讀取tif格式16位的圖像在于imread的第二個參數(shù),默認情況下會轉(zhuǎn)換為BGR彩色八位字節(jié)的圖像,如果這樣就是一片漆黑;這里選擇為-1表示不改變原圖像的通道數(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的圖像,但是實際上所有的標注信息只存在于red通道中,所以讀取以后,直接拆分通道,然后把red通道數(shù)據(jù)作為灰度圖像處理,因為灰度值太低了,顯示的時候我給擴大了點倍數(shù),直接把灰度圖像扔到聯(lián)通組件掃描的函數(shù)中,然后就可以看到結果了。相關代碼如下:

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()

標記的Mask信息原圖

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

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

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

對比與解決

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

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()
運行結果對比 - 可以發(fā)現(xiàn)白色區(qū)域沒有粘連,成功分割!

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

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







審核編輯:劉清

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

    關注

    26

    文章

    1268

    瀏覽量

    56382
  • OpenCV
    +關注

    關注

    29

    文章

    622

    瀏覽量

    41091

原文標題:新知 | OpenCV4中聯(lián)通組件分析的一個缺點

文章出處:【微信號:CVSCHOOL,微信公眾號:OpenCV學堂】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦

    OpenCV4.8 CUDA編程代碼教程

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

    OpenCV自帶組件HighGUI怎么使用?

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

    魯班貓0 -安裝opencv

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

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

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

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

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

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

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

    基于opencv4和Yolo-Fastest,實現(xiàn)PC和單片機通信,控制步進電機捕獲目標

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

    分享兩OpenCV圖像處理與分析的問題

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

    如何在Raspberry Pi 3上安裝OpenCV4

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

    OpenCV4SIFT算法概述

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

    OpenCV4源碼分析

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

    學習OpenCV4的系統(tǒng)化路線圖

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

    OpenCV4筆記之連通域分析

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

    OpenCV4圖像分析之BLOB特征分析

    BLOB是圖像灰度塊的種專業(yè)稱呼,更加變通點的可以說它跟我們前面二值圖像分析聯(lián)通組件類似
    的頭像 發(fā)表于 12-28 12:28 ?939次閱讀
    <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)是開源的計算機視覺和機器學習軟件庫,它提供了大量的圖像和視頻處理功能。
    的頭像 發(fā)表于 07-16 10:38 ?449次閱讀