root / bin / MGX_CurvatureMapSegmentation.py @ 20
Historique | Voir | Annoter | Télécharger (3,4 ko)
1 | 20 | akiss | import os |
---|---|---|---|
2 | 20 | akiss | |
3 | 20 | akiss | '''
|
4 | 20 | akiss | Input:
|
5 | 20 | akiss | - directory with detected sepal contour stacks .tif
|
6 | 20 | akiss |
|
7 | 20 | akiss | Output:
|
8 | 20 | akiss | - segmented meshes (up and down surfaces treated as cells)
|
9 | 20 | akiss | - csv file / sepale containing : up and down surface areas
|
10 | 20 | akiss |
|
11 | 20 | akiss | '''
|
12 | 20 | akiss | |
13 | 20 | akiss | # directory with detected sepal contours
|
14 | 20 | akiss | filedata1="/home/biophysics/Desktop/Annamaria/SepalContours"
|
15 | 20 | akiss | |
16 | 20 | akiss | |
17 | 20 | akiss | ################### Parameters ###########
|
18 | 20 | akiss | |
19 | 20 | akiss | # cubesize for mesh creation
|
20 | 20 | akiss | #cubesize=str(15)
|
21 | 20 | akiss | cubesize=str(5) |
22 | 20 | akiss | |
23 | 20 | akiss | # size of neighbourhood for the segmented curvature map
|
24 | 20 | akiss | curv_neighb=str(100) |
25 | 20 | akiss | |
26 | 20 | akiss | # segmentation
|
27 | 20 | akiss | signal_ratio=str(3) # minimal border / cell signal ratio (if less, cells are fused) |
28 | 20 | akiss | # - cell
|
29 | 20 | akiss | cell_blur_radius=str(100) |
30 | 20 | akiss | seed_radius=str(150) |
31 | 20 | akiss | # - border
|
32 | 20 | akiss | border_distance=str(100) |
33 | 20 | akiss | border_blur_radius=str(100) |
34 | 20 | akiss | |
35 | 20 | akiss | #########################################
|
36 | 20 | akiss | |
37 | 20 | akiss | filedata=filedata1+'/'
|
38 | 20 | akiss | meshresult=filedata1+'-MGX-mesh'+cubesize+'/' |
39 | 20 | akiss | curvaturecsvresult=filedata1+'-MGX-curvature-csv/'
|
40 | 20 | akiss | arearesult=filedata1+'-MGX-area/'
|
41 | 20 | akiss | segresult=filedata1+'-MGX-seg/'
|
42 | 20 | akiss | |
43 | 20 | akiss | |
44 | 20 | akiss | os.system("mkdir "+meshresult)
|
45 | 20 | akiss | os.system("mkdir "+curvaturecsvresult)
|
46 | 20 | akiss | os.system("mkdir "+arearesult)
|
47 | 20 | akiss | os.system("mkdir "+segresult)
|
48 | 20 | akiss | |
49 | 20 | akiss | |
50 | 20 | akiss | listfiles=os.listdir(filedata) |
51 | 20 | akiss | listfiles=[ i for i in listfiles if '.tif' in i] |
52 | 20 | akiss | |
53 | 20 | akiss | |
54 | 20 | akiss | Process.Stack__System__Clear_Work_Stack('0')
|
55 | 20 | akiss | Process.Stack__System__Clear_Main_Stack('0')
|
56 | 20 | akiss | Process.Stack__System__Clear_Main_Stack('1')
|
57 | 20 | akiss | Process.Stack__System__Clear_Work_Stack('1')
|
58 | 20 | akiss | for i in listfiles: |
59 | 20 | akiss | Process.Stack__System__Set_Current_Stack('Main', '0') |
60 | 20 | akiss | Process.Stack__System__Open(filedata+i, 'Main', '0', '', "Yes") |
61 | 20 | akiss | # --- creating surface mesh
|
62 | 20 | akiss | Process.Mesh__Creation__Marching_Cubes_Surface(cubesize, '5000')
|
63 | 20 | akiss | Process.Mesh__Structure__Smooth_Mesh('1', 'No') |
64 | 20 | akiss | Process.Mesh__Structure__Smooth_Mesh('1', 'No') |
65 | 20 | akiss | Process.Mesh__Structure__Smooth_Mesh('1', 'No') |
66 | 20 | akiss | Process.Mesh__Structure__Smooth_Mesh('1', 'No') |
67 | 20 | akiss | # --- computing maximal curvature
|
68 | 20 | akiss | csvname=i[:-4]+'-carte-courbure-Maximal'+curv_neighb+'.csv' |
69 | 20 | akiss | Process.Mesh__Signal__Project_Mesh_Curvature(curvaturecsvresult+csvname, 'Maximal', curv_neighb, 'Yes', '-50.0', '50.0', '85') |
70 | 20 | akiss | meshname=i[:-4]+'-mesh.mgxm' |
71 | 20 | akiss | Process.Mesh__System__Save(meshresult+meshname, 'no', '0') |
72 | 20 | akiss | Process.Stack__System__Clear_Work_Stack('0')
|
73 | 20 | akiss | Process.Stack__System__Clear_Main_Stack('0')
|
74 | 20 | akiss | Process.Stack__System__Clear_Main_Stack('1')
|
75 | 20 | akiss | Process.Stack__System__Clear_Work_Stack('1')
|
76 | 20 | akiss | # --- watershed segmentation of the maximal curvature map
|
77 | 20 | akiss | Process.Mesh__Segmentation__Auto_Segmentation('Yes', 'No', cell_blur_radius, seed_radius, border_blur_radius, '100.0', border_distance, signal_ratio) |
78 | 20 | akiss | segname=i[:-4]+'-seg.mgxm' |
79 | 20 | akiss | Process.Mesh__System__Save(segresult+segname, 'no', '0') |
80 | 20 | akiss | # --- computing the area of the faces
|
81 | 20 | akiss | csvname=i[:-4]+'-area.csv' |
82 | 20 | akiss | Process.Mesh__Heat_Map__Heat_Map_Classic('Area', 'Geometry', arearesult+csvname, 'Geometry', 'No', '0', '65535', 'Yes', 'No', 'None', 'No', 'Decreasing', 'Ratio', '0.001', '1') |
83 | 20 | akiss | # --- computing teh perimeter
|
84 | 20 | akiss | #csvname=i[:-4]+'-perimeter.csv'
|
85 | 20 | akiss | #Process.Mesh__Heat_Map__Heat_Map('/Geometry/Perimeter', 'No', 'No', '', 'No', '', '', 'Yes', 'Yes')
|
86 | 20 | akiss | # --- computing gaussian curvature
|
87 | 20 | akiss | #Process.Mesh__Signal__Project_Mesh_Curvature('', 'Gaussian', '100', 'Yes', '-50.0', '50.0', '85')
|
88 | 20 | akiss | """print("Please put two seeds on the two sides of the sepal :-) ... ")
|
89 | 20 | akiss | a=input("")
|
90 | 20 | akiss | Process.Mesh__Segmentation__Watershed_Segmentation('50000')
|
91 | 20 | akiss | csvname=i[:-4]+'-area.csv'
|
92 | 20 | akiss | Process.Mesh__Heat_Map__Heat_Map_Classic('Area', 'Geometry', csvresult+csvname, 'Geometry', 'No', '0', '65535', 'Yes', 'No', 'None', 'No', 'Decreasing', 'Ratio', '0.001', '1')
|
93 | 20 | akiss | """ |