Mentions légales du service
Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
N
NutriMorph
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Model registry
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
DEBREUVE Eric
NutriMorph
Commits
1b41ed0e
Commit
1b41ed0e
authored
4 years ago
by
DEBREUVE Eric
Browse files
Options
Downloads
Patches
Plain Diff
added basic soma validation interface
parent
2e57a10e
No related branches found
No related tags found
No related merge requests found
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
brick/interface/soma_validation.py
+57
-0
57 additions, 0 deletions
brick/interface/soma_validation.py
nutrimorph.py
+6
-0
6 additions, 0 deletions
nutrimorph.py
parameters.ini
+5
-1
5 additions, 1 deletion
parameters.ini
search_parameters.py
+128
-127
128 additions, 127 deletions
search_parameters.py
with
196 additions
and
128 deletions
brick/interface/soma_validation.py
0 → 100644
+
57
−
0
View file @
1b41ed0e
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
)
This diff is collapsed.
Click to expand it.
nutrimorph.py
+
6
−
0
View file @
1b41ed0e
...
...
@@ -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
...
...
This diff is collapsed.
Click to expand it.
parameters.ini
+
5
−
1
View file @
1b41ed0e
...
...
@@ -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
This diff is collapsed.
Click to expand it.
search_parameters.py
+
128
−
127
View file @
1b41ed0e
# 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
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment