00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 from fulguro import *
00012
00013
00014 def benchmark(function,nbiter,*args):
00015 import time
00016 t=time.time()
00017 for i in range(nbiter):
00018 function(*args)
00019 t2=time.time()
00020 return ((t2-t)*1000)/nbiter
00021
00022
00023
00024 def quasiDistance(im_indicatrice, im_associe, imin, connexity):
00025 nhb = FLGR_Data2D(imin.spp,imin.type,connexity)
00026 imw1 = FLGR_Data2D(imin)
00027 imw2 = FLGR_Data2D(imin)
00028 imtemp1 = FLGR_Data2D(imin)
00029
00030 flgr2d_copy(imw1,imin)
00031 flgr2d_clear_all(im_indicatrice)
00032 flgr2d_clear_all(im_associe)
00033
00034 vol1 = flgr2d_measure_volume(imw1)[0]
00035 vol2 = vol1+1
00036
00037 i=0
00038
00039 while vol2>vol1:
00040 i += 1
00041 vol2 = vol1
00042
00043 flgr2d_erode(imw2, imw1, nhb)
00044 flgr2d_arith_sub(imw1, imw1, imw2)
00045
00046 flgr2d_replace(imtemp1,imw1,">=",im_associe,i,0);
00047
00048 flgr2d_arith_sup(im_indicatrice, imtemp1, im_indicatrice)
00049 flgr2d_arith_sup(im_associe, imw1, im_associe)
00050
00051 flgr2d_copy(imw1,imw2)
00052
00053 vol1 = flgr2d_measure_volume(imw1)[0]
00054
00055
00056
00057
00058 def descente(imout,imin,connexity):
00059 nhb = FLGR_Data2D(imin.spp,imin.type,connexity)
00060 imw1 = FLGR_Data2D(imin)
00061 imw2 = FLGR_Data2D(imin)
00062 imtemp1 = FLGR_Data2D(imin)
00063 imtemp2 = FLGR_Data2D(imin)
00064
00065 flgr2d_copy(imw1,imin)
00066
00067 vol1 = flgr2d_measure_volume(imw1)[0]
00068 vol2 = vol1 + 1
00069
00070 i=0
00071
00072 while vol2>vol1:
00073 i = i + 1
00074 vol2 = vol1
00075
00076 flgr2d_erode(imw2, imw1, nhb)
00077 flgr2d_arith_sub(imtemp1,imw1,imw2)
00078 flgr2d_arith_add(imtemp2,imw2,1)
00079
00080
00081 flgr2d_arith_inf(imw1,imtemp2,imw1)
00082
00083 vol1 = flgr2d_measure_volume(imw1)[0]
00084
00085 flgr2d_copy(imout,imw1)
00086
00087
00088
00089
00090
00091
00092 imin = flgr2d_load_pgm('../../images/gray/cameraman.pgm')
00093 imqdist1 = FLGR_Data2D(imin)
00094 imresidu = FLGR_Data2D(imin)
00095 imqdist2 = FLGR_Data2D(imin)
00096
00097
00098
00099
00100 print "Quasi distance time : ",benchmark(quasiDistance,20,imqdist1,imresidu,imin,FLGR_8_CONNEX),"ms"
00101
00102 print "Descente time : ",benchmark(descente,20,imqdist2,imqdist1,FLGR_8_CONNEX),"ms"
00103
00104 flgr2d_save_pgm(imqdist1,"quasidistance_perche_fulguro")
00105 flgr2d_save_pgm(imqdist2,"quasidistance_fulguro")
00106
00107 flgr2d_save_pgm(imresidu,"quasidistance_residu_fulguro")
00108
00109 flgr_display(imin,"imin",
00110 imqdist2,'quasidistance',
00111 imresidu,'residu')
00112