Morph-M Python - Launch some examples » History » Version 3
Serge Koudoro, 10/23/2009 03:37 PM
1 | 1 | Serge Koudoro | h1. Morph-M Python - Launch some examples |
---|---|---|---|
2 | |||
3 | |||
4 | h3. Micro aneurysm detection |
||
5 | |||
6 | 2 | Serge Koudoro | | !http://morphm.ensmp.fr/attachments/37/retina2.png! |/4.<pre><code class="ruby"> |
7 | 1 | Serge Koudoro | |
8 | #Structuring Element |
||
9 | nl = SquareSE |
||
10 | |||
11 | imIn = fileRead(images_dir+"/Gray/retina2.png") |
||
12 | imOut = getSame(imIn) |
||
13 | imTmp = getSame(imIn) |
||
14 | |||
15 | # .............................. |
||
16 | # open and then build |
||
17 | # .............................. |
||
18 | ImOpen(imIn,HomotheticSE(nl,4),imTmp) |
||
19 | ImUnderBuild(imTmp,imIn,nl,imOut) |
||
20 | fileWrite(imOut,"imBuildOpen.png") |
||
21 | |||
22 | # .............................. |
||
23 | # all in one step |
||
24 | # .............................. |
||
25 | #ImEroBuildOpen(imIn, HomotheticSE(nl, 4), nl, imOut) |
||
26 | #fileWrite(imOut,"imEroBuildOpen.png") |
||
27 | |||
28 | |||
29 | </code></pre> | |
||
30 | |=.*_Original Image_* | |
||
31 | 2 | Serge Koudoro | | !http://morphm.ensmp.fr/attachments/39/imBuildOpen.png!| |
32 | 1 | Serge Koudoro | |=.*_Result_* | |
33 | |||
34 | h3. Holes detection |
||
35 | |||
36 | 2 | Serge Koudoro | | !http://morphm.ensmp.fr/attachments/38/gruyere.png! |/4.<pre><code class="ruby"> |
37 | 1 | Serge Koudoro | |
38 | ################################################## |
||
39 | # Fill Holes |
||
40 | ################################################## |
||
41 | nl = SquareSE |
||
42 | imIn = fileRead(images_dir+"/Bin/gruyere.png") |
||
43 | imMark = getSame(imIn) |
||
44 | imOut = getSame(imIn) |
||
45 | imTmp = getSame(imIn) |
||
46 | # .............................. |
||
47 | # with underbuild |
||
48 | # .............................. |
||
49 | arithInvertImage(imIn,imIn) |
||
50 | ImSetConstant(imMark,0) |
||
51 | DrawBorder(imMark,255) |
||
52 | ImUnderBuild(imMark,imIn,nl,imOut) |
||
53 | arithInvertImage(imIn,imIn) |
||
54 | arithInvertImage(imOut,imOut) |
||
55 | fileWrite(imOut,"imFillUnder.png") |
||
56 | |||
57 | </code></pre> | |
||
58 | |=.*_Original Image_* | |
||
59 | 2 | Serge Koudoro | | !http://morphm.ensmp.fr/attachments/40/imFillUnder.png! | |
60 | 1 | Serge Koudoro | |=.*_Result_* | |
61 | |||
62 | h3. Coffee segmentation |
||
63 | |||
64 | | !coffee.png! |/4.<pre><code class="ruby"> |
||
65 | |||
66 | im=fileRead(images_dir+"/Bin/"+Image+ext) |
||
67 | |||
68 | 3 | Serge Koudoro | ##Initialisation des images intermédiaires |
69 | imStrech,imDistance,imDistanceFilter,imDisInvert,imWs,imWsShowLinesOnInitImage=getSame(im),getSame(im),getSame(im),getSame(im),getSame(im),getSame(im) |
||
70 | |||
71 | ##Choix Connexité du graphe |
||
72 | nl=NeighborList.neighborsHex2D |
||
73 | 1 | Serge Koudoro | |
74 | 3 | Serge Koudoro | ##Affichage de l'image des grains |
75 | fileWrite(im,Image+".png") |
||
76 | 1 | Serge Koudoro | |
77 | 3 | Serge Koudoro | ##Calcule de la fonction distance |
78 | print "Compute Distance function:" |
||
79 | |||
80 | Distance(im,nl,imDistance) |
||
81 | ImStretchHistogram(imDistance,0,255,imStrech) |
||
82 | fileWrite(imDistance,Image+"_DistanceFunction.png") |
||
83 | fileWrite(imStrech,Image+"_DistanceFunction_0_255.png") |
||
84 | 1 | Serge Koudoro | |
85 | ##Filtage par HMaxima de la fonction distance |
||
86 | 3 | Serge Koudoro | ##Parameters HMaxima |
87 | TreshHeightMaxima=2 |
||
88 | print "Erase lowest maxima, dynamic <=",TreshHeightMaxima |
||
89 | |||
90 | ImHMaxima(imDistance,nl,TreshHeightMaxima,imDistanceFilter) |
||
91 | 1 | Serge Koudoro | |
92 | 3 | Serge Koudoro | ##Calule du watershed de la fonction distance |
93 | print "Compute watershed in inverse Filter Distance function:" |
||
94 | |||
95 | arithInvertImage(imDistanceFilter,imDisInvert) |
||
96 | ImWatershed(imDisInvert,nl,imWs) |
||
97 | ImCompare_ssi(imWs,compareOp.Equal,255,127,im,imWsShowLinesOnInitImage) |
||
98 | fileWrite(imWsShowLinesOnInitImage,Image+"_WsOfDistanceFunctionFilter.png") |
||
99 | 1 | Serge Koudoro | |
100 | </code></pre> | |
||
101 | |=.*_Original Image_* | |
||
102 | 2 | Serge Koudoro | | !http://morphm.ensmp.fr/attachments/41/coffee_WsOfDistanceFunctionFilter.png! | |
103 | 1 | Serge Koudoro | |=.*_Result_* | |
104 | |||
105 | |||
106 | h3. Road Detection |
||
107 | |||
108 | 2 | Serge Koudoro | | !http://morphm.ensmp.fr/attachments/43/road.png! | !http://morphm.ensmp.fr/attachments/44/road_ws.png! |/8.<pre><code class="ruby"> |
109 | 1 | Serge Koudoro | |
110 | im = fileRead(images_dir+"/Gray/road.png") |
||
111 | imgra = getSame(im) |
||
112 | imtmp = getSame(im) |
||
113 | imws0 = getSame(im) |
||
114 | imws1 = getSame(im) |
||
115 | nl=HexSE |
||
116 | |||
117 | # Segmentation with the waterfall algo. |
||
118 | ImMorphoGradient(im,nl,imgra) |
||
119 | ImWatershed(imgra,nl,imws0) |
||
120 | fileWrite(imws0,"road_ws.png") |
||
121 | |||
122 | for i in range(3): |
||
123 | ImWaterfalls(imgra,imws0,nl,imws1,imtmp) |
||
124 | fileWrite(imws1,"road_wf"+str(i)+".png") |
||
125 | |||
126 | ImCopy(imws1,imws0) |
||
127 | </code></pre> | |
||
128 | |=.*_Original Image_* |=.*_road_watershed_* | |
||
129 | 2 | Serge Koudoro | | !http://morphm.ensmp.fr/attachments/45/road_wf0.png! | !http://morphm.ensmp.fr/attachments/46/road_wf1.png! | |
130 | 1 | Serge Koudoro | |=.*_road_waterFall 0_* |=.*_road_waterFall 1_* | |