【youcans 的 OpenCV 例程200篇】125. 形态算法之提取连通分量
歡迎關(guān)注 『youcans 的 OpenCV 例程 200 篇』 系列,持續(xù)更新中
歡迎關(guān)注 『youcans 的 OpenCV學(xué)習(xí)課』 系列,持續(xù)更新中
【youcans 的 OpenCV 例程 200 篇】125. 形態(tài)算法之提取連通分量
3. 形態(tài)學(xué)算法
形態(tài)學(xué)處理的主要應(yīng)用是提取圖像中用來表示和描述形狀的元素和成分,例如提取邊界、連通分量、凸殼和區(qū)域骨架。
3.3 提取連通分量
從二值圖像中提取連通分量是自動(dòng)圖像分析的核心步驟。
約束膨脹提取連通分量:
岡薩雷斯《數(shù)字圖像處理(第四版)》提供了一種提取連通分量的形態(tài)學(xué)算法,構(gòu)造一個(gè)元素為 0 的陣列 X0X_0X0?,其中對(duì)應(yīng)連通分量的像素值為 1,采用迭代過程可以得到所有的連通分量:
Xk=(Xk?1⊕B)∩I,k=1,2,3...X_k = (X_{k-1} \oplus B) \cap I, \ k=1,2,3... Xk?=(Xk?1?⊕B)∩I,?k=1,2,3...
該算法與約束膨脹孔洞填充的思路相同,使用條件膨脹來限制膨脹的增長,但用 III 代替 IcI^cIc 以尋找前景點(diǎn)。
對(duì)于內(nèi)含多個(gè)連通分量的圖像 A,從僅為連通分量 A1 內(nèi)部的某個(gè)像素 B 開始,用 3*3的結(jié)構(gòu)元不斷進(jìn)行膨脹。由于其它連通分量與 A1 之間至少有一條像素寬度的空隙,每次膨脹都不會(huì)產(chǎn)生位于其它連通區(qū)域內(nèi)的點(diǎn)。用每次膨脹后的圖像與原始圖像 A 取交集,就把膨脹限制在 A1 內(nèi)部。隨著集合 B 的不斷膨脹,B 的區(qū)域不斷生長,但又被限制在連通分量 A1 的內(nèi)部,最終就會(huì)充滿整個(gè)連通分量 A1,從而實(shí)現(xiàn)對(duì)連通分量 A1 的提取。
提取連通分量的過程也是對(duì)連通分量的標(biāo)注,通常給圖像中的每個(gè)連通區(qū)分配編號(hào),在輸出圖像中該連通區(qū)內(nèi)的所有的像素值賦值為對(duì)應(yīng)的區(qū)域編號(hào),這樣的輸出圖像被稱為標(biāo)注圖像。
例程 10.13:形態(tài)算法之提取連通分量
# # 10.13 約束膨脹算法提取連通分量# 本算法參考:岡薩雷斯《數(shù)字圖像處理(第四版)》 9.5.3 提取連通分量# 圖像為二值化圖像,255 白色為目標(biāo)物,0 黑色為背景imgGray = cv2.imread("../images/Fig0918a.tif", flags=0) # flags=0 讀取為灰度圖像# 預(yù)處理ret, imgThresh = cv2.threshold(imgGray, 200, 255, cv2.THRESH_BINARY_INV) # 二值化處理kernel = np.ones((3, 3), dtype=np.uint8) # 生成盒式卷積核imgClose = cv2.morphologyEx(imgThresh, cv2.MORPH_CLOSE, kernel) # 閉運(yùn)算,消除噪點(diǎn)imgErode = cv2.erode(imgClose, kernel=kernel) # 腐蝕運(yùn)算,腐蝕亮點(diǎn)imgBin = imgErodeimgBinCopy = imgBin.copy() # 復(fù)制 imgBinxBinary = np.zeros(imgBin.shape, np.uint8) # 大小與 img 相同,像素值為 0kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3)) # 3×3結(jié)構(gòu)元count = [] # 為了記錄連通分量中的像素個(gè)數(shù)while imgBinCopy.any(): # 循環(huán)迭代,直到 imgBinCopy 中的像素值全部為0Xa_copy, Ya_copy = np.where(imgBinCopy > 0) # imgBinCopy 中值為255的像素的坐標(biāo)xBinary[Xa_copy[0]][Ya_copy[0]] = 255 # 選取第一個(gè)點(diǎn),并將 xBinary 中對(duì)應(yīng)像素值改為255# 約束膨脹,先對(duì) xBinary 膨脹,再與 imgBin 執(zhí)行與操作(取交集)for i in range(100):dilation_B = cv2.dilate(xBinary, kernel)xBinary = cv2.bitwise_and(imgBin, dilation_B)# 取 xBinary 值為255的像素坐標(biāo),并將 imgBinCopy 中對(duì)應(yīng)坐標(biāo)像素值變?yōu)?Xb, Yb = np.where(xBinary > 0)imgBinCopy[Xb, Yb] = 0# 顯示連通分量及其包含像素?cái)?shù)量count.append(len(Xb))lenCount = len(count)if lenCount == 0:print("無連通分量")elif lenCount == 1:print("第1個(gè)連通分量為{}".format(count[0]))else:print("第{}個(gè)連通分量為{}".format(len(count), count[-1]-count[-2]))# print(count)plt.figure(figsize=(12, 6))plt.subplot(231), plt.axis('off'), plt.title("origin")plt.imshow(imgGray, cmap='gray', vmin=0, vmax=255)plt.subplot(232), plt.title("threshold"), plt.axis('off')plt.imshow(imgBin, cmap='gray', vmin=0, vmax=255)plt.subplot(233), plt.title("closed image"), plt.axis('off')plt.imshow(imgClose, cmap='gray', vmin=0, vmax=255)plt.subplot(234), plt.title("eroded image"), plt.axis('off')plt.imshow(imgErode, cmap='gray', vmin=0, vmax=255)plt.subplot(235), plt.title("xBinary"), plt.axis('off')plt.imshow(xBinary, cmap='gray', vmin=0, vmax=255)plt.subplot(236), plt.title("binary copy"), plt.axis('off')plt.imshow(imgBinCopy, cmap='gray', vmin=0, vmax=255)plt.tight_layout()plt.show()(本節(jié)完)
版權(quán)聲明:
youcans@xupt 原創(chuàng)作品,轉(zhuǎn)載必須標(biāo)注原文鏈接:(https://blog.csdn.net/youcans/article/details/123457062)
Copyright 2022 youcans, XUPT
Crated:2022-3-12
歡迎關(guān)注 『youcans 的 OpenCV 例程 200 篇』 系列,持續(xù)更新中
歡迎關(guān)注 『youcans 的 OpenCV學(xué)習(xí)課』 系列,持續(xù)更新中
【youcans 的 OpenCV 例程200篇】01. 圖像的讀取(cv2.imread)
【youcans 的 OpenCV 例程200篇】02. 圖像的保存(cv2.imwrite)
【youcans 的 OpenCV 例程200篇】03. 圖像的顯示(cv2.imshow)
【youcans 的 OpenCV 例程200篇】04. 用 matplotlib 顯示圖像(plt.imshow)
【youcans 的 OpenCV 例程200篇】05. 圖像的屬性(np.shape)
【youcans 的 OpenCV 例程200篇】06. 像素的編輯(img.itemset)
【youcans 的 OpenCV 例程200篇】07. 圖像的創(chuàng)建(np.zeros)
【youcans 的 OpenCV 例程200篇】08. 圖像的復(fù)制(np.copy)
【youcans 的 OpenCV 例程200篇】09. 圖像的裁剪(cv2.selectROI)
【youcans 的 OpenCV 例程200篇】10. 圖像的拼接(np.hstack)
【youcans 的 OpenCV 例程200篇】11. 圖像通道的拆分(cv2.split)
【youcans 的 OpenCV 例程200篇】12. 圖像通道的合并(cv2.merge)
【youcans 的 OpenCV 例程200篇】13. 圖像的加法運(yùn)算(cv2.add)
【youcans 的 OpenCV 例程200篇】14. 圖像與標(biāo)量相加(cv2.add)
【youcans 的 OpenCV 例程200篇】15. 圖像的加權(quán)加法(cv2.addWeight)
【youcans 的 OpenCV 例程200篇】16. 不同尺寸的圖像加法
【youcans 的 OpenCV 例程200篇】17. 兩張圖像的漸變切換
【youcans 的 OpenCV 例程200篇】18. 圖像的掩模加法
【youcans 的 OpenCV 例程200篇】19. 圖像的圓形遮罩
【youcans 的 OpenCV 例程200篇】20. 圖像的按位運(yùn)算
【youcans 的 OpenCV 例程200篇】21. 圖像的疊加
【youcans 的 OpenCV 例程200篇】22. 圖像添加非中文文字
【youcans 的 OpenCV 例程200篇】23. 圖像添加中文文字
【youcans 的 OpenCV 例程200篇】24. 圖像的仿射變換
【youcans 的 OpenCV 例程200篇】25. 圖像的平移
【youcans 的 OpenCV 例程200篇】26. 圖像的旋轉(zhuǎn)(以原點(diǎn)為中心)
【youcans 的 OpenCV 例程200篇】27. 圖像的旋轉(zhuǎn)(以任意點(diǎn)為中心)
【youcans 的 OpenCV 例程200篇】28. 圖像的旋轉(zhuǎn)(直角旋轉(zhuǎn))
【youcans 的 OpenCV 例程200篇】29. 圖像的翻轉(zhuǎn)(cv2.flip)
【youcans 的 OpenCV 例程200篇】30. 圖像的縮放(cv2.resize)
【youcans 的 OpenCV 例程200篇】31. 圖像金字塔(cv2.pyrDown)
【youcans 的 OpenCV 例程200篇】32. 圖像的扭變(錯(cuò)切)
【youcans 的 OpenCV 例程200篇】33. 圖像的復(fù)合變換
【youcans 的 OpenCV 例程200篇】34. 圖像的投影變換
【youcans 的 OpenCV 例程200篇】35. 圖像的投影變換(邊界填充)
【youcans 的 OpenCV 例程200篇】36. 直角坐標(biāo)與極坐標(biāo)的轉(zhuǎn)換
【youcans 的 OpenCV 例程200篇】37. 圖像的灰度化處理和二值化處理
【youcans 的 OpenCV 例程200篇】38. 圖像的反色變換(圖像反轉(zhuǎn))
【youcans 的 OpenCV 例程200篇】39. 圖像灰度的線性變換
【youcans 的 OpenCV 例程200篇】40. 圖像分段線性灰度變換
【youcans 的 OpenCV 例程200篇】41. 圖像的灰度變換(灰度級(jí)分層)
【youcans 的 OpenCV 例程200篇】42. 圖像的灰度變換(比特平面分層)
【youcans 的 OpenCV 例程200篇】43. 圖像的灰度變換(對(duì)數(shù)變換)
【youcans 的 OpenCV 例程200篇】44. 圖像的灰度變換(伽馬變換)
【youcans 的 OpenCV 例程200篇】45. 圖像的灰度直方圖
【youcans 的 OpenCV 例程200篇】46. 直方圖均衡化
【youcans 的 OpenCV 例程200篇】47. 圖像增強(qiáng)—直方圖匹配
【youcans 的 OpenCV 例程200篇】48. 圖像增強(qiáng)—彩色直方圖匹配
【youcans 的 OpenCV 例程200篇】49. 圖像增強(qiáng)—局部直方圖處理
【youcans 的 OpenCV 例程200篇】50. 圖像增強(qiáng)—直方圖統(tǒng)計(jì)量圖像增強(qiáng)
【youcans 的 OpenCV 例程200篇】51. 圖像增強(qiáng)—直方圖反向追蹤
【youcans 的 OpenCV 例程200篇】52. 圖像的相關(guān)與卷積運(yùn)算
【youcans 的 OpenCV 例程200篇】53. Scipy 實(shí)現(xiàn)圖像二維卷積
【youcans 的 OpenCV 例程200篇】54. OpenCV 實(shí)現(xiàn)圖像二維卷積
【youcans 的 OpenCV 例程200篇】55. 可分離卷積核
【youcans 的 OpenCV 例程200篇】56. 低通盒式濾波器
【youcans 的 OpenCV 例程200篇】57. 低通高斯濾波器
【youcans 的 OpenCV 例程200篇】58. 非線性濾波—中值濾波
【youcans 的 OpenCV 例程200篇】59. 非線性濾波—雙邊濾波
【youcans 的 OpenCV 例程200篇】60. 非線性濾波—聯(lián)合雙邊濾波
【youcans 的 OpenCV 例程200篇】61. 導(dǎo)向?yàn)V波(Guided filter)
【youcans 的 OpenCV 例程200篇】62. 圖像銳化——鈍化掩蔽
【youcans 的 OpenCV 例程200篇】63. 圖像銳化——Laplacian 算子
【youcans 的 OpenCV 例程200篇】64. 圖像銳化——Sobel 算子
【youcans 的 OpenCV 例程200篇】65. 圖像銳化——Scharr 算子
【youcans 的 OpenCV 例程200篇】66. 圖像濾波之低通/高通/帶阻/帶通
【youcans 的 OpenCV 例程200篇】67. 空間域圖像增強(qiáng)的綜合應(yīng)用
【youcans 的 OpenCV 例程200篇】68. 空間域圖像增強(qiáng)的綜合應(yīng)用
【youcans 的 OpenCV 例程200篇】69. 連續(xù)非周期信號(hào)的傅立葉系數(shù)
【youcans 的 OpenCV 例程200篇】70. 一維連續(xù)函數(shù)的傅里葉變換
【youcans 的 OpenCV 例程200篇】71. 連續(xù)函數(shù)的取樣
【youcans 的 OpenCV 例程200篇】72. 一維離散傅里葉變換
【youcans 的 OpenCV 例程200篇】73. 二維連續(xù)傅里葉變換
【youcans 的 OpenCV 例程200篇】74. 圖像的抗混疊
【youcans 的 OpenCV 例程200篇】75. Numpy 實(shí)現(xiàn)圖像傅里葉變換
【youcans 的 OpenCV 例程200篇】76. OpenCV 實(shí)現(xiàn)圖像傅里葉變換
【youcans 的 OpenCV 例程200篇】77. OpenCV 實(shí)現(xiàn)快速傅里葉變換
【youcans 的 OpenCV 例程200篇】78. 頻率域圖像濾波基礎(chǔ)
【youcans 的 OpenCV 例程200篇】79. 頻率域圖像濾波的基本步驟
【youcans 的 OpenCV 例程200篇】80. 頻率域圖像濾波詳細(xì)步驟
【youcans 的 OpenCV 例程200篇】81. 頻率域高斯低通濾波器
【youcans 的 OpenCV 例程200篇】82. 頻率域巴特沃斯低通濾波器
【youcans 的 OpenCV 例程200篇】83. 頻率域低通濾波:印刷文本字符修復(fù)
【youcans 的 OpenCV 例程200篇】84. 由低通濾波器得到高通濾波器
【youcans 的 OpenCV 例程200篇】85. 頻率域高通濾波器的應(yīng)用
【youcans 的 OpenCV 例程200篇】86. 頻率域?yàn)V波應(yīng)用:指紋圖像處理
【youcans 的 OpenCV 例程200篇】87. 頻率域鈍化掩蔽
【youcans 的 OpenCV 例程200篇】88. 頻率域拉普拉斯高通濾波
【youcans 的 OpenCV 例程200篇】89. 帶阻濾波器的傳遞函數(shù)
【youcans 的 OpenCV 例程200篇】90. 頻率域陷波濾波器
【youcans 的 OpenCV 例程200篇】91. 高斯噪聲、瑞利噪聲、愛爾蘭噪聲
【youcans 的 OpenCV 例程200篇】92. 指數(shù)噪聲、均勻噪聲、椒鹽噪聲
【youcans 的 OpenCV 例程200篇】93. 噪聲模型的直方圖
【youcans 的 OpenCV 例程200篇】94. 算術(shù)平均濾波器
【youcans 的 OpenCV 例程200篇】95. 幾何均值濾波器
【youcans 的 OpenCV 例程200篇】96. 諧波平均濾波器
【youcans 的 OpenCV 例程200篇】97. 反諧波平均濾波器
【youcans 的 OpenCV 例程200篇】98. 統(tǒng)計(jì)排序?yàn)V波器
【youcans 的 OpenCV 例程200篇】99. 修正阿爾法均值濾波器
【youcans 的 OpenCV 例程200篇】100. 自適應(yīng)局部降噪濾波器
【youcans 的 OpenCV 例程200篇】101. 自適應(yīng)中值濾波器
【youcans 的 OpenCV 例程200篇】102. 陷波帶阻濾波器的傳遞函數(shù)
【youcans 的 OpenCV 例程200篇】103. 陷波帶阻濾波器消除周期噪聲干擾
【youcans 的 OpenCV 例程200篇】104. 運(yùn)動(dòng)模糊退化模型
【youcans 的 OpenCV 例程200篇】105. 湍流模糊退化模型
【youcans 的 OpenCV 例程200篇】106. 退化圖像的逆濾波
【youcans 的 OpenCV 例程200篇】107. 退化圖像的維納濾波
【youcans 的 OpenCV 例程200篇】108. 約束最小二乘方濾波
【youcans 的 OpenCV 例程200篇】109. 幾何均值濾波
【youcans 的 OpenCV 例程200篇】110. 投影和雷登變換
【youcans 的 OpenCV 例程200篇】111. 雷登變換反投影重建圖像
【youcans 的 OpenCV 例程200篇】112. 濾波反投影重建圖像
【youcans 的 OpenCV 例程200篇】113. 形態(tài)學(xué)操作之腐蝕
【youcans 的 OpenCV 例程200篇】114. 形態(tài)學(xué)操作之膨脹
【youcans 的 OpenCV 例程200篇】115. 形態(tài)學(xué)操作之開運(yùn)算
【youcans 的 OpenCV 例程200篇】116. 形態(tài)學(xué)操作之閉運(yùn)算
【youcans 的 OpenCV 例程200篇】117. 形態(tài)學(xué)操作之頂帽運(yùn)算
【youcans 的 OpenCV 例程200篇】118. 形態(tài)學(xué)操作之底帽運(yùn)算
【youcans 的 OpenCV 例程200篇】119. 圖像的形態(tài)學(xué)梯度
【youcans 的 OpenCV 例程200篇】120. 擊中-擊不中變換
【youcans 的 OpenCV 例程200篇】121. 擊中-擊不中用于特征識(shí)別
【youcans 的 OpenCV 例程200篇】122. 形態(tài)算法之邊界提取
【youcans 的 OpenCV 例程200篇】123. 形態(tài)算法之孔洞填充
【youcans 的 OpenCV 例程200篇】124. 孔洞填充的泛洪算法
【youcans 的 OpenCV 例程200篇】125. 形態(tài)算法之提取連通分量
總結(jié)
以上是生活随笔為你收集整理的【youcans 的 OpenCV 例程200篇】125. 形态算法之提取连通分量的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pcl从一个点云里面导出下标
- 下一篇: 【转】常用的风控算法模型评价指标