def blob_doh(image, min_sigma=1, max_sigma=30, num_sigma=10, threshold=0.01, overlap=0.5, log_scale=False):
 assert_nD(image, 2)
 image = img_as_float(image)
 image = integral_image(image)
 if log_scale:
  (start, stop) = (log(min_sigma, 10), log(max_sigma, 10))
  sigma_list = np.logspace(start, stop, num_sigma)
 else:
  sigma_list = np.linspace(min_sigma, max_sigma, num_sigma)
 hessian_images = [_hessian_matrix_det(image, s) for s in sigma_list]
 image_cube = np.dstack(hessian_images)
 local_maxima = peak_local_max(image_cube, threshold_abs=threshold, footprint=np.ones((3, 3, 3)), threshold_rel=0.0, exclude_border=False)
 if (local_maxima.size == 0):
  return np.empty((0, 3))
 lm = local_maxima.astype(np.float64)
 lm[:, 2] = sigma_list[local_maxima[:, 2]]
 local_maxima = lm
 return _prune_blobs(local_maxima, overlap)

def blob_doh ( image , min_sigma = 1 , max_sigma = 30 , num_sigma = 10 , threshold = 0.01 , overlap = 0.5 , log_scale = False ) : assert_nD ( image , 2 ) image = img_as_float ( image ) image = integral_image ( image ) if log_scale : ( start , stop ) = ( log ( min_sigma , 10 ) , log ( max_sigma , 10 ) ) sigma_list = np . logspace ( start , stop , num_sigma ) else : sigma_list = np . linspace ( min_sigma , max_sigma , num_sigma ) hessian_images = [ _hessian_matrix_det ( image , s ) for s in sigma_list ] image_cube = np . dstack ( hessian_images ) local_maxima = peak_local_max ( image_cube , threshold_abs = threshold , footprint = np . ones ( ( 3 , 3 , 3 ) ) , threshold_rel = 0.0 , exclude_border = False ) if ( local_maxima . size == 0 ) : return np . empty ( ( 0 , 3 ) ) lm = local_maxima . astype ( np . float64 ) lm [ : , 2 ] = sigma_list [ local_maxima [ : , 2 ] ] local_maxima = lm return _prune_blobs ( local_maxima , overlap )
finds blobs in the given grayscale image .