標籤:
harris 最常用作特徵檢測演算法。
第一個檔案harris.py
<pre name="code" class="python">from scipy.ndimage import filtersfrom numpy import *from pylab import *def compute_harris_response(im,sigma=3): imx=zeros(im.shape)#計算導數 filters.gaussian_filter(im,(sigma,sigma),(0,1),imx) imy=zeros(im.shape) filters.gaussian_filter(im,(sigma,sigma),(1,0),imy) Wxx=filters.gaussian_filter(imx*imx,sigma) #計算harris矩陣分量 Wxy=filters.gaussian_filter(imx*imy,sigma) Wyy=filters.gaussian_filter(imy*imy,sigma) Wdet=Wxx*Wyy-Wxy**2 #計算矩陣的特徵值和跡 Wtr=Wxx+Wyy return Wdet/Wtrdef get_harris_points(harrisim,min_dist=10,threshold=0.1): conner_threshold=harrisim.max()*threshold harrisim_t=(harrisim>conner_threshold)*1 coords=array(harrisim_t.nonzero()).T candidate_values=[harrisim[c[0],c[1]] for c in coords] index=argsort(candidate_values) allowed_locations=zeros(harrisim.shape) allowed_locations[min_dist:-min_dist,min_dist:-min_dist]=1 filtered_coords=[] for i in index: if allowed_locations[coords[i,0],coords[i,1]]==1: filtered_coords.append(coords[i]) allowed_locations[(coords[i,0]-min_dist):(coords[i,0]+min_dist),(coords[i,1]-min_dist):(coords[i,1]+min_dist)]=0#此處保證min_dist*min_dist僅僅有一個harris特徵點 return filtered_coordsdef plot_harris_points(image,filtered_coords): figure() gray() imshow(image) plot([p[1] for p in filtered_coords],[p[0]for p in filtered_coords],'+') axis('off') show()
第二個檔案測試演算法
from PIL import Imagefrom numpy import *import harrisfrom pylab import *from scipy.ndimage import filtersim=array(Image.open('33.jpg').convert('L'))harrisim=harris.compute_harris_response(im)filtered_coords=harris.get_harris_points(harrisim)harris.plot_harris_points(im,filtered_coords)
著作權聲明:本文部落格原創文章,部落格,未經同意,不得轉載。
harris 演算法python實現