使用Python+OpenCV進(jìn)行圖像處理(三)
檢測是計算機(jī)視覺任務(wù)中的主要任務(wù)之一,而且應(yīng)用很廣泛。檢測技術(shù)可以幫助人類檢測那些容易被肉眼忽略的錯誤;也可以”幫助“自動駕駛汽車感知空間信息。無疑自動化的檢測技術(shù)的廣泛應(yīng)用將為我們帶來效率與安全。
本篇是這個系列的第三篇。整個系列目錄如下:
理解顏色模型與在圖像上繪制圖形(圖像處理基本操作)。
基本的圖像處理與濾波技術(shù)。
從特征檢測到人臉檢測。
輪廓檢測
之前已經(jīng)介紹了幾種顏色模型以及如何在圖像上繪制圖形。還介紹了常用的圖像處理技術(shù),如:模糊、梯度、腐蝕、擴(kuò)張等。本篇將把這些技術(shù)應(yīng)用到圖像特征檢測和人臉檢測中。
本篇會用到本系列前兩篇中介紹的圖像處理技術(shù)。
邊緣檢測 (Edge Detection)
邊緣檢測本質(zhì)上是檢測圖像中變化劇烈或者不連續(xù)的像素點。將這些像素點連接線段即為邊。實際上,在上一篇文章中我們已經(jīng)介紹了一種基礎(chǔ)的邊緣檢測技術(shù):使用Sobel算子和拉普拉斯算子進(jìn)行梯度濾波。通過計算圖像像素值在給定方向上的導(dǎo)數(shù),梯度濾波器即可以描繪出圖像的邊緣從而實現(xiàn)邊緣檢測。
Canny檢測算法是另外一種圖像邊緣檢測技術(shù)。而且是目前最流行的邊緣檢測技術(shù)之一,分為以下四個步驟實現(xiàn):降噪、判斷梯度及梯度方向、非最大值抑制和滯后閾值化處理。
首先通過高斯模糊技術(shù)實現(xiàn)降噪。然后,使用sobel算子得到圖像梯度。接著使用得到的梯度,檢測每一個像素點與其中周圍的像素點,確認(rèn)這個像素點是不是這些局部像素點中的局部最大值。如果不是局部最大值,則將這個點的像素值置為零(完全缺失,黑色)。這個過程即為非極大值抑制。
如果這個點被確認(rèn)為局部最大值,則進(jìn)行下一步即第四個步驟。第四步是決定之前檢測出的邊是否為真正邊緣的最后一個決策階段。這一決策階段被稱為滯后閾值化,它需要兩個閾值(“較小閾值”、“較大閾值”)來進(jìn)行決策。
給定兩個不同的閾值,我們可以得到三個閾值化區(qū)間。因此,如果這個點的像素值大于兩個閾值中的“較大閾值”則被判定為邊緣點。相對地,如果其小于所設(shè)定的兩個閾值參數(shù)中的“較小閾值”則被認(rèn)定為非邊緣點,即會被丟棄。另外,如果這個點的像素值位于兩個參數(shù)閾值之間則是跟據(jù)其是否與”確認(rèn)邊緣點“之間有連接來決定是否丟棄,遵循有連接則不丟棄的原則。
img = cv2.imread('images/giraffe.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# Canny detection without blurring
edges = cv2.Canny(image=img, threshold1=127, threshold2=127)
plt.figure(figsize = (20, 20))
plt.subplot(1, 2, 1); plt.imshow(img)
plt.a(chǎn)xis('off')
plt.subplot(1, 2, 2); plt.imshow(edges)
plt.a(chǎn)xis('off')
上方僅使用了一個閾值中值作判斷,也沒有進(jìn)行圖像模糊處理,邊緣檢測結(jié)果不是很理想。接下來讓我們嘗試不同的參數(shù)閾值設(shè)定:
# Set the lower and upper threshold
med_val = np.median(img)
lower = int(max(0, .7*med_val))
upper = int(min(255, 1.3*med_val))
為了更直觀的比較模糊化對圖像邊緣檢測的影響,將使用兩種不同尺寸的卷積核(5x5)與(9x9)。設(shè)定兩種閾值參數(shù),一種在上述閾值設(shè)定的基礎(chǔ)上將“較大閾值”增加100。也就意味著我們會得到四種不同的組合結(jié)果圖。如下:
# Blurring with ksize = 5
img_k5 = cv2.blur(img, ksize = (5, 5))
# Canny detection with different thresholds
edges_k5 = cv2.Canny(img_k5, threshold1 = lower, threshold2 = upper)
edges_k5_2 = cv2.Canny(img_k5, lower, upper+100)
# Blurring with ksize = 9
img_k9 = cv2.blur(img, ksize = (9, 9))
# Canny detection with different thresholds
edges_k9 = cv2.Canny(img_k9, lower, upper)
edges_k9_2 = cv2.Canny(img_k9, lower, upper+100)
# Plot the images
images = [edges_k5, edges_k5_2, edges_k9, edges_k9_2]
plt.figure(figsize = (20, 15))
for i in range(4):
plt.subplot(2, 2, i+1)
plt.imshow(images[i])
plt.a(chǎn)xis('off')
plt.show()
正如上圖所示,模糊化可以幫助減少噪聲。我們在使用卷積核尺寸為(9x9)時得到了更好的結(jié)果。而且,在使用更大的“較大閾值”時得到了更好的邊緣檢測結(jié)果。
請輸入評論內(nèi)容...
請輸入評論/評論長度6~500個字
最新活動更多
-
即日-10.29立即報名>> 2024德州儀器嵌入式技術(shù)創(chuàng)新發(fā)展研討會
-
10月31日立即下載>> 【限時免費下載】TE暖通空調(diào)系統(tǒng)高效可靠的組件解決方案
-
即日-11.13立即報名>>> 【在線會議】多物理場仿真助跑新能源汽車
-
11月14日立即報名>> 2024工程師系列—工業(yè)電子技術(shù)在線會議
-
12月19日立即報名>> 【線下會議】OFweek 2024(第九屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會
-
即日-12.26火熱報名中>> OFweek2024中國智造CIO在線峰會
推薦專題
- 1 Intel宣布40年來最重大轉(zhuǎn)型:年底前裁員15000人、拋掉2/3房產(chǎn)
- 2 因美封殺TikTok,字節(jié)股價骨折!估值僅Meta1/5
- 3 宏山激光重磅發(fā)布行業(yè)解決方案,助力智能制造產(chǎn)業(yè)新飛躍
- 4 國產(chǎn)AI芯片公司破產(chǎn)!白菜價拍賣
- 5 具身智能火了,但規(guī)模落地還需時間
- 6 三次錯失風(fēng)口!OpenAI前員工殺回AI編程賽道,老東家捧金相助
- 7 國產(chǎn)英偉達(dá)們,抓緊沖刺A股
- 8 英特爾賦能智慧醫(yī)療,共創(chuàng)數(shù)字化未來
- 9 英偉達(dá)的麻煩在后頭?
- 10 將“網(wǎng)紅”變成“商品”,AI“爆改”實力拉滿
- 高級軟件工程師 廣東省/深圳市
- 自動化高級工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級銷售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術(shù)專家 廣東省/江門市
- 封裝工程師 北京市/海淀區(qū)
- 結(jié)構(gòu)工程師 廣東省/深圳市