使用最近鄰插值:
源(simg)=目標(dimg)*縮放係數(k),
縮放係數k = 源尺寸/目標
由上,對分x、y軸 :sx = dx*k sy = dy *k
思路:初始化目標size的,然後根據位置計算目標對應於原的位置索引,索引結果四捨五入
也就是說目標的每個畫素都是根據目標的畫素索引*縮放係數後求得目標對應其在源上的索引位置,索引結果四捨五入
最近鄰插值也就是目標的每個畫素依賴於源的畫素值通過縮放係數計算得到的索引,並索引源的畫素值來填充
1import
matplotlib.pyplot as plt
2import
numpy as np
34 img = plt.imread('
source.bmp')
56defnearest_interploat(img,dsize):
7"""
8對單通道的進行縮放處理910
1112
也就是說目標的每個畫素都是根據目標的畫素索引*縮放係數後求得目標對應其在源上的索引位置,索引結果四捨五入
13最近鄰插值也就是目標的每個畫素依賴於源的畫素值通過縮放係數計算得到的索引,並索引源的畫素值來填充
14:param img: 源
15:param dsize: 目標尺寸
16:return: 目標
17"""
1819 dimg = np.zeros((dsize),dtype=int) #
初始化目標
20 ssize_x,ssize_y =img.shape
21plt.imshow(dimg)
22plt.show()23#
下面將dsize分開處理為x的縮放係數與y的縮放係數是因為影象的高寬可能不一致
24 xk = (ssize_x/dsize[0])
25 yk = (ssize_y/dsize[1])
2627
#np.argwhere(dimg!=none)返回目標的畫素索引 shape=(dsize_x*disze_y,2)因為每個畫素點都有x,y兩個索引
28 pixel_index=np.argwhere(dimg!=none) #
返回的索引每個畫素點[行,列]畫素點從行到列
2930
31 d_ssize_x = pixel_index[:,0]*xk
3233 d_ssize_y = pixel_index[:,1] *xk
3435
36 d_ssize_x = np.around(d_ssize_x) #
四捨五入
37 d_ssize_y =np.around(d_ssize_y)
3839
40 d_ssize_x=d_ssize_x.astype('
int'
)41 d_ssize_y=d_ssize_y.astype('
int')42
43 d_ssize_x[np.nonzero(d_ssize_x==ssize_x)[0]] = ssize_x-1 #
索引不得超過size-1
44 d_ssize_y[np.nonzero(d_ssize_y==ssize_y)[0]] = ssize_y-1
4546
print(d_ssize_x[np.nonzero(d_ssize_x>ssize_x)[0]])
47 dimg =img[d_ssize_x,d_ssize_y]
48 dimg =np.resize(dimg,dsize)
49print
(img.shape)
50plt.imshow(img)
51plt.show()
5253
plt.imshow(dimg)
54plt.show()
5556
5758
5960
if__name__ == '
__main__':
61 c =50
62 nearest_interploat(img[:,:,2],(176*c,197*c))
63 a = np.random.rand(2,3)
最近鄰插值 雙線性插值
最近鄰插值 公式如下 最近鄰插值 輸入 src 輸入源圖 dst rows 目標圖的行數 dst cols 目標圖的列數 輸出 目標圖 mat neargest neighbor mat src,int dst rows,int dst cols return dst 雙線性插值 公式如下 雙線性插...
最近相鄰插值
使用最近鄰插值 源 simg 目標 dimg 縮放係數 k 縮放係數k 源尺寸 目標 由上,對分x y軸 sx dx k sy dy k 思路 初始化目標size的,然後根據位置計算目標對應於原的位置索引,索引結果四捨五入 也就是說目標的每個畫素都是根據目標的畫素索引 縮放係數後求得目標對應其在源上...
快速最近鄰匹配
這是乙個完整的利用suft快速近鄰匹配的程式 include include include include include include include include include include include using namespace std using namespace cv ...