def find_ellipses_display( dfore , bw ): """Fits ellipses to connected components in image. Returns an EllipseList, each member representing the x,y position and orientation of a single fly.""" # check number of above-threshold pixels rows, cols = num.nonzero( bw ) # find connected components (L,ncc) = meas.label(bw) # make sure there aren't too many connected components if ncc > params.max_n_clusters: warn( "too many objects found (>%d); truncating object search"%(params.max_n_clusters) ) # for now, just throw out the last connected components. # in the future, we can sort based on area and keep those # with the largest area. hopefully, this never actually # happens. ncc = params.max_n_clusters L[L >= ncc] = 0 # fit ellipses ellipses = est.weightedregionprops(L,ncc,dfore) # check if any are small, and [try to] fix those (issmall,didlowerthresh,didmerge,diddelete) = est.fixsmalldisplay(ellipses,L,dfore) # check if any are large, and [try to] fix those (islarge,didsplit) = est.fixlargedisplay(ellipses,L,dfore) return (ellipses,issmall,islarge,didlowerthresh,didmerge,diddelete,didsplit)
def find_ellipses_display( dfore , L, ncc ): """Fits ellipses to connected components in image. Returns an EllipseList, each member representing the x,y position and orientation of a single fly.""" # fit ellipses if DEBUG_TRACKINGSETTINGS: print 'ncc = ' + str(ncc) + ', max(L) = ' + str(num.max(L)) + ', nnz(L) = ' + str(num.flatnonzero(L).shape) + ', sum(dfore) = ' + str(num.sum(num.sum(dfore))) ellipses = est.weightedregionprops(L,ncc,dfore) ellipsescopy = [] for ell in ellipses: ellipsescopy.append(ell.copy()) if DEBUG_TRACKINGSETTINGS: print 'before fixing, ellipses = ' + str(ellipses) + ', len = ' + str(len(ellipses)) if DEBUG_TRACKINGSETTINGS: areasum = 0 for ell in ellipses: areasum += ell.area print 'summed area of ellipses = ' + str(areasum) # check if any are small, and [try to] fix those (ellsmall,didlowerthresh,didmerge,diddelete) = est.fixsmalldisplay(ellipses,L,dfore) if DEBUG_TRACKINGSETTINGS: print 'after fixing small ellipses, ellipses = ' + str(ellipses) + ', len = ' + str(len(ellipses)) if DEBUG_TRACKINGSETTINGS: print 'ellsmall = ' + str(ellsmall) if DEBUG_TRACKINGSETTINGS: print 'didlowerthresh = ' + str(didlowerthresh) if DEBUG_TRACKINGSETTINGS: print 'didmerge = ' + str(didmerge) if DEBUG_TRACKINGSETTINGS: print 'diddelete = ' + str(diddelete) # check if any are large, and [try to] fix those (elllarge,didsplit) = est.fixlargedisplay(ellipses,L,dfore) if DEBUG_TRACKINGSETTINGS: print 'after fixing large ellipses, ellipses = ' + str(ellipses) + ', len = ' + str(len(ellipses)) if DEBUG_TRACKINGSETTINGS: print 'elllarge = ' + str(elllarge) if DEBUG_TRACKINGSETTINGS: print 'didsplit = ' + str(didsplit) if DEBUG_TRACKINGSETTINGS: print 'ellsmall = ' + str(ellsmall) if DEBUG_TRACKINGSETTINGS: print 'didlowerthresh = ' + str(didlowerthresh) if DEBUG_TRACKINGSETTINGS: print 'didmerge = ' + str(didmerge) if DEBUG_TRACKINGSETTINGS: print 'diddelete = ' + str(diddelete) if DEBUG_TRACKINGSETTINGS: print 'returning ellipsescopy = ' + str(ellipsescopy) + ', len = ' + str(len(ellipsescopy)) if DEBUG_TRACKINGSETTINGS: areasum = 0 for ell in ellipsescopy: areasum += ell.area print 'summed area of ellipses = ' + str(areasum) return (ellipsescopy,ellsmall,elllarge,didlowerthresh,didmerge,diddelete,didsplit)