45 lines
1.7 KiB
Python
Executable file
45 lines
1.7 KiB
Python
Executable file
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)
|