Source code for skgtimage.io.recognition

import os
import csv
from skgtimage.io.graphviz import save_graph,save_graph_regions,save_matching,matching2links,save_matching_basic,save_graph_basic
from skgtimage.io.csv import save_intensities
from skgtimage.io.image import save_image_context
from skgtimage.core.photometry import grey_levels
from skgtimage.core.factory import from_labelled_image
from skgtimage.core.isomorphism import find_subgraph_isomorphims
from skgtimage.core.graph import transitive_closure

def clear_dir_content(save_dir):
    if os.path.exists(save_dir):
        for e in os.listdir(save_dir):
            if not(os.path.isdir(save_dir+e)):
                os.remove(save_dir+e)
            else:
                clear_dir_content(save_dir+e+"/")


[docs]def save_recognizer_details(recognizer,save_dir,full=False,slices=[]): """ Save details of the recognition procedure: regions, graphs and statistics (mean intensities) related to each step :param recognizer: object embedding all details, and returned by recognize :param save_dir: directory within which all details are saved :param full: if True, all regions, and mean intensities, related to initial graphs are saved (time consuming if many nodes) :param slices: list of slice indices to be exported in .png image files, in case of 3D images :return: None """ if not os.path.exists(save_dir): os.mkdir(save_dir) ##################################### # Save final result ##################################### if recognizer.relabelled_final_t_graph is not None: save_graph(recognizer.relabelled_final_t_graph, name="topological", directory=save_dir, tree=True) save_graph(recognizer.relabelled_final_p_graph, name="photometric", directory=save_dir, tree=True) save_graph_regions(recognizer.relabelled_final_t_graph, directory=save_dir, slices=slices) save_intensities(recognizer.relabelled_final_p_graph, directory=save_dir) label_from_final = recognizer.relabelled_final_t_graph.get_labelled() save_image_context(recognizer.raw_image, label_from_final, save_dir, recognizer.roi, slices=slices, mc=recognizer.mc) ############# #Details ############# details_save_dir=save_dir+"Details/" if not os.path.exists(details_save_dir): os.mkdir(details_save_dir) for step in range(0,len(recognizer.intermediate_operations)): operation=recognizer.intermediate_operations[step] tmp_dir=details_save_dir+operation+"/" if not os.path.exists(tmp_dir) : os.mkdir(tmp_dir) clear_dir_content(tmp_dir) label=recognizer.intermediate_labels[step] save_image_context(recognizer.raw_image, label, tmp_dir, recognizer.roi, slices=slices,mc=recognizer.mc) if recognizer.intermediate_graphs[step] is not None: (t_graph,p_graph)=recognizer.intermediate_graphs[step] nb_nodes = len(t_graph.nodes()) save_graph(t_graph, name="g_topological_" + str(nb_nodes), directory=tmp_dir,tree=True) save_graph(p_graph, name="g_photometric_" + str(nb_nodes), directory=tmp_dir,tree=True) # Simplified save_graph_basic(t_graph, name="g_topological_simple_" + str(nb_nodes), directory=tmp_dir, tree=True) save_graph_basic(p_graph, name="g_photometric_simple_" + str(nb_nodes), directory=tmp_dir, tree=True) if step == (len(recognizer.intermediate_operations)-1): save_intensities(p_graph, directory=tmp_dir) save_graph_regions(t_graph, directory=tmp_dir, slices=slices) else: if len(grey_levels(label)) < 50: t_graph,p_graph=from_labelled_image(recognizer.image,label,recognizer.roi,recognizer.bound_thickness,recognizer.bound_thickness) nb_nodes = len(t_graph.nodes()) save_graph(t_graph, name="g_topological_" + str(nb_nodes), directory=tmp_dir, tree=True) save_graph(p_graph, name="g_photometric_" + str(nb_nodes), directory=tmp_dir, tree=True) # Simplified save_graph_basic(t_graph, name="g_topological_simple_" + str(nb_nodes), directory=tmp_dir, tree=True) save_graph_basic(p_graph, name="g_photometric_simple_" + str(nb_nodes), directory=tmp_dir, tree=True) ##################################### # Save common iso and matching ##################################### step_index=len(recognizer.intermediate_operations) tmp_dir = details_save_dir + str(step_index)+"_graphs_and_common_isos/";clear_dir_content(tmp_dir) clear_dir_content(tmp_dir) if recognizer.common_isomorphisms is not None: if not os.path.exists(tmp_dir): os.mkdir(tmp_dir) t_isomorphisms_candidates = find_subgraph_isomorphims(transitive_closure(recognizer.t_graph), transitive_closure(recognizer.ref_t_graph)) nb_t_isos=len(t_isomorphisms_candidates) f=open(tmp_dir+str(nb_t_isos)+"_t_isos",'w');f.close() f=open(tmp_dir+str(len(recognizer.common_isomorphisms))+"_c_isos",'w');f.close() if recognizer.matching is not None: matching_links = matching2links(recognizer.matching) save_matching(recognizer.t_graph, recognizer.ref_t_graph, [matching_links], ['red'], name="1_matching_t", directory=tmp_dir, tree=True) save_matching(recognizer.p_graph, recognizer.ref_p_graph, [matching_links], ['red'], name="1_matching_p", directory=tmp_dir, tree=True) #Simplified save_matching_basic(recognizer.t_graph, recognizer.ref_t_graph, [matching_links], ['red'], name="1_matching_t_simple", directory=tmp_dir, tree=True) save_matching_basic(recognizer.p_graph, recognizer.ref_p_graph, [matching_links], ['red'], name="1_matching_p_simple", directory=tmp_dir, tree=True) if len(recognizer.common_isomorphisms) < 20: for i in range(0,len(recognizer.common_isomorphisms)): matching_links = matching2links(recognizer.common_isomorphisms[i]) save_matching(recognizer.t_graph, recognizer.ref_t_graph, [matching_links], ['red'], name="common_iso_t_" + str(i), directory=tmp_dir, tree=True) save_matching(recognizer.p_graph, recognizer.ref_p_graph, [matching_links], ['red'], name="common_iso_p_" + str(i), directory=tmp_dir, tree=True) if full: save_intensities(recognizer.p_graph, directory=tmp_dir) save_graph_regions(recognizer.t_graph, directory=tmp_dir, slices=slices) #Energies csv_file=open(os.path.join(tmp_dir,"2_all_energies.csv"), "w") c_writer = csv.writer(csv_file,dialect='excel') c_writer.writerow(["Common iso"]+[i for i in range(0,len(recognizer.common_isomorphisms))]) c_writer.writerow(['Eie']+[i for i in recognizer.eies]) csv_file.close() ############################## # Saving merging ############################## step_index+=1 tmp_dir = details_save_dir + str(step_index)+"_merging/";clear_dir_content(tmp_dir) if (recognizer.matching is not None) and (recognizer.ordered_merges is not None): # All merging matching_links = matching2links(recognizer.matching) save_matching(recognizer.t_graph, recognizer.ref_t_graph, [matching_links, recognizer.ordered_merges], ['red', 'green'], label_lists=[[], range(0, len(recognizer.ordered_merges) + 1)], name="matching_t", directory=tmp_dir, tree=True) save_matching(recognizer.p_graph, recognizer.ref_p_graph, [matching_links, recognizer.ordered_merges], ['red', 'green'], label_lists=[[], range(0, len(recognizer.ordered_merges) + 1)], name="matching_p", directory=tmp_dir, tree=True) #Simplified save_matching_basic(recognizer.t_graph, recognizer.ref_t_graph, [matching_links, recognizer.ordered_merges], ['red', 'green'], label_lists=[[], range(0, len(recognizer.ordered_merges) + 1)], name="matching_t_simplified", directory=tmp_dir, tree=True) save_matching_basic(recognizer.p_graph, recognizer.ref_p_graph, [matching_links, recognizer.ordered_merges], ['red', 'green'], label_lists=[[], range(0, len(recognizer.ordered_merges) + 1)], name="matching_p_simplified", directory=tmp_dir, tree=True)