Mentions légales du service

Skip to content
Snippets Groups Projects
Commit 1b41ed0e authored by DEBREUVE Eric's avatar DEBREUVE Eric
Browse files

added basic soma validation interface

parent 2e57a10e
No related branches found
No related tags found
No related merge requests found
import tkinter as tk
import numpy as np
from PIL import Image, ImageTk
array_t = np.ndarray
class soma_validation_window_t:
def __init__(self, lmap: array_t, mip_axis: int = -1):
""""""
self.lmap = lmap
self.mip = np.max(lmap, axis=mip_axis)
mip_shape = self.mip.shape
offset = 50
scaling = (255.0 - offset) / np.max(self.mip)
self.scaled_mip = scaling * self.mip + offset
self.scaled_mip[self.mip == 0] = 0
self.root = tk.Tk()
self.canvas = tk.Canvas(
self.root, width=mip_shape[1], height=mip_shape[0]
)
self.tk_image = ImageTk.PhotoImage(
master=self.root, image=Image.fromarray(self.scaled_mip)
)
self.canvas_image = self.canvas.create_image(
0, 0, anchor="nw", image=self.tk_image
)
self.canvas.bind("<Button-1>", self._DeleteSoma)
self.canvas.pack()
def LaunchInteraction(self) -> None:
""""""
self.root.mainloop()
# scikit-image.relabel(self.lmap)
def _DeleteSoma(self, event) -> None:
""""""
row = event.y
col = event.x
value = self.mip[row, col]
if value > 0:
self.lmap[self.lmap == value] = 0
soma_bmap = self.mip == value
self.mip[soma_bmap] = 0
self.scaled_mip[soma_bmap] = 0
self.tk_image = ImageTk.PhotoImage(
master=self.root, image=Image.fromarray(self.scaled_mip)
)
self.canvas.itemconfig(self.canvas_image, image=self.tk_image)
......@@ -65,6 +65,7 @@ import skimage.measure as ms_
import skimage.exposure as ex_
import pandas as pd_
import networkx as nx_
import brick.interface.soma_validation as smvl
print(sy_.argv, sy_.argv.__len__())
......@@ -113,6 +114,7 @@ hist_step_curvature = None
number_of_bins_curvature = None
hist_bins_borders_curvature = None
with_plot = None
interactive = None
in_parallel = None
exec(open(sy_.argv[1]).read()) # Only with search_parameters.py (stable version)
......@@ -272,6 +274,10 @@ def NutriMorph(data_path: str,
if with_plot:
fb_.PlotSomas(somas, som_nfo, axes)
elif interactive:
# smvl.SomaValidation(som_nfo["lmp"], mip_axis=0)
window = smvl.soma_validation_window_t(som_nfo["lmp"], mip_axis=0)
window.LaunchInteraction()
#
# -- Extentions
......
......@@ -49,7 +49,10 @@ parameter3 : None
; then your parameter has the value string: 'None', and not None
[Input]
data_path : /home/eric/Pictures/carole-rovere/CHO_1H_D_1.70_3.3_8.tif
data_path : ./data/DIO_6H_6_1.70bis_2.2_3.tif
#/home/eric/Pictures/carole-rovere/clara-test/TO5_2_12W_pos1.tif
#/home/eric/Pictures/carole-rovere/clara-test/ST8_1.tif
#/home/eric/Pictures/carole-rovere/CHO_1H_D_1.70_3.3_8.tif
#.\\data\\DIO_6H_6_1.70bis_2.2_3.tif
; direct data path to the image
channel : G
......@@ -138,4 +141,5 @@ hist_bins_borders_curvature : (0, 0.05, 0.3, 1, 10, 50)
[Program Running]
with_plot : False
interactive : True
in_parallel : False
# Copyright CNRS/Inria/UNS
# Contributor(s): Eric Debreuve (since 2019), Morgane Nadal (2020)
#
# eric.debreuve@cnrs.fr
#
# This software is governed by the CeCILL license under French law and
# abiding by the rules of distribution of free software. You can use,
# modify and/ or redistribute the software under the terms of the CeCILL
# license as circulated by CEA, CNRS and INRIA at the following URL
# "http://www.cecill.info".
#
# As a counterpart to the access to the source code and rights to copy,
# modify and redistribute granted by the license, users are provided only
# with a limited warranty and the software's author, the holder of the
# economic rights, and the successive licensors have only limited
# liability.
#
# In this respect, the user's attention is drawn to the risks associated
# with loading, using, modifying and/or developing or reproducing the
# software by the user in light of its specific status of free software,
# that may mean that it is complicated to manipulate, and that also
# therefore means that it is reserved for developers and experienced
# professionals having in-depth computer knowledge. Users are therefore
# encouraged to load and test the software's suitability as regards their
# requirements in conditions enabling the security of their systems and/or
# data to be ensured and, more generally, to use and operate it in the
# same conditions as regards security.
#
# The fact that you are presently reading this means that you have had
# knowledge of the CeCILL license and that you accept its terms.
import configparser
from typing import Union, Any
# --Parameters from .INI file
parameters = configparser.ConfigParser(allow_no_value=True)
parameters.read('parameters.ini')
def IfNotFloat(section: str, key: str) -> Union[Union[float, str], Any]:
if parameters.get(section, key) is not None:
try:
value = parameters.getfloat(section, key)
return value
except:
return eval(parameters.get(section, key))
else:
return parameters.get(section, key)
# [Input]
data_path = parameters['Input']['data_path']
channel = parameters['Input']['channel']
size_voxel_in_micron = IfNotFloat('Input', 'size_voxel_in_micron')
dilatation_erosion = parameters.getboolean('Input', 'dilatation_erosion')
save_images = parameters['Input']['save_images']
save_csv = parameters['Input']['save_csv']
save_features_analysis = parameters['Input']['save_features_analysis']
statistical_analysis = parameters.getboolean('Input', 'statistical_analysis')
# [Somas]
soma_low_c = IfNotFloat('Somas', 'soma_low_c')
soma_high_c = IfNotFloat('Somas', 'soma_high_c')
soma_selem_micron_c = IfNotFloat('Somas', 'soma_selem_micron_c')
soma_min_area_c = IfNotFloat('Somas', 'soma_min_area_c')
soma_max_area_c = IfNotFloat('Somas', 'soma_max_area_c')
# [Extensions]
adapt_hist_equalization = parameters.getboolean('Extensions', 'adapt_hist_equalization')
ext_low_c = IfNotFloat('Extensions', 'ext_low_c')
ext_high_c = IfNotFloat('Extensions', 'ext_high_c')
ext_selem_micron_c = IfNotFloat('Extensions', 'ext_selem_micron_c')
ext_min_area_c = IfNotFloat('Extensions', 'ext_min_area_c')
# [Connexions]
max_straight_sq_dist_c = IfNotFloat('Connexions', 'max_straight_sq_dist_c')
max_weighted_length_c = IfNotFloat('Connexions', 'max_weighted_length_c')
# [Frangi]
scale_range = IfNotFloat('Frangi', 'scale_range')
scale_step = IfNotFloat('Frangi', 'scale_step')
alpha = IfNotFloat('Frangi', 'alpha')
beta = IfNotFloat('Frangi', 'beta')
frangi_c = IfNotFloat('Frangi', 'frangi_c')
diff_mode = parameters['Frangi']['diff_mode']
bright_on_dark = parameters.getboolean('Frangi', 'bright_on_dark')
method = parameters['Frangi']['method']
# [Features Extraction]
hist_min_length = IfNotFloat('Features Extraction', 'hist_min_length')
hist_step_length = IfNotFloat('Features Extraction', 'hist_step_length')
number_of_bins_length = IfNotFloat('Features Extraction', 'number_of_bins_length')
hist_bins_borders_length = IfNotFloat('Features Extraction', 'hist_bins_borders_length')
hist_min_curvature = IfNotFloat('Features Extraction', 'hist_min_curvature')
hist_step_curvature = IfNotFloat('Features Extraction', 'hist_step_curvature')
number_of_bins_curvature = IfNotFloat('Features Extraction', 'number_of_bins_curvature')
hist_bins_borders_curvature = IfNotFloat('Features Extraction', 'hist_bins_borders_curvature')
# [Program running]
with_plot = parameters.getboolean('Program Running', 'with_plot')
in_parallel = parameters.getboolean('Program Running', 'in_parallel')
# data_path = "./data/DIO_6H_6_1.70bis_2.2_3.tif"
# channel = 'G'
# size_voxel_in_micron = None # -> list [X,Y,Z]
# with_plot = False
#
# soma_low_c = 0.15
# soma_high_c = 0.7126
# ext_low_c = 0.2 #3 #1e-7 ##0.2 # 0.02 # 0.2 # ext_low_c = 9.0e-4
# ext_high_c = 0.6 #1e-10 #1.2e-7 ##0.6 # 0.04 # 0.6 # high_ext = 8.0e-3
#
# # soma_selem_c = mp_.disk(2)
# # ext_selem_c = mp_.disk(1)
# soma_selem_micron_c = 0.24050024 * 2
# ext_selem_micron_c = 0.24050024 * 1
#
# max_straight_sq_dist_c = (30 ** 2) * 0.24050024
# max_weighted_length_c = 20.0 * 0.24050024
#
# soma_min_area_c = 1000 * (0.24050024 ** 2)
# ext_min_area_c = 100 * (0.24050024 ** 2)
# # soma_min_area_c = 1000
# # ext_min_area_c = 100
#
# in_parallel = False
# Copyright CNRS/Inria/UNS
# Contributor(s): Eric Debreuve (since 2019), Morgane Nadal (2020)
#
# eric.debreuve@cnrs.fr
#
# This software is governed by the CeCILL license under French law and
# abiding by the rules of distribution of free software. You can use,
# modify and/ or redistribute the software under the terms of the CeCILL
# license as circulated by CEA, CNRS and INRIA at the following URL
# "http://www.cecill.info".
#
# As a counterpart to the access to the source code and rights to copy,
# modify and redistribute granted by the license, users are provided only
# with a limited warranty and the software's author, the holder of the
# economic rights, and the successive licensors have only limited
# liability.
#
# In this respect, the user's attention is drawn to the risks associated
# with loading, using, modifying and/or developing or reproducing the
# software by the user in light of its specific status of free software,
# that may mean that it is complicated to manipulate, and that also
# therefore means that it is reserved for developers and experienced
# professionals having in-depth computer knowledge. Users are therefore
# encouraged to load and test the software's suitability as regards their
# requirements in conditions enabling the security of their systems and/or
# data to be ensured and, more generally, to use and operate it in the
# same conditions as regards security.
#
# The fact that you are presently reading this means that you have had
# knowledge of the CeCILL license and that you accept its terms.
import configparser
from typing import Union, Any
# --Parameters from .INI file
parameters = configparser.ConfigParser(allow_no_value=True)
parameters.read('parameters.ini')
def IfNotFloat(section: str, key: str) -> Union[Union[float, str], Any]:
if parameters.get(section, key) is not None:
try:
value = parameters.getfloat(section, key)
return value
except:
return eval(parameters.get(section, key))
else:
return parameters.get(section, key)
# [Input]
data_path = parameters['Input']['data_path']
channel = parameters['Input']['channel']
size_voxel_in_micron = IfNotFloat('Input', 'size_voxel_in_micron')
dilatation_erosion = parameters.getboolean('Input', 'dilatation_erosion')
save_images = parameters['Input']['save_images']
save_csv = parameters['Input']['save_csv']
save_features_analysis = parameters['Input']['save_features_analysis']
statistical_analysis = parameters.getboolean('Input', 'statistical_analysis')
# [Somas]
soma_low_c = IfNotFloat('Somas', 'soma_low_c')
soma_high_c = IfNotFloat('Somas', 'soma_high_c')
soma_selem_micron_c = IfNotFloat('Somas', 'soma_selem_micron_c')
soma_min_area_c = IfNotFloat('Somas', 'soma_min_area_c')
soma_max_area_c = IfNotFloat('Somas', 'soma_max_area_c')
# [Extensions]
adapt_hist_equalization = parameters.getboolean('Extensions', 'adapt_hist_equalization')
ext_low_c = IfNotFloat('Extensions', 'ext_low_c')
ext_high_c = IfNotFloat('Extensions', 'ext_high_c')
ext_selem_micron_c = IfNotFloat('Extensions', 'ext_selem_micron_c')
ext_min_area_c = IfNotFloat('Extensions', 'ext_min_area_c')
# [Connexions]
max_straight_sq_dist_c = IfNotFloat('Connexions', 'max_straight_sq_dist_c')
max_weighted_length_c = IfNotFloat('Connexions', 'max_weighted_length_c')
# [Frangi]
scale_range = IfNotFloat('Frangi', 'scale_range')
scale_step = IfNotFloat('Frangi', 'scale_step')
alpha = IfNotFloat('Frangi', 'alpha')
beta = IfNotFloat('Frangi', 'beta')
frangi_c = IfNotFloat('Frangi', 'frangi_c')
diff_mode = parameters['Frangi']['diff_mode']
bright_on_dark = parameters.getboolean('Frangi', 'bright_on_dark')
method = parameters['Frangi']['method']
# [Features Extraction]
hist_min_length = IfNotFloat('Features Extraction', 'hist_min_length')
hist_step_length = IfNotFloat('Features Extraction', 'hist_step_length')
number_of_bins_length = IfNotFloat('Features Extraction', 'number_of_bins_length')
hist_bins_borders_length = IfNotFloat('Features Extraction', 'hist_bins_borders_length')
hist_min_curvature = IfNotFloat('Features Extraction', 'hist_min_curvature')
hist_step_curvature = IfNotFloat('Features Extraction', 'hist_step_curvature')
number_of_bins_curvature = IfNotFloat('Features Extraction', 'number_of_bins_curvature')
hist_bins_borders_curvature = IfNotFloat('Features Extraction', 'hist_bins_borders_curvature')
# [Program running]
with_plot = parameters.getboolean('Program Running', 'with_plot')
interactive = parameters.getboolean('Program Running', 'interactive')
in_parallel = parameters.getboolean('Program Running', 'in_parallel')
# data_path = "./data/DIO_6H_6_1.70bis_2.2_3.tif"
# channel = 'G'
# size_voxel_in_micron = None # -> list [X,Y,Z]
# with_plot = False
#
# soma_low_c = 0.15
# soma_high_c = 0.7126
# ext_low_c = 0.2 #3 #1e-7 ##0.2 # 0.02 # 0.2 # ext_low_c = 9.0e-4
# ext_high_c = 0.6 #1e-10 #1.2e-7 ##0.6 # 0.04 # 0.6 # high_ext = 8.0e-3
#
# # soma_selem_c = mp_.disk(2)
# # ext_selem_c = mp_.disk(1)
# soma_selem_micron_c = 0.24050024 * 2
# ext_selem_micron_c = 0.24050024 * 1
#
# max_straight_sq_dist_c = (30 ** 2) * 0.24050024
# max_weighted_length_c = 20.0 * 0.24050024
#
# soma_min_area_c = 1000 * (0.24050024 ** 2)
# ext_min_area_c = 100 * (0.24050024 ** 2)
# # soma_min_area_c = 1000
# # ext_min_area_c = 100
#
# in_parallel = False
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment