from ijutils import * import ch.psi.pshell.imaging.Filter as Filter from ch.psi.pshell.imaging.Utils import * from ch.psi.pshell.imaging.Overlays import * import ch.psi.pshell.imaging.Pen as Pen class MetricsFilter(Filter): def __init__(self, metrics): self.overlay = Text(Pen(java.awt.Color.GREEN.darker()), "", \ java.awt.Font("Verdana", java.awt.Font.PLAIN, 12), java.awt.Point(20,20)) self.metrics = metrics self.source = None self.renderer = None def process(self, image, data): try: ip = load_array(data.array, data.width, data.height) msg = "" if self.metrics is not None: for metric in self.metrics: val = IJ.getValue(ip,metric) msg = msg + "%s = %1.4f\n" % (metric,val) self.overlay.update(msg) except: self.overlay.update(str(sys.exc_info()[1])) return image def start(self, source, renderer=None): self.stop() self.source = source self.renderer = renderer if (renderer is not None) else show_panel(source) self.source.setFilter(self) self.renderer.addOverlay(self.overlay) def stop(self): if self.renderer is not None: self.renderer.removeOverlay(self.overlay) if self.source is not None: self.source.setFilter(None) self.source = None self.renderer = None filter_metrics = None def start_metrics(metrics, source, renderer=None): global filter_metrics stop_metrics() filter_metrics = MetricsFilter(metrics) filter_metrics.start(source, renderer) def stop_metrics(): global filter_metrics if filter_metrics is not None: filter_metrics.stop() filter_metrics = None metrics = ["Area", "Mean", "StdDev", "Mode", "Min", "Max", "X", "Y", "XM", "YM", "Perim.", "BX", "BY", "Width", "Height", "Major", "Minor", "Angle", "Circ.", "Feret", "IntDen", "Median", "Skew", "Kurt", "%Area", "RawIntDen", "Ch", "Slice", "Frame", "FeretX", "FeretY", "FeretAngle", "MinFeret", "AR", "Round", "Solidity", "MinThr", "MaxThr"] #start_metrics (["StdDev"], src1) start_metrics (metrics, src1) time.sleep(5.0) stop_metrics()