計算機視覺——圖像匹配(1)

通常來講,圖像匹配的重要的兩個步驟就是尋找興趣點和肯定描述子信息。數組

如下是經過Harris角點檢測的方法來檢測興趣點app

 1 #Harris角點檢測實現
 2 from scipy.ndimage import filters  3 import numpy as np  4 from matplotlib import pyplot as plt  5 def compute_harris_response(im,sigma=3):  6     """
 7  在一幅灰度圖像中,對每個像素計算Harris角點檢測器響應函數  8  :param im: 圖像數組  9  :param sigma: 高斯濾波器的參數  10  :return: 商數指示器  11     """
 12 #計算x,y方向上的導數
 13     imx=np.zeros(im.shape)  14     filters.gaussian_filter(im,(sigma,sigma),(0,1),imx)  15     imy=np.zeros(im.shape)  16     filters.gaussian_filter(im,(sigma,sigma),(1,0),imy)  17 #計算Harris矩陣的份量
 18     wxx=filters.gaussian_filter(imx*imx,sigma)  19     wyy=filters.gaussian_filter(imy*imy,sigma)  20     wxy=filters.gaussian_filter(imx*imy,sigma)  21 #計算特徵值和跡
 22     wdet=wxx*wyy-wxy**2
 23     wtr=wxx+wyy  24     return wdet/wtr  25 def get_harris_points(harrisim,min_dst=10,threshold=0.2):  26     """
 27 
 28  :param harrisim: 像素值爲Harris響應函數值的圖像  29  :param min_dst: 分割角點和圖像的最小像素數目  30  :param threshold: 閥值  31  :return: 角點集合  32     """
 33 #尋找高於閥值的候選角點
 34     corner_threshold=harrisim.max()*threshold  35     #大於閥值的harris響應函數值被認爲是可能的角點,並在harrism_t矩陣中相應的位置1,其他地方置0
 36     harrisim_t=(harrisim>corner_threshold)*1
 37 #獲得候選角點的座標
 38     coords=np.array(harrisim_t.nonzero()).T  39 
 40 #獲得候選點的響應值
 41     candidate_values=[harrisim_t[c[0],c[1]] for c in coords]  42 #對候選點按照harris響應值進行排序
 43     index=np.argsort(candidate_values)  44 #將可行點的位置保存在數組allowed_locations中
 45     allowed_locations=np.zeros(harrisim.shape)  46     #爲了確保××××步可以實現
 47     allowed_locations[min_dst:-min_dst,min_dst:-min_dst]=1
 48 #按照min_distance原則,選擇最佳harris點
 49     filtered_coords=[]  50     for i in index:  51         if allowed_locations[coords[i,0],coords[i,1]]==1.0:  52  filtered_coords.append(coords[i])  53             allowed_locations[(coords[i][0]-min_dst):(coords[i][0]+min_dst),(coords[i][1]-min_dst):(coords[i][1]+min_dst)]=0  54     return filtered_coords  55 
 56 #繪製圖像中檢測到的角點
 57 def plot_harris_points(image,filterd_coords):  58  plt.figure()  59  plt.gray()  60  plt.imshow(image)  61     plt.plot([p[1] for p in filterd_coords],[p[0] for p in filterd_coords],'*')  62     plt.axis('off')  63  plt.show() 

下圖爲經過Harris角點檢測方法獲得的結果函數

相關文章
相關標籤/搜索