Crack Graph
Crack Graph
Quickstart
Unlabeled data
Generate data
from combra import graph, data
import numpy as np
from tqdm.notebook import tqdm
import pandas as pd
image = data.example_crack_fixed_images()[0][1]
(entry_nodes,
exit_nodes,
img_contours_o,
img_preprocessed_final,
cnts,
nodes_metadata) = graph.preprocess_graph_image(image, border=30, disk=5,entry_ellps_w=5,exit_ellps_w=5,r=4)
g, img_contours = graph.create_crack_graph(img_preprocessed_final.shape, cnts, nodes_metadata, eps=300)Plot graph
graph.graph_plot(g, img_preprocessed_final,N=10,M=10, name='wc_cv/cv/Ultra_Co6_2-001_cut_graph.jpeg', save=False)Plot paths (doesnt work)
## DOESN'T WORK
entry_nodes = np.unique(paths['entry_node'])
exit_nodes = np.unique(paths['exit_node'])
shortest_entry_paths = []
for entry_node in tqdm(entry_nodes):
row = paths[paths.entry_node==entry_node].sort_values(by='path_len_pixels').iloc[0]
shortest_entry_paths.append(row)
shortest_exit_paths = []
for exit_node in tqdm(exit_nodes):
row = paths[paths.exit_node==exit_node].sort_values(by='path_len_pixels').iloc[0]
shortest_exit_paths.append(row)
df_shortest_entry = pd.DataFrame(shortest_entry_paths)
df_shortest_exit = pd.DataFrame(shortest_exit_paths)
graph.plot_paths(g, df, img_aligned, border=30)Generate energies
entry_nodes = [ 0,1, 3, 9, 10, 13]
exit_nodes = [ 23, 24, 71, 72, 63, 64, 56, 57, 67, 68]
# WC+8Co_5_fixed_001_cropped.jpg
# entry_nodes = [ 4, 15, 13, 16, 34, 27]
# exit_nodes = [ 527, 528, 519, 522]
# WC+8Co_5_crack
# entry_nodes = [ 4, 11, 16, 61, 62, 66]
# exit_nodes = [ 307, 308, 515, 529]
param_1_max=20 # Co
param_2_max=20 # WC-Co
param_3_const=20 # WC
param_4_const=0 # WC-WC
energy_conf=np.zeros((param_1_max, param_2_max)).tolist()
for i,en_1 in enumerate(tqdm(range(0,param_1_max))):
for j,en_2 in enumerate(range(0,param_2_max)):
energy_conf[i][j]={
0: en_1, # Co
1: en_2, # WC-Co
2: param_3_const, # WC
3: param_4_const # WC-WC
}
energies_paths = graph.get_energies(energy_conf,
g,
cnts,
nodes_metadata,
entry_nodes,
exit_nodes,
first_k_paths=1,
parallel=True,
workers=20)Plot energy optimized paths (doesnt work)
# does not work well with large images
graph.plot_optimized_paths(g, energies_paths, img_contours_o)Plot energies
path_index=0
graph.plot_optimized_energies( energies_paths,
path_index=path_index,
N=5,M=5,
y_label ='co_e',
x_label = 'wc-co_e',
fontsize_h=10,
fontsize_axes=50
)Plot fixed path energy
# WC+8Co_5_crack
# entry_nodes = [ 4, 11, 16, 61, 62, 66]
# exit_nodes = [ 307, 308, 515, 529]
# WC+8Co_5_fixed_001_cropped.jpg
entry_nodes = [ 4, 15, 13, 16, 34, 27]
exit_nodes = [ 527, 528, 519, 522]
fixed_paths_energies = graph.fixed_paths_energies(g, cnts, nodes_metadata, entry_nodes, exit_nodes)