def table(s, datas, names, vary_func): p0 = s.obj.pos.copy() r0 = s.obj.rad.copy() slicer = np.s_[s.image[s.inner].shape[0] / 2] model_image = s.image[s.inner][slicer].copy() results = [0] * (len(names) + 1) results[0] = ('Refernce', model_image, p0, r0) filename = tempfile.NamedTemporaryFile().name states.save(s, filename=filename) for i, (name, data) in enumerate(zip(names, datas)): print i, name, data state = states.load(filename) vary_func(state, data) state.reset() optimize(state) results[i + 1] = (name, state.get_difference_image()[slicer].copy(), state.obj.pos.copy(), state.obj.rad.copy()) os.remove(filename) return results
def batch_saveasdict(load_dir, load_names, save_dir, align_text=True, include_iminfo=True): """ Batch loads state, transforms to an OrderedDict, saves as a json with extension ``.json``. Parameters --------- load_dir : String The name of the directory to load the states from. load_names : Iterable Names of the states to load, without the ``.pkl`` extension. save_dir: String The name of the directory to save the json dicts to. align_text : Bool, optional Changes json separators to include a newline and tab, to make the saved dict easier to read by humans. Default is True. include_iminfo : Bool, optional If set, includes two additional keys, ``'image.filename'`` and ``'image.tile'`` with corresponding info about the image. Default is True. """ os.chdir(load_dir) for nm in load_names: save_name = os.path.join(save_dir, nm + '.json') try: st = states.load(nm + '.pkl') except IOError: log.error('Missing {}'.format(nm)) continue log.error('Saving {}'.format(nm)) save_as_dict(st, save_name, include_iminfo=include_iminfo, align_text=align_text)
def get_particles_featuring(feature_rad, state_name=None, im_name=None, use_full_path=False, actual_rad=None, invert=True, featuring_params={}, **kwargs): """ Combines centroid featuring with the globals from a previous state. Runs trackpy.locate on an image, sets the globals from a previous state, calls _translate_particles Parameters ---------- feature_rad : Int, odd The particle radius for featuring, as passed to locate_spheres. state_name : String or None, optional The name of the initially-optimized state. Default is None, which prompts the user to select the name interactively through a Tk window. im_name : String or None, optional The name of the new image to optimize. Default is None, which prompts the user to select the name interactively through a Tk window. use_full_path : Bool, optional Set to True to use the full path of the state instead of partial path names (e.g. /full/path/name/state.pkl vs state.pkl). Default is False actual_rad : Float or None, optional The initial guess for the particle radii. Default is the median of the previous state. invert : Bool Whether to invert the image for featuring, as passed to addsubtract.add_subtract and locate_spheres. Set to False if the image is bright particles on a dark background. Default is True (dark particles on bright background). featuring_params : Dict, optional kwargs-like dict of any additional keyword arguments to pass to ``get_initial_featuring``, such as ``'use_tp'`` or ``'minmass'``. Default is ``{}``. Other Parameters ---------------- max_mem : Numeric The maximum additional memory to use for the optimizers, as passed to optimize.burn. Default is 1e9. desc : String, optional A description to be inserted in saved state. The save name will be, e.g., '0.tif-peri-' + desc + 'initial-burn.pkl'. Default is '' min_rad : Float, optional The minimum particle radius, as passed to addsubtract.add_subtract. Particles with a fitted radius smaller than this are identified as fake and removed. Default is 0.5 * actual_rad. max_rad : Float, optional The maximum particle radius, as passed to addsubtract.add_subtract. Particles with a fitted radius larger than this are identified as fake and removed. Default is 1.5 * actual_rad, however you may find better results if you make this more stringent. rz_order : int, optional If nonzero, the order of an additional augmented rscl(z) parameter for optimization. Default is 0; i.e. no rscl(z) optimization. do_polish : Bool, optional Set to False to only optimize the particles and add-subtract. Default is True, which then runs a polish afterwards. Returns ------- s : :class:`peri.states.ImageState` The optimized state. See Also -------- get_initial_featuring : Features an image from scratch, using centroid methods as initial particle locations. feature_from_pos_rad : Using a previous state's globals and user-provided positions and radii as an initial guess, completely optimizes a state. translate_featuring : Use a previous state's globals and centroids methods for an initial particle guess, completely optimizes a state. Notes ----- The ``Other Parameters`` are passed to _translate_particles. Proceeds by: 1. Find a guess of the particle positions through centroid methods. 2. Optimize particle positions only. 3. Optimize particle positions and radii only. 4. Add-subtract missing and bad particles. 5. If polish, optimize the illumination, background, and particles. 6. If polish, optimize everything. """ state_name, im_name = _pick_state_im_name(state_name, im_name, use_full_path=use_full_path) s = states.load(state_name) if actual_rad is None: actual_rad = np.median(s.obj_get_radii()) im = util.RawImage(im_name, tile=s.image.tile) pos = locate_spheres(im, feature_rad, invert=invert, **featuring_params) _ = s.obj_remove_particle(np.arange(s.obj_get_radii().size)) s.obj_add_particle(pos, np.ones(pos.shape[0]) * actual_rad) s.set_image(im) _translate_particles(s, invert=invert, **kwargs) return s
def translate_featuring(state_name=None, im_name=None, use_full_path=False, **kwargs): """ Translates one optimized state into another image where the particles have moved by a small amount (~1 particle radius). Returns a completely-optimized state. The user can interactively selects the initial state and the second raw image. The state is periodically saved during optimization, with different filename for different stages of the optimization. Parameters ---------- state_name : String or None, optional The name of the initially-optimized state. Default is None, which prompts the user to select the name interactively through a Tk window. im_name : String or None, optional The name of the new image to optimize. Default is None, which prompts the user to select the name interactively through a Tk window. use_full_path : Bool, optional Set to True to use the full path of the state instead of partial path names (e.g. /full/path/name/state.pkl vs state.pkl). Default is False Other Parameters ---------------- max_mem : Numeric The maximum additional memory to use for the optimizers, as passed to optimize.burn. Default is 1e9. desc : String, optional A description to be inserted in saved state. The save name will be, e.g., '0.tif-peri-' + desc + 'initial-burn.pkl'. Default is '' min_rad : Float, optional The minimum particle radius, as passed to addsubtract.add_subtract. Particles with a fitted radius smaller than this are identified as fake and removed. Default is 0.5 * actual_rad. max_rad : Float, optional The maximum particle radius, as passed to addsubtract.add_subtract. Particles with a fitted radius larger than this are identified as fake and removed. Default is 1.5 * actual_rad, however you may find better results if you make this more stringent. invert : {True, False, 'guess'} Whether to invert the image for featuring, as passed to addsubtract.add_subtract. Default is to guess from the state's current particles. rz_order : int, optional If nonzero, the order of an additional augmented rscl(z) parameter for optimization. Default is 0; i.e. no rscl(z) optimization. do_polish : Bool, optional Set to False to only optimize the particles and add-subtract. Default is True, which then runs a polish afterwards. Returns ------- s : :class:`peri.states.ImageState` The optimized state. See Also -------- get_initial_featuring : Features an image from scratch, using centroid methods as initial particle locations. feature_from_pos_rad : Using a previous state's globals and user-provided positions and radii as an initial guess, completely optimizes a state. get_particle_featuring : Using a previous state's globals and positions as an initial guess, completely optimizes a state. Notes ----- The ``Other Parameters`` are passed to _translate_particles. Proceeds by: 1. Optimize particle positions only. 2. Optimize particle positions and radii only. 3. Add-subtract missing and bad particles. 4. If polish, optimize the illumination, background, and particles. 5. If polish, optimize everything. """ state_name, im_name = _pick_state_im_name(state_name, im_name, use_full_path=use_full_path) s = states.load(state_name) im = util.RawImage(im_name, tile=s.image.tile) s.set_image(im) _translate_particles(s, **kwargs) return s