目标检测——图像金字塔
目錄
- 一、圖像金字塔的作用及實(shí)現(xiàn)
- 二、代碼來(lái)實(shí)現(xiàn)圖像金字塔
- 三、圖像金字塔結(jié)合滑動(dòng)窗口
- 3.1 代碼實(shí)現(xiàn)
- 四、實(shí)驗(yàn)總結(jié)
?
- 介紹圖像金字塔。
- 使用圖像金字塔結(jié)合滑動(dòng)窗口的方法
- 標(biāo)記出圖像中不同尺寸的物體。
?
一、圖像金字塔的作用及實(shí)現(xiàn)
- 簡(jiǎn)單來(lái)說(shuō)就是用多個(gè)不同的尺寸來(lái)表示一張圖片。
- 像這種圖片的尺寸逐步遞增或遞減的多張圖層就是圖像金字塔
- 每張不同尺寸的圖片都稱為圖像金字塔的一層。
- 圖像金字塔的目的就是尋找圖片中出現(xiàn)的不同尺寸的目標(biāo)(物體、動(dòng)物等)。
?
?
二、代碼來(lái)實(shí)現(xiàn)圖像金字塔
- 導(dǎo)入 cv2 模塊用于處理圖片
- 分別從 matplotlib 導(dǎo)入 pyplot 和從 IPython 中導(dǎo)入 display 模塊用于顯示圖片
- 然后我們使用 %matplotlib inline 魔法函數(shù)讓圖片在頁(yè)面中顯示
?
- 創(chuàng)建了一個(gè)名為 pyramid 函數(shù),這個(gè)函數(shù)將用來(lái)生成圖像金字塔
這個(gè)函數(shù)有三個(gè)參數(shù):
在函數(shù)內(nèi)我們首先使用 yield 生成器返回原始圖片
因?yàn)樵?strong>圖像金字塔的最底端我們需要一張原始圖片。
然后使用 while 循環(huán)來(lái)不斷縮小圖片尺寸。
直到縮小后圖片的尺寸比前面的 top 參數(shù)小為止。
在循環(huán)內(nèi) (w, h) 表示圖像金字塔前一層的圖像縮小 ratio 倍的寬和高。
我們使用 cv2.resize 方法將前一層圖片進(jìn)行縮放,我們將 (w, h) 作為函數(shù)的第二個(gè)參數(shù),表示縮放后圖片的寬和高的值。
我們使用 if 語(yǔ)句判斷圖片的尺寸是否已經(jīng)到達(dá)了設(shè)定的最小尺寸
將每次圖片縮放后的寬和高與設(shè)定的最小尺寸 top 進(jìn)行對(duì)比
如果小于最小尺寸則使用 break 結(jié)束循環(huán)
最后使用 yield 生成器返回每次縮放后的圖片
至此圖像金字塔的函數(shù)就構(gòu)建完成了。
?
調(diào)用這個(gè)函數(shù)看下結(jié)果
- 首先我們使用 cv2.imread 函數(shù)讀取圖片。
?
?
然后我們使用一個(gè) for 循環(huán)獲取每次縮放的圖片
- 接下來(lái)我們使用切片方法 i[:,:,::-1] 調(diào)整圖片的通道順序以便使用 plt.imshow 方法顯示圖片
- 然后使用 plt.pause(0.3) 讓每張圖片顯示暫停 0.3 秒
- 最后使用 display 的 clear_output(wait=True) 方法清除當(dāng)前顯示的圖片為顯示下一張圖片做準(zhǔn)備。
執(zhí)行上面代碼可以看到坐標(biāo)軸上的數(shù)字在不斷縮小
- 說(shuō)明圖片的尺寸已經(jīng)按照我們傳遞給 pyramid函數(shù)的參數(shù)來(lái)縮小了。
?
?
?
三、圖像金字塔結(jié)合滑動(dòng)窗口
在傳統(tǒng)的目標(biāo)檢測(cè)方法中:
-
使用圖像金字塔和滑動(dòng)窗口相結(jié)合的方式來(lái)檢測(cè)出圖片中不同位置和不同尺寸的目標(biāo)。
-
用滑動(dòng)窗口的方法時(shí),在圖片上滑動(dòng)的矩形框尺寸是固定的,這就導(dǎo)致了如果目標(biāo)的尺寸相對(duì)于矩形框太大或太小都會(huì)導(dǎo)致我們無(wú)法檢測(cè)到目標(biāo)。
我們可以在圖像金字塔的每層圖片上進(jìn)行滑動(dòng)窗口的操作來(lái)解決這個(gè)問(wèn)題。
?
3.1 代碼實(shí)現(xiàn)
?
?
在循環(huán)內(nèi)再使用一個(gè) for 循環(huán)進(jìn)行滑動(dòng)窗口的操作
- 其中 sliding_window 函數(shù)的參數(shù)意義如下
- 第一個(gè)參數(shù) i 是圖像金字塔每層的圖片。
- 第二個(gè)參數(shù) (128, 128) 表示滑動(dòng)窗口的寬和高都是 128。
- 第三個(gè)參數(shù) 100 表示滑動(dòng)窗口將每次滑動(dòng)的步長(zhǎng)為 100 個(gè)像素。
我們使用一個(gè) if 語(yǔ)句:
- 判斷獲得的滑動(dòng)窗口和我們設(shè)定的滑動(dòng)窗口大小是否一致。
- 如果滑動(dòng)窗口截取的區(qū)域與設(shè)定的 (window_w, window_h) 中任意一個(gè)元素不同,則執(zhí)行 continue 跳過(guò)該滑動(dòng)窗口。
- 最后就是在圖片上繪制出滑動(dòng)窗口。
?
下圖就是我們運(yùn)行腳本后得到的部分圖片
- 可以看到我們?cè)趫D像金字塔的每一層都使用滑動(dòng)窗口
- 雖然矩形框的尺寸保持不變,但是隨著圖片地不斷縮小,矩形框逐漸包裹住目標(biāo)。
四、實(shí)驗(yàn)總結(jié)
本節(jié)實(shí)驗(yàn)我們學(xué)習(xí)了圖像金字塔方法
- 圖像金字塔就是用多個(gè)不同的尺寸來(lái)表示一張圖片。
- 通常圖像金字塔會(huì)和滑動(dòng)窗口相結(jié)合來(lái)實(shí)現(xiàn)檢測(cè)出圖片中不同位置和不同尺寸的目標(biāo)。
總結(jié)
以上是生活随笔為你收集整理的目标检测——图像金字塔的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: CSDN客服体验记录20220817
- 下一篇: Jetson NX YOLOV目标检测学