ipoints = np.argmin(distance_matrix.euclidian(points, rpoints), axis=1) npoints = len(ipoints) # geodesic distances rE = distance_matrix.euclidian(rpoints) rC = delaunay_2d.connectivity(rpoints) rG, rparents = fastm.fast_marching_3d_aniso( # im*np.mean(rE[rC==1]), imw, rpoints, heap_size=1e6, offset=1e-5, connectivity26=True, output_arguments=('DM', 'parents'), ) pathes, connections = fastm.shortestpath(rparents) impath = np.zeros(imw.shape) for path in pathes: impath[tuple(pathes[path].T)] = path if 0: # rM = rE*(rG<1e9)/(rG*(rG<1e9) + (rG>1e9)) # rM = (rG >= 3*rE) rM = np.minimum(np.exp((rG - 3 * rE) / 10), 1) # Mcom = commute_time(1-rM)[ipoints,:][:,ipoints] # Mcom = Mcom - np.min(Mcom[np.where(np.triu(np.ones(Mcom.shape),k=1))]) # Mcom.flat[::Mcom.shape[0]+1] = 0 # Mcom /= np.c_[np.sum(Mcom, axis=1)] Aff = np.exp(-rG**2 / np.mean(rG[rG < 1e9] * 3)**2)
points = np.c_[ np.random.randint(0, shape[0], npoints), np.random.randint(0, shape[1], npoints), ] dist, labels, DM, inter_ = fastm.fast_marching_3d( speed, points, offset=1, output_arguments=( 'distances', 'labels', 'DM', 'intersections', ) ) inter = np.argwhere(inter_!=-1) path = fastm.shortestpath(points, inter_, dist) path_ = np.argwhere(path!=-1) col = path[tuple(path_.T)] if 1: from matplotlib import pyplot pyplot.figure() pyplot.imshow(speed.T, cmap='gray', aspect='equal', interpolation='nearest') pyplot.imshow(labels.T, alpha=0.8, interpolation='nearest') pyplot.scatter(points[:,0], points[:,1]) pyplot.scatter(inter[:,0], inter[:,1], c='r') pyplot.scatter(path_[:,0], path_[:,1], c=col) pyplot.show()
# geodesic distances rE = distance_matrix.euclidian(rpoints) rC = delaunay_2d.connectivity(rpoints) rG,rparents = fastm.fast_marching_3d_aniso( # im*np.mean(rE[rC==1]), imw, rpoints, heap_size=1e6, offset=1e-5, connectivity26=True, output_arguments=('DM','parents'), ) pathes,connections = fastm.shortestpath(rparents) impath = np.zeros(imw.shape) for path in pathes: impath[tuple(pathes[path].T)] = path if 0: # rM = rE*(rG<1e9)/(rG*(rG<1e9) + (rG>1e9)) # rM = (rG >= 3*rE) rM = np.minimum(np.exp((rG - 3*rE)/10),1) # Mcom = commute_time(1-rM)[ipoints,:][:,ipoints] # Mcom = Mcom - np.min(Mcom[np.where(np.triu(np.ones(Mcom.shape),k=1))]) # Mcom.flat[::Mcom.shape[0]+1] = 0 # Mcom /= np.c_[np.sum(Mcom, axis=1)] Aff = np.exp(-rG**2/np.mean(rG[rG<1e9]*3)**2)