【图像处理】——上采样、下采样、在模板匹配中的金字塔加速策略
目錄
1、下采樣
Python自帶函數(shù)
自定義函數(shù)
Python實現(xiàn)下采樣
2、上采樣
Python自帶函數(shù)
自定義函數(shù)
Python實現(xiàn)
3、金字塔加速策略
金字塔加速模板匹配具體步驟:
具體可參考:https://blog.csdn.net/Eastmount/article/details/89341077
本文補充了用Python自定義函數(shù)來實現(xiàn)下采樣和上采樣
1、下采樣
Python自帶函數(shù)
dst = pyrDown(src[, dst[, dstsize[, borderType]]])
- src表示輸入圖像,
- dst表示輸出圖像,和輸入圖像具有一樣的尺寸和類型
- dstsize表示輸出圖像的大小,默認(rèn)值為Size()
- borderType表示像素外推方法,詳見cv::bordertype
自定義函數(shù)
首先高斯模糊
再將偶數(shù)行和列的像素格刪除
為了防止刪除后鄰近像素相差較大,一般需要對下采樣后的圖像進(jìn)行2*2的均值平滑操作
Python實現(xiàn)下采樣
import cv2 import numpy as np img = cv2.imread('pic1.jpg',0) #自定義 def defImgDownM(img):h,w = img.shape#定義下采樣輸出圖像大小if h%2 == 0:h = int(h/2)#這里是因為除法得到的是2.0,而創(chuàng)建新圖像時的行列數(shù)必須是整數(shù)else:h = int(h/2) + 1#若為偶數(shù)行數(shù)則直接一半像素,否則就是向下取整再加1if w%2 == 0:w = int(w/2)else:w = int(w/2) + 1#若為偶數(shù)列數(shù)則直接一半像素,否則就是向下取整再加1imgDown = np.zeros((h,w),np.uint8)#定義高斯卷積核kernalDown = np.array([[1/16,2/16,1/16],[2/16,4/16,2/16],[1/16,2/16,1/16]])#1、進(jìn)行高斯模糊img1 = cv2.filter2D(img, -1, kernalDown)#-1表示和原圖像深度一樣,也就是大小和比特都和原圖像一樣#2、刪除偶數(shù)列和行for i in range(h):for j in range(w):imgDown[i,j] = img1[2*i,2*j]#3、均值平滑krenal = np.array([[1/4,1/4],[1/4,1/4]])imgDown = cv2.filter2D(imgDown, -1, krenal)cv2.namedWindow('defImgDown',0)cv2.namedWindow('1',0)cv2.imshow('1',img)cv2.imshow('defImgDown',imgDown)cv2.waitKey(0) # def sysImgDown(img):imgdown = cv2.pyrDown(img)cv2.namedWindow('sysImgDown',0)cv2.imshow('sysImgDown',imgdown)cv2.waitKey(0)if __name__ == '__main__':defImgDownM(img)sysImgDown(img)?
2、上采樣
Python自帶函數(shù)
dst = pyrUp(src[, dst[, dstsize[, borderType]]])
- src表示輸入圖像,
- dst表示輸出圖像,和輸入圖像具有一樣的尺寸和類型
- dstsize表示輸出圖像的大小,默認(rèn)值為Size()
- borderType表示像素外推方法,詳見cv::bordertypes
自定義函數(shù)
(1)定義輸出圖像,擴大成原來的2倍
(2)將原先的像素依次復(fù)制給新圖像的偶數(shù)列
(3)利用4倍的高斯核進(jìn)行卷積
(4)得到的就是上采樣的圖像了
Python實現(xiàn)
import cv2 import numpy as np img = cv2.imread('pic1.jpg',0) h,w = img.shape #1、定義新圖像大小 img1 = np.zeros((2*h,2*w),np.uint8) #定義4倍的高斯核 kernal = np.array([[4/16,8/16,4/16],[8/16,16/16,8/16],[4/16,8/16,4/16]]) for i in range(h):for j in range(w):img1[2*i,2*j] = img[i,j] #卷積 img1 = cv2.filter2D(img1, -1, kernal) #Python自帶的函數(shù) img2 = cv2.pyrUp(img)# ##下面是進(jìn)行多次下采樣 # img11 = img1.copy() # for i in range(6): # img11 = cv2.pyrDown(img11) # print(img11.shape)cv2.namedWindow('1',0) cv2.namedWindow('2',0) cv2.imshow('1',img1) cv2.imshow('2',img11) cv2.waitKey(0)3、金字塔加速策略
這個策略主要用在模板匹配上,先將模板和圖像以相同的層數(shù)進(jìn)行下采樣,得到匹配點后再進(jìn)行上采樣返回到第0層得到第0層時的坐標(biāo)
金字塔加速模板匹配具體步驟:
1、先獲得同層級的模板和原圖像下采樣圖像;
2、用高層的模板匹配同一層級的待測圖像(假設(shè)3層,0,1,2,3)
3、根據(jù)2可以得到匹配點(x3,y3),設(shè)這個點為匹配區(qū)域的左上角點
4、將其向上一層級返回(x2,y2)= (2x3,2y3)
...
5、如此循環(huán),返回到第0層即源圖像,(x0,y0)=(2^nxn,2^nyn)
6、得到角點后就能夠繪制出ROI區(qū)域,左上角點(x0,y0),右下角點(x0',y0')= (x0+x0_template,y0+y0_template),其中x0_template是模板第0級的高
總結(jié)
以上是生活随笔為你收集整理的【图像处理】——上采样、下采样、在模板匹配中的金字塔加速策略的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【图像处理】——遍历图像所有像素的方法(
- 下一篇: 使用numpy出现Deprecation