def _detect(self,image):
# Asssumes a two dimensional array
A = None
if isinstance(image,Image):
A = image.asMatrix2D()
elif isinstance(image,array) and len(image.shape)==2:
A = image
else:
raise TypeError("ERROR Unknown Type (%s) - Only arrays and pyvision images supported."%type(image))
filter = array(self.filter)
assert len(filter.shape) == 2
#feature window calculation
del_A_1 = conv2(A,filter)
del_A_2 = conv2(A,filter.transpose())
del_A_1_1 = del_A_1 * del_A_1
matrix_1_1 = gaussian_filter(del_A_1_1, self.sigma)
del del_A_1_1
del_A_2_2 = del_A_2 * del_A_2
matrix_2_2 = gaussian_filter(del_A_2_2, self.sigma)
del del_A_2_2
del_A_1_2 = del_A_1 * del_A_2
matrix_1_2 = gaussian_filter(del_A_1_2, self.sigma)
del del_A_1_2
del del_A_1,del_A_2
dM = matrix_1_1*matrix_2_2 - matrix_1_2*matrix_1_2
tM = matrix_1_1+matrix_2_2
del matrix_1_1 , matrix_1_2, matrix_2_2
R = dM-self.k*pow(tM,2)
footprint = ones((self.radius,self.radius))
mx = maximum_filter(R, footprint = footprint)
local_maxima = (R == mx) * (R != zeros(R.shape)) # make sure to remove completly dark points
del mx
points = nonzero(local_maxima)
del local_maxima
points = array([points[0],points[1]]).transpose()
L = []
for each in points:
L.append((R[each[0],each[1]],each[0],each[1],None))
del R
return L
评论列表
文章目录