《數(shù)字圖像處理-OpenCV/Python》連載:形態(tài)學(xué)圖像處理
本書(shū)京東 優(yōu)惠購(gòu)書(shū)鏈接 https://item.jd.com/14098452.html
本書(shū)CSDN 獨(dú)家連載專欄 https://blog.csdn.net/youcans/category_12418787.html
第 12 章 形態(tài)學(xué)圖像處理
形態(tài)學(xué)圖像處理是基于形狀的圖像處理,基本思想是利用各種形狀的結(jié)構(gòu)元進(jìn)行形態(tài)學(xué)運(yùn)算,從圖像中提取表達(dá)和描繪區(qū)域形狀的結(jié)構(gòu)信息。形態(tài)學(xué)運(yùn)算的數(shù)學(xué)原理是集合運(yùn)算,處理對(duì)象是黑色背景的二值對(duì)象或深色背景的灰度對(duì)象。
本章內(nèi)容概要
- 學(xué)習(xí)形態(tài)學(xué)運(yùn)算的基本操作:腐蝕、膨脹及各種形態(tài)學(xué)高級(jí)運(yùn)算。
- 介紹灰度形態(tài)學(xué)運(yùn)算。
- 理解形態(tài)學(xué)結(jié)構(gòu)元的意義,比較結(jié)構(gòu)元對(duì)形態(tài)學(xué)運(yùn)算的影響,構(gòu)造自定義結(jié)構(gòu)元。
- 學(xué)習(xí)常用的形態(tài)學(xué)算法,如邊界提取和線條細(xì)化。
- 理解形態(tài)學(xué)重建的思想和原理,介紹形態(tài)學(xué)重建的應(yīng)用,如邊界清除、孔洞填充、骨架提取、粒徑分離、粒度測(cè)定和角點(diǎn)檢測(cè)。
12.11 基于形態(tài)學(xué)的粒度測(cè)定
粒度測(cè)度是指確定圖像中顆粒的大小分布,屬于判斷圖像中顆粒尺寸分布的鄰域。
由于顆粒通常并不是整齊地分隔排列的,要通過(guò)逐個(gè)顆粒識(shí)別來(lái)計(jì)算顆粒數(shù)量非常困難?;谛螒B(tài)學(xué)的粒度測(cè)定,原理就是對(duì)于比背景亮且形狀規(guī)則的顆粒,使用逐漸增大的結(jié)構(gòu)元對(duì)圖像進(jìn)行開(kāi)運(yùn)算。
對(duì)于每次開(kāi)運(yùn)算得到的圖像,稱為表面區(qū)域。由于開(kāi)運(yùn)算會(huì)減小圖像中的亮特征,使表面區(qū)域隨結(jié)構(gòu)元的增大而減小,由此得到一個(gè)一維陣列。計(jì)算一維陣列中相鄰兩個(gè)元素的差并繪圖,曲線中的峰值代表圖像中主要大小顆粒的分布。
【例程1217】基于形態(tài)學(xué)的粒度測(cè)定
本例程是基于形態(tài)學(xué)的粒度測(cè)定,通過(guò)使用逐漸增大的結(jié)構(gòu)元對(duì)圖像執(zhí)行開(kāi)操作。
設(shè)置一個(gè)半徑從小到大的結(jié)構(gòu)元序列,依次對(duì)其做開(kāi)操作,并且統(tǒng)計(jì)圖像的總灰度值,計(jì)算相鄰灰度值的差。當(dāng)結(jié)構(gòu)元尺寸與圓形顆粒尺寸吻合時(shí),會(huì)產(chǎn)生一個(gè)局部灰度高峰。比較不同尺寸的灰度差序列,峰值所對(duì)應(yīng)的尺寸就是圓形顆粒的大致尺寸。
# 【1217】基于形態(tài)學(xué)的粒度測(cè)定
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
if __name__ == '__main__':
img = cv.imread("../images/Fig1208.png", flags=0) # 灰度圖像
_, imgBin = cv.threshold(img, 205, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU) # 二值處理 (黑色背景)
plt.figure(figsize=(9, 6))
plt.subplot(231), plt.axis("off"), plt.title("Original")
plt.imshow(img, cmap='gray')
# 用不同半徑圓形結(jié)構(gòu)元進(jìn)行開(kāi)運(yùn)算
rList = [14, 21, 28, 35, 42]
for i in range(5):
size = rList[i] * 2 + 1
element = cv.getStructuringElement(cv.MORPH_ELLIPSE, (size, size)) # 圓形結(jié)構(gòu)元
imgOpen = cv.morphologyEx(imgBin, cv.MORPH_OPEN, element)
plt.subplot(2, 3, i + 2), plt.title("Opening (r={})".format(rList[i]))
plt.imshow(cv.bitwise_not(imgOpen), cmap='gray'), plt.axis("off")
plt.tight_layout()
plt.show()
# 計(jì)算圓形直徑的半徑分布
maxSize = 42
sumSurf = np.zeros(maxSize)
deltaSum = np.zeros(maxSize)
for r in range(5, maxSize):
size = r * 2 + 1
element = cv.getStructuringElement(cv.MORPH_ELLIPSE, (size, size)) # 圓形結(jié)構(gòu)元
imgOpen = cv.morphologyEx(img, cv.MORPH_OPEN, element)
sumSurf[r] = np.concatenate(imgOpen).sum()
deltaSum[r] = sumSurf[r-1] - sumSurf[r]
print(r, sumSurf[r], deltaSum[r])
r = range(maxSize)
plt.figure(figsize=(6, 4))
plt.plot(r[6:], deltaSum[6:], 'b-o')
plt.title("Delta of surface area")
plt.yticks([])
plt.show()
運(yùn)行結(jié)果:
基于形態(tài)學(xué)算法進(jìn)行不同半徑的粒度篩分如圖12-17。不同半徑的粒度分布統(tǒng)計(jì)圖如圖12-18所示。
圖12-17 基于形態(tài)學(xué)算法進(jìn)行不同半徑的粒度篩分
圖12-18 不同半徑的粒度分布統(tǒng)計(jì)圖
程序說(shuō)明:
(1) 圖12-17(1)所示為原始圖像,圖12-17(2)~(6)所示為使用不同直徑的圓形結(jié)構(gòu)元對(duì)原始圖像進(jìn)行腐蝕的結(jié)果。小于圓形結(jié)構(gòu)元尺寸的圓形都被完全腐蝕,而大于圓形結(jié)構(gòu)元尺寸的圓形得以保留。不同直徑的圓形結(jié)構(gòu)元,相當(dāng)于不同粒徑的篩子,起到了篩分作用。
(2) 圖12-18所示的橫坐標(biāo)是粒度半徑r,縱坐標(biāo)是半徑r所對(duì)應(yīng)的像素值。圖中出現(xiàn)了3個(gè)明顯的峰值,峰值對(duì)應(yīng)的尺寸就是圖中圓形顆粒的特征半徑。
版權(quán)聲明:
youcans@xupt 原創(chuàng)作品,轉(zhuǎn)載必須標(biāo)注原文鏈接:(https://blog.csdn.net/youcans/article/details/136113194)
Copyright 2024 youcans, XUPT
Crated:2024-02-14文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-827883.html
《數(shù)字圖像處理-OpenCV/Python》 獨(dú)家連載專欄 : https://blog.csdn.net/youcans/category_12418787.html文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-827883.html
到了這里,關(guān)于《數(shù)字圖像處理-OpenCV/Python》連載:形態(tài)學(xué)圖像處理的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!