Files
dev/script/test/TestStdev.py
2020-10-12 18:03:27 +02:00

62 lines
2.2 KiB
Python

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()