使用Python+OpenCV進(jìn)行圖像處理(二)
梯度(Gradient)
在數(shù)學(xué)中,梯度用于幾何地表示多變量函數(shù)圖形的斜率。由于它是一個(gè)向量值函數(shù),代表著方向和大小兩種屬性。在這里,我們也可以將同樣的概念引入到圖像的像素值中。圖像梯度表示像素強(qiáng)度或顏色模式的方向變化,因此可以通過(guò)梯度來(lái)定位邊緣。
# Apply gradient filtering
sobel_x = cv2.Sobel(img, cv2.CV_64F, dx = 1, dy = 0, ksize = 5)
sobel_y = cv2.Sobel(img, cv2.CV_64F, dx = 0, dy = 1, ksize = 5)
blended = cv2.a(chǎn)ddWeighted(src1=sobel_x, alpha=0.5, src2=sobel_y,
beta=0.5, gamma=0)
laplacian = cv2.Laplacian(img, cv2.CV_64F)
Sobel運(yùn)算同時(shí)使用高斯平滑和微分。我們通過(guò)cv2.Sobel()函數(shù)使用它,可以定義兩個(gè)不同的方向:垂直方向(sobelx)和水平方向(sobely)。dx和dy表示導(dǎo)數(shù)。當(dāng)dx = 1時(shí),通過(guò)計(jì)算像素值沿水平方向的導(dǎo)數(shù),從而進(jìn)行圖像濾波。
通過(guò)函數(shù)cv2.a(chǎn)ddWeighted()對(duì)sobelx和sobely的兩種過(guò)濾器加權(quán)求和,可以實(shí)現(xiàn)兩個(gè)方向上的梯度求解及圖像濾波。上述代碼中兩種過(guò)濾器設(shè)定了相同的權(quán)重。
拉普拉斯運(yùn)算使用的是x和y的二階導(dǎo)數(shù),數(shù)學(xué)表達(dá)式如下。
讓我們通過(guò)下方代碼更直觀的看看這些處理后圖像是什么樣的。
# Plot the images
images = [sobel_x, sobel_y, blended, laplacian]
plt.figure(figsize = (20, 20))
for i in range(4):
plt.subplot(1, 4, i+1)
plt.imshow(images[i], cmap = 'gray')
plt.a(chǎn)xis('off')
plt.show()
如上圖所示,第一幅和第二幅圖像均含有一個(gè)方向圖樣。在第一張圖中,我們可以清楚地看到垂直方向上的邊緣。在第二幅圖中,我們可以看到水平線。第三幅和第四幅圖像,兩個(gè)方向的邊緣都凸顯出來(lái)了。
形態(tài)轉(zhuǎn)換(Morpgological transformations)
通過(guò)濾波操作來(lái)轉(zhuǎn)換圖像的形態(tài)的技術(shù)稱為形態(tài)變換(morphological transformation)。首先,讓我們了解下腐蝕(erosion)和擴(kuò)張(dilation)。
腐蝕(Erosion) 是一種縮小圖形形態(tài)的技術(shù),通常被應(yīng)用在灰度圖上。過(guò)濾器的形狀可以是矩形、橢圓和交叉形狀。通過(guò)過(guò)濾器刪除給定區(qū)域下的全部0值。
代碼實(shí)現(xiàn)如下:
img = cv2.imread('simpson.jpg')
# Create erosion kernels
kernel_0 = np.ones((9, 9), np.uint8)
kernel_1 = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (9, 9))
kernel_2 = cv2.getStructuringElement(cv2.MORPH_CROSS, (9, 9))
kernels = [kernel_0, kernel_1, kernel_2]
# Plot the images
plt.figure(figsize = (20, 20))
for i in range(3):
img_copy = img.copy()
img_copy = cv2.erode(img_copy, kernels[i], iterations = 3)
plt.subplot(1, 3, i+1)
plt.imshow(img_copy)
plt.a(chǎn)xis('off')
plt.show()
上圖形象的展示出不同濾波器下的不同縮放結(jié)果。我們可以看到三張分別使用基礎(chǔ)(方形)濾波器、橢圓形濾波器和交叉濾波器處理過(guò)的結(jié)果圖?梢钥闯銎浞謩e以“圓形”、“線性”和“對(duì)角線”的方式進(jìn)行收縮。
擴(kuò)張(Dilation)與侵蝕是相反的。它是一種對(duì)圖形形態(tài)進(jìn)行放大的操作。其作用也與侵蝕相反。實(shí)現(xiàn)代碼如下。
# Apply dilation
kernel = np.ones((9, 9), np.uint8)
img_dilate = cv2.dilate(img, kernel, iterations = 3)
plt.figure(figsize = (20, 10))
plt.subplot(1, 2, 1); plt.imshow(img, cmap="gray")
plt.subplot(1, 2, 2); plt.imshow(img_dilate, cmap="gray")
plt.show()
開(kāi)閉運(yùn)算是侵蝕和擴(kuò)張的混合形式。開(kāi)運(yùn)算是指先進(jìn)行侵蝕,然后對(duì)侵蝕結(jié)果進(jìn)行擴(kuò)張操作。相對(duì)應(yīng)的,閉運(yùn)算是指先進(jìn)行擴(kuò)張,再進(jìn)行侵蝕。
正如上圖所示,閉運(yùn)算一般用于檢測(cè)圖形的整體輪廓,開(kāi)運(yùn)算用于檢測(cè)圖形的子模式(subpatterns)。可以使用函數(shù)cv2.morphologyEx()來(lái)實(shí)現(xiàn)這些操作。參數(shù)op用于指定使用哪種運(yùn)算類型(開(kāi)/閉)。完整代碼如下所示。
# Apply the operations
kernel = np.ones((9, 9), np.uint8)
img_open = cv2.morphologyEx(img, op= cv2.MORPH_OPEN, kernel)
img_close = cv2.morphologyEx(img, op= cv2.MORPH_CLOSE, kernel)
img_grad = cv2.morphologyEx(img, op= cv2.MORPH_GRADIENT, kernel)
img_tophat = cv2.morphologyEx(img, op= cv2.MORPH_TOPHAT, kernel)
img_blackhat = cv2.morphologyEx(img, op= cv2.MORPH_BLACKHAT, kernel)
# Plot the images
images = [img, img_open, img_close, img_grad,
img_tophat, img_blackhat]
fig, axs = plt.subplots(nrows = 2, ncols = 3, figsize = (15, 15))
for ind, p in enumerate(images):
ax = axs[ind//3, ind%3]
ax.imshow(p, cmap = 'gray')
ax.a(chǎn)xis('off')
plt.show()
注意,原圖中的手在分別使用開(kāi)閉操作進(jìn)行處理時(shí)會(huì)產(chǎn)生不同的結(jié)果。梯度濾波(MORPHCGRADIENT)運(yùn)算是計(jì)算擴(kuò)張結(jié)果圖與腐蝕結(jié)果圖之差。頂帽(Top-h(huán)at)運(yùn)算(MORPHTOPHAT)是計(jì)算開(kāi)運(yùn)算結(jié)果圖與原始圖像之差,黑帽(Black Hot)運(yùn)算(MORPH_BLACKHAT)是計(jì)算閉運(yùn)算結(jié)果圖與原始圖像之差。形態(tài)學(xué)運(yùn)算詳細(xì)介紹參看(https://homepages.inf.ed.a(chǎn)c.uk/rbf/HIPR2/morops.htm)。
總結(jié)與展望
本篇介紹了OpenCV中幾項(xiàng)比較常用的運(yùn)算。下篇將介紹輪廓檢測(cè)和人臉檢測(cè)等檢測(cè)技術(shù)。歡迎批評(píng)指正。

發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
最新活動(dòng)更多
-
8月5日立即報(bào)名>> 【在線會(huì)議】CAE優(yōu)化設(shè)計(jì):醫(yī)療器械設(shè)計(jì)的應(yīng)用案例與方案解析
-
8月14日立即報(bào)名>> 【在線研討會(huì)】解析安森美(onsemi)高精度與超低功耗CGM系統(tǒng)解決方案
-
精彩回顧立即查看>> 《2024智能制造產(chǎn)業(yè)高端化、智能化、綠色化發(fā)展藍(lán)皮書(shū)》
-
精彩回顧立即查看>> 7月30日- 8月1日 2025全數(shù)會(huì)工業(yè)芯片與傳感儀表展
-
精彩回顧立即查看>> 全數(shù)會(huì)2025(第六屆)機(jī)器人及智能工廠展
-
精彩回顧立即查看>> OFweek 2025 具身機(jī)器人動(dòng)力電池技術(shù)應(yīng)用大會(huì)
推薦專題
- 1 AI產(chǎn)業(yè)的新高度!英偉達(dá)成為全球首家市值破4萬(wàn)億美元的公司
- 2 傳魏建軍與賈躍亭合作,長(zhǎng)城汽車出海美國(guó)
- 3 一文讀懂:到底什么是 “具身智能” ?
- 4 黃仁勛:與雷軍長(zhǎng)期合作,共探AI智駕
- 5 具身智能泡沫爭(zhēng)議下,華映資本尋找「穿越周期者」
- 6 中國(guó)平安們欲靠AI守“陣地”
- 7 官宣:智元機(jī)器人借殼上市,A股人形機(jī)器人第一股!
- 8 華為讓渡“三界”銷售主導(dǎo)權(quán),智界高管:終于能全力奔跑了
- 9 借仿生手實(shí)現(xiàn)突圍,國(guó)產(chǎn)靈巧手破局“不可能三角”
- 10 DeepSeek R2加持,中國(guó)AI與芯片產(chǎn)業(yè)迎來(lái)新一輪協(xié)同進(jìn)化