使用OpenCV進(jìn)行對象檢測
點(diǎn)擊上方“小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時(shí)間送達(dá)

目標(biāo)檢測是圖像處理的重要組成部分。自動(dòng)駕駛汽車必須檢測車道,路面,其他車輛,人,標(biāo)志和信號(hào)等。我們生活在一個(gè)動(dòng)態(tài)的世界中,一切都在不斷變化。對象檢測的應(yīng)用無處不在。
我們正在研究自動(dòng)駕駛汽車的深度學(xué)習(xí)和計(jì)算機(jī)視覺。特征檢測是對象檢測的任務(wù)之一。那么,什么是特征檢測?對于人類,我們了解圖案,形狀,大小,顏色,長度以及其他可識(shí)別物體的物體。它也有點(diǎn)類似于計(jì)算機(jī)。
特征可以是形狀,邊緣,長度等任何形式,也可以是所有特征的組合。在我們之前有DeepFake檢測的項(xiàng)目,我們使用MSE(均方誤差),PSNR(峰值信噪比),SSIM(結(jié)構(gòu)相似性指數(shù))和直方圖作為特征從真實(shí)圖像中識(shí)別DeepFake圖像。
一個(gè)好的算法必須是可重復(fù)的和可擴(kuò)展的。例如,假設(shè)目標(biāo)是從大量圖像中檢測狗,其中還包含貓和其他動(dòng)物的圖像。

關(guān)于特征的表述,它必須是獨(dú)特的,并且需要在大多數(shù)數(shù)據(jù)中顯示。如果我們有大部分與上述兩張圖片相似的圖片,那么這里的不好的特征是什么?
在這種情況下,一個(gè)不好的特征就是耳朵的大小。我們的理解是狗耳朵的大小通常較大。但這不是示例圖像中的原因。在第一個(gè)圖像中,狗的耳朵與貓相似,甚至更小。如果我們僅使用耳廓大小作為特征來僅使用這兩個(gè)圖像來訓(xùn)練模型,則我們將有50%的真陰性或假陽性。這帶來了另一個(gè)重要的觀點(diǎn)。如果您想在模型中獲得更高的成功,則應(yīng)謹(jǐn)慎選擇該功能。大小尺寸也不是一個(gè)好的特征。
我們的目標(biāo)是識(shí)別其他物體,例如道路上的卡車。我們可以使用哈里斯角點(diǎn)檢測或精巧邊緣檢測之類的技術(shù)來檢測邊緣。我們需要將汽車,行人,標(biāo)志與圖像分開。我們可以使用OpenCV專門識(shí)別卡車。
import cv2cv2.matchTemplate()
模板匹配只是一種將輸入圖像復(fù)制到模板圖像上,并在模板圖像下比較模板圖像和輸入圖像的技術(shù)。它返回一個(gè)灰度圖像,表示該模板與多少個(gè)像素匹配。OpenCV提供了許多模板匹配方法。這是相關(guān)系數(shù)的數(shù)學(xué)公式。

一旦在兩個(gè)圖像中都找到匹配項(xiàng),它將選出相似點(diǎn)。OpenCV官方文檔在此處提供了帶有代碼示例的詳細(xì)信息。讓我們找到路上的卡車。
import cv2import numpy as npimport matplotlib.image as mpimgfrom matplotlib import pyplot as plt%matplotlib inlineimage_color =cv2.imread('actual_truck.jpg')plt.imshow(image_color)
我們從文件中讀取圖像。我們將在此圖像中找到卡車。


使用灰度的原因是使圖像盡可能簡單。不需要彩色圖像。顏色增加了圖像的復(fù)雜度,并增加了信噪比。
image_gray = cv2.cvtColor(image_color,cv2.COLOR_BGR2GRAY)plt.imshow(image_gray,cmap ='gray')

這是我們的模板圖像。OpenCV使用此圖像收集了特征并找到了卡車。
import cv2import numpy as npimport matplotlib.image as mpimgfrom matplotlib import pyplot as plt%matplotlib inlineimage_color =cv2.imread('sample_truck.jpg')x= 235y = 350h = 200w = 150cropped=image_color[y:y+h, x:x+w]plt.imshow(cropped)status = cv2.imwrite('t.jpg', cropped)print("Image written to file-system :",status)

# Perform template matching using OpneCVresult = cv2.matchTemplate(image_gray,template, cv2.TM_CCOEFF_NORMED)print(result.shape)plt.imshow(result)

min_val, max_val, min_loc, max_loc =cv2.minMaxLoc(result)top_left = max_locbottom_right = (top_left[0] + w,top_left[1] + h)cv2.rectangle(image_color, top_left,bottom_right, (10,10,255), 5)plt.imshow(image_color)

我們介紹了什么是圖像處理及其應(yīng)用。然后我們討論有關(guān)cv2.matchTemplate()。最后,我們使用模板匹配來識(shí)別道路上的卡車。
交流群
歡迎加入公眾號(hào)讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動(dòng)駕駛、計(jì)算攝影、檢測、分割、識(shí)別、醫(yī)學(xué)影像、GAN、算法競賽等微信群(以后會(huì)逐漸細(xì)分),請掃描下面微信號(hào)加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三?+?上海交大?+?視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會(huì)根據(jù)研究方向邀請進(jìn)入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會(huì)請出群,謝謝理解~

