from ijutils import * from ch.psi.pshell.imaging.Overlays import * import ch.psi.pshell.imaging.Pen as Pen roi_center = (800, 600) roi_radius = 600 roi = (roi_center[0] - roi_radius, roi_center[1] - roi_radius, 2* roi_radius, 2*roi_radius) #roi = (0,0,1600,1200) def in_roi(x,y): return math.hypot(x-roi_radius, y-roi_radius) < roi_radius def integrate(ips): aux = None for i in range(len(ips)): if i==0: aux = new_image(roi[2], roi[3], image_type="float", title = "sum", fill_color = None) op_image(aux, ips[i], "add", float_result=True, in_place=True) return aux def average (ips): aux = integrate(ips) op_const(aux, "divide", len(ips), in_place=True) return aux def grab_frames(samples): frames = [] for i in range(samples): ip = load_image(img.image) aux = sub_image(ip, roi[0], roi[1], roi[2], roi[3]) grayscale(aux) frames.append(aux) return frames def average_frames(samples = 1): return average(grab_frames(samples)) def integrate_frames(samples = 1): return integrate(grab_frames(samples)) img.backgroundEnabled=False led_ctrl1.write(0.0) led_ctrl2.write(0.0) time.sleep(0.1) img.waitNext(100) background = average_frames(5) #img.setBackground(background.getBufferedImage()) #img.captureBackground(1,0) #show_panel(img.backgroundImage) #img.backgroundEnabled = True led_ctrl1.write(0.40) led_ctrl2.write(0.40) time.sleep(0.1) img.waitNext(100) image = average_frames(5) op_image(image, background, "subtract", float_result=True, in_place=True) renderer = show_panel(image.getBufferedImage()) renderer.clearOverlays() invert(image) auto_threshold(image, method = "MaxEntropy") #Tested ok: MaxEntropy, Triangle, Yen #binary_open(aux) (r,output) = analyse_particles(image, 250,1000, fill_holes = True, exclude_edges = False, print_table=False, output_image = "outlines", minCirc = 0.3 , maxCirc = 1.0) points = "" npoints = 0 for row in range (r.counter): if in_roi(r.getValue("XM",row), r.getValue("YM",row)): #x, y = int(r.getValue("XM", row))+roi[0], int(r.getValue("YM", row))+roi[1] x, y = int(r.getValue("XM", row)), int(r.getValue("YM", row)) points = points + " (" + str(x) + ", " + str(y) + ")" npoints = npoints + 1 renderer.addOverlay(Crosshairs(Pen(java.awt.Color.MAGENTA), java.awt.Point(x,y), java.awt.Dimension(15,15))) print str(npoints) + " - " + points print r #show_panel(output.getBufferedImage()) #img.backgroundEnabled=False