cours-m1-eea/453/Cours/harris.py

46 lines
1.7 KiB
Python
Raw Normal View History

def harris(image, sigma=10, kappa=0.04):
derivees = gradient(image)
d_x = derivees[0]
d_y = derivees[1]
noyau = noyau_gaussien3(sigma)
#TODO: convol DoG
d_xx_lissee = ndimage.convolve(d_x * d_x,noyau , mode = 'nearest')
d_yx_lissee = ndimage.convolve(d_x * d_y,noyau , mode = 'nearest')
d_yy_lissee = ndimage.convolve(d_y * d_y,noyau , mode = 'nearest')
determinant = d_xx_lissee * d_yy_lissee -d_yx_lissee * d_yx_lissee
trace = d_xx_lissee + d_yy_lissee
image_harris = determinant - kappa * trace * trace
return image_harris
def maxlocal(image_harris, seuil,size_patch=10):
""" Array*float -> Array """
output = np.zeros(image_harris.shape)
voisinage = np.zeros((3,3))
for ligne in range(size_patch,image_harris.shape[0]-size_patch):
for colonne in range(size_patch,image_harris.shape[1]-size_patch):
current_val = image_harris[ligne, colonne]
voisinage = image_harris[ligne - 1: ligne + 2, colonne - 1:colonne + 2].copy()
voisinage[(1,1)] = 0
output[ligne, colonne] = np.logical_and(current_val > seuil,
current_val > np.amax(voisinage))
print(output)
return(output)
def coord_maxlocal(image,seuil,size_patch=3):
#seuil=np.mean(image_extrema)
""" Array -> Array """
x,y = np.nonzero(maxlocal(image,seuil))
return np.array((y,x)).T
def get_corners(pict):
image_harris = harris(pict,sigma=3,kappa=0.06)
corners = coord_maxlocal(image_harris,np.mean(image_harris))
return corners
pict1 = np.array(Image.open("set1-1.png").convert('L'),dtype='float')
pict2 = np.array(Image.open("set1-2.png").convert('L'),dtype='float')
corners1=get_corners(pict1)
corners2=get_corners(pict2)