@@ -374,25 +374,36 @@ def ms_toposeg(inRas, outShp, iterations=100, algo='ACWE', band=2, dist=30,
374374
375375 if usemin == True :
376376 minIm = peak_local_max (invert (img ), min_distance = dist , indices = False )
377-
378-
379-
380- ste = selem .square (se )
381- dilated = binary_dilation (maxIm , selem = ste )
382- seg , _ = ndi .label (dilated )
383- cnt = list (np .unique (seg ))
384-
385- cnt .pop (0 )
386- #levelsets = [seg==s for s in cnt]
387-
388- iters = np .arange (iterations )
389-
390- orig = seg > 0
377+
378+ if algo == 'ACWE' :
379+ ste = selem .square (se )
380+ dilated = binary_dilation (maxIm , selem = ste )
381+ seg , _ = ndi .label (dilated )
382+ cnt = list (np .unique (seg ))
383+
384+ cnt .pop (0 )
385+ #levelsets = [seg==s for s in cnt]
386+
387+ iters = np .arange (iterations )
388+
389+ orig = seg > 0
391390#TODO - get fuse burner algo in this
392391
393392 if algo == 'GAC' :
394393
394+ ste = selem .square (se )
395395 gimg = inverse_gaussian_gradient (img )
396+ maxIm = peak_local_max (gimg , min_distance = dist , indices = False )
397+ dilated = binary_dilation (maxIm , selem = ste )
398+ seg , _ = ndi .label (dilated )
399+ cnt = list (np .unique (seg ))
400+
401+ cnt .pop (0 )
402+ #levelsets = [seg==s for s in cnt]
403+
404+ iters = np .arange (iterations )
405+
406+ orig = seg > 0
396407
397408
398409
@@ -413,6 +424,47 @@ def ms_toposeg(inRas, outShp, iterations=100, algo='ACWE', band=2, dist=30,
413424 orig [bw == 1 ]= 1
414425 del inv , sk
415426
427+ if usemin == True :
428+
429+ minIm = peak_local_max (invert (gimg ), min_distance = dist , indices = False )
430+ dilated = binary_dilation (minIm , selem = ste )
431+ seg , _ = ndi .label (dilated )
432+ cnt = list (np .unique (seg ))
433+
434+ cnt .pop (0 )
435+ iters = np .arange (iterations )
436+ orig = seg > 0
437+ e2 = mh .bwperim (bw )
438+ edge [e2 == 1 ]= 1
439+
440+
441+ if init != None :
442+ initBw = orig
443+ orig = mcv (img , iterations = init ,init_level_set = initBw ,
444+ smoothing = smooth , lambda1 = 1 ,
445+ lambda2 = 1 )
446+ orig = orig > 0
447+
448+ for i in tqdm (iters ):
449+ inv = invert (orig )
450+ sk = skeletonize (inv )
451+ sk = _skelprune (sk )
452+ bw2 = mcv (img , iterations = 1 ,init_level_set = orig , smoothing = smooth , lambda1 = 1 ,
453+ lambda2 = 1 )
454+ bw2 [sk == 1 ]= 0
455+ if useedge == True :
456+ bw2 [edge == 1 ]= 0
457+ # why do this? I think seg=bw will result in a pointer....
458+ orig = np .zeros_like (bw2 , dtype = np .bool )
459+ orig [bw2 == 1 ]= 1
460+
461+ del inv , sk
462+
463+ bw [bw2 == 1 ]= 1
464+ newseg , _ = nd .label (bw )
465+
466+
467+
416468 else :
417469 # let it run for a bit to avoid over seg
418470 if init != None :
@@ -438,48 +490,51 @@ def ms_toposeg(inRas, outShp, iterations=100, algo='ACWE', band=2, dist=30,
438490
439491 del inv , sk
440492
441- if usemin == True :
442-
443-
493+
494+
495+
496+ if usemin == True :
497+
498+
499+
500+ dilated = binary_dilation (minIm , selem = ste )
501+ seg , _ = ndi .label (dilated )
502+ cnt = list (np .unique (seg ))
444503
445- dilated = binary_dilation (minIm , selem = ste )
446- seg , _ = ndi .label (dilated )
447- cnt = list (np .unique (seg ))
504+ cnt .pop (0 )
505+ iters = np .arange (iterations )
506+ orig = seg > 0
507+ e2 = mh .bwperim (bw )
508+ edge [e2 == 1 ]= 1
448509
449- cnt .pop (0 )
450- iters = np .arange (iterations )
451- orig = seg > 0
452- e2 = mh .bwperim (bw )
453- edge [e2 == 1 ]= 1
454-
455-
456- if init != None :
457- initBw = orig
458- orig = mcv (img , iterations = init ,init_level_set = initBw ,
459- smoothing = smooth , lambda1 = 1 ,
460- lambda2 = 1 )
461- orig = orig > 0
462-
463- for i in tqdm (iters ):
464- inv = invert (orig )
465- sk = skeletonize (inv )
466- sk = _skelprune (sk )
467- bw2 = mcv (img , iterations = 1 ,init_level_set = orig , smoothing = smooth , lambda1 = 1 ,
510+
511+ if init != None :
512+ initBw = orig
513+ orig = mcv (img , iterations = init ,init_level_set = initBw ,
514+ smoothing = smooth , lambda1 = 1 ,
468515 lambda2 = 1 )
469- bw2 [sk == 1 ]= 0
470- if useedge == True :
471- bw2 [edge == 1 ]= 0
472- # why do this? I think seg=bw will result in a pointer....
473- orig = np .zeros_like (bw2 , dtype = np .bool )
474- orig [bw2 == 1 ]= 1
475-
476- del inv , sk
477- # remove_small_objects(bw, min_size=3, in_place=True)
478- bw [bw2 == 1 ]= 1
479- newseg , _ = nd .label (bw )
516+ orig = orig > 0
480517
481- else :
482- newseg , _ = nd .label (bw )
518+ for i in tqdm (iters ):
519+ inv = invert (orig )
520+ sk = skeletonize (inv )
521+ sk = _skelprune (sk )
522+ bw2 = mcv (img , iterations = 1 ,init_level_set = orig , smoothing = smooth , lambda1 = 1 ,
523+ lambda2 = 1 )
524+ bw2 [sk == 1 ]= 0
525+ if useedge == True :
526+ bw2 [edge == 1 ]= 0
527+ # why do this? I think seg=bw will result in a pointer....
528+ orig = np .zeros_like (bw2 , dtype = np .bool )
529+ orig [bw2 == 1 ]= 1
530+
531+ del inv , sk
532+ # remove_small_objects(bw, min_size=3, in_place=True)
533+ bw [bw2 == 1 ]= 1
534+ newseg , _ = nd .label (bw )
535+
536+ else :
537+ newseg , _ = nd .label (bw )
483538
484539 if close == True :
485540 ste2 = selem .square (3 )
0 commit comments