Пример #1
0
def test_barcode():
	N = 200
	N_s = 50
	k = int(N/5)
	w = .5
	r = .6
	vertices = get_image('C', 1, size=200, sample_size=N)[0]
	tangents = hm.find_tangents(vertices, k)
	curve = hm.get_curve(vertices, k = k, w = w)
	sparse = sparse_sample(vertices, N_s)
	v_s = vertices[sparse,:]
	t_s = tangents[sparse]
	c_s = curve[sparse]
	edges = hm.get_rips_complex(v_s, tangents=t_s, k = k, w = w, r = r)
	
	f, ax = plt.subplots(1,2)
	plt_edges, plt_barcode = ax
	plt_edges.scatter(v_s[:,0], v_s[:,1], marker = '.', c=c_s, s=200)
	for edge in edges:
		plt_edges.plot(v_s[edge, 0], v_s[edge, 1], lw = 1, c = 'blue')
	plt_edges.invert_yaxis()

	ordered_simplices, curve_lookup = hm.get_ordered_simplices(v_s, c_s, edges)
	barcode = bc.get_barcode(ordered_simplices, degree_values=c_s[np.argsort(c_s)])
	b0 = barcode[barcode[:,2] == 0, :]
	bc.plot_barcode_gant(b0, plt=plt_barcode)
	plt.show()
Пример #2
0
def image_preprocessing():
	N = 500
	N_s = 30
	sample, vertices, image, original = get_image('A', 1, size=200, sample_size=N)
	f, ax = plt.subplots(2,2, gridspec_kw = {'width_ratios':[1,1]})
 
	ax[0][0].imshow(original, cmap='binary')
	ax[0][0].set_xticks([])
	ax[0][0].set_yticks([])
	ax[0][0].set_title("Original Image")

	ax[0][1].imshow(image, cmap='binary')
	ax[0][1].set_xticks([])
	ax[0][1].set_yticks([])
	ax[0][1].set_title("Scaled, Cropped & Thinned")


	ax[1][0].scatter(sample[:,0], sample[:,1], marker='.')
	ax[1][0].invert_yaxis()
	ax[1][0].set_xticks(np.arange(-1, 1.1))
	ax[1][0].set_yticks(np.arange(-1, 1.1))
	ax[1][0].set_title('Random Sampling')

	sparse_idx = sparse_sample(sample, N_s)
	sparse = sample[sparse_idx, :]
	ax[1][1].scatter(sparse[:,0], sparse[:,1], marker='.')
	ax[1][1].invert_yaxis()
	ax[1][1].set_xticks(np.arange(-1, 1.1))
	ax[1][1].set_yticks(np.arange(-1, 1.1))
	ax[1][1].set_title('Downsampled')
	plt.tight_layout()
	plt.show()
Пример #3
0
def delaunay_complex_2d(vertices, N_s):
    sparse = sparse_sample(vertices, N_s)
    landmarks = vertices[sparse, :]
    tri = spatial.Delaunay(landmarks)
    edges = np.concatenate(
        [tri.simplices[:, :2], tri.simplices[:, 1:], tri.simplices[:, [2, 0]]],
        axis=0)
    return edges, landmarks, sparse
Пример #4
0
def witness_complex_2d(vertices, N_s):
    sparse = sparse_sample(vertices, N_s)
    landmarks = vertices[sparse, :]
    D = spatial.distance.cdist(vertices, landmarks)
    closest = np.argsort(D, axis=1)
    edges = closest[:, :2]
    edges = remove_duplicate_edges(edges)
    return edges, landmarks, sparse
Пример #5
0
def test_sparse_sampling():
	N = 500
	vertices = get_image_skeleton('P', 0, size=200, sample_size=N)[0]
	plt.scatter(vertices[:,0], vertices[:,1], marker = '.', c='#eeeeee')

	sparse = sparse_sample(vertices, 50)
	plt.scatter(sparse[:,0], sparse[:,1], marker='+', c='blue')
	plt.show()
Пример #6
0
def get_all_rips_2d(vertices, N_s, k, w, r):
    tangents = find_tangents(vertices, k)
    curve = find_curve(vertices, tangents, k, w)
    sparse = sparse_sample(vertices, N_s)
    v_s = vertices[sparse, :]
    t_s = tangents[sparse]
    c_s = curve[sparse]
    edges = rips_complex_2d(v_s, r=r)
    return v_s, t_s, c_s, edges
Пример #7
0
def witness_complex_4d(vertices, tangents, w, N_s):
    tspace = get_tspace(vertices, tangents, w)
    sparse = sparse_sample(tspace, N_s)
    landmarks = tspace[sparse, :]
    D = spatial.distance.cdist(tspace, landmarks)
    closest = np.argsort(D, axis=1)
    edges = closest[:, :2]
    edges = remove_duplicate_edges(edges)
    return edges, landmarks, sparse
Пример #8
0
def delaunay_complex_4d(vertices, tangents, w, N_s):
    tspace = get_tspace(vertices, tangents, w)
    sparse = sparse_sample(tspace, N_s)
    landmarks = tspace[sparse, :]
    tri = spatial.Delaunay(landmarks)
    edges = np.concatenate([
        tri.simplices[:, 0:2], tri.simplices[:, 1:3], tri.simplices[:, 2:4],
        tri.simplices[:, 3:5], tri.simplices[:, [4, 0]]
    ],
                           axis=0)
    return edges, landmarks, sparse
Пример #9
0
def test_edges():
	N = 200
	N_s = 50
	k = int(N/5)
	w = .5
	r = .6
	vertices = get_image('A', 2, size=200, sample_size=N)[0]
	tangents = hm.find_tangents(vertices, k)
	sparse = sparse_sample(vertices, N_s)
	v_s = vertices[sparse,:]
	t_s = tangents[sparse]
	edges = hm.get_rips_complex(v_s, tangents=t_s, k = k, w = w, r = r)
	plot_edges(v_s, edges, plt)
	plt.gca().invert_yaxis()
	plt.show()
Пример #10
0
def test_delaunay():
	N = 200
	N_s = 50
	k = int(N/5)
	w = .5
	r = .6
	vertices = get_image('B', 2, size=200, sample_size=N)[0]
	sparse = sparse_sample(vertices, N_s)

	v_s = vertices[sparse,:]
	edges = hm.delaunay_complex_2d(v_s)
	
	plt.scatter(vertices[:,0], vertices[:,1], marker='.', c='gray')
	plt.scatter(v_s[:,0], v_s[:,1], marker='+', c='red')
	for edge in edges:
		plt.plot(v_s[edge,0], v_s[edge,1], lw = 1, c = 'blue')

	plt.gca().invert_yaxis()
	plt.show()
Пример #11
0
def test_tangent():
	N = 200
	k = int(N/5)
	vertices, all_points, img, _ = get_image('B', 0, size=200, sample_size=N)
	tspace = hm.get_tangents(vertices, k = k)
	sparse = sparse_sample(vertices, 50)
	plot_tangent_space_2d(tspace[sparse,:])
	# plot_tangent_space_3d(tspace[sparse,:])

	# f, ax = plt.subplots(1, 3)
	# ax[0].scatter(vertices[:,0], vertices[:,1], marker='.', c=tspace[:,3])
	# ax[0].invert_yaxis()
	# idx = np.argwhere(tspace[:,3] < 0.25).flatten()
	# print(idx.shape)
	# v = vertices[idx,:]
	# print(v.shape)
	# ax[1].scatter(v[:,0], v[:,1], marker='.')
	# ax[1].invert_yaxis()
	plt.show()
	return	
Пример #12
0
def test_filtration():
	N = 200
	N_s = 50
	k = int(N/5)
	w = .5
	r = .6
	vertices = get_image('A', 2, size=200, sample_size=N)[0]
	tangents = hm.find_tangents(vertices, k)
	curve = hm.get_curve(vertices, k = k, w = w)
	sparse = sparse_sample(vertices, N_s)
	v_s = vertices[sparse,:]
	t_s = tangents[sparse]
	c_s = curve[sparse]
	edges = hm.get_rips_complex(v_s, tangents=t_s, k = k, w = w, r = r)
	simplices, curve_lookup = hm.get_ordered_simplices(v_s, c_s, edges)
	max_degree = np.max(simplices[:,3])
	degree_step = math.ceil(max_degree/16.0)
	verts_degree = simplices[simplices[:,4] == 0,0:3]

	f, ax = plt.subplots(4,4, sharex=True, sharey=True)
	ax[0][0].invert_yaxis()
	for i in range(4):
		for j in range(4):
			idx = i*4 + j
			deg = min(idx * degree_step, max_degree)
			plot_simplices(simplices, deg, v_s, ax[i][j])

			ax[i][j].set_title("κ={0:1.4f}".format(curve[verts_degree[deg,0]]), fontsize=8)
			ax[i][j].set_xticklabels([])
			ax[i][j].set_yticklabels([])
	
	plt.tight_layout()
	plt.figure()
	barcode = bc.get_barcode(simplices, degree_values=c_s[np.argsort(c_s)])
	b0 = barcode[barcode[:,2] == 0, :]	
	bc.plot_barcode_gant(b0, plt=plt)
	plt.show()