################################################################################################### # Procedure to detect the puck light spots. ################################################################################################### room_temp = False number_frames = 5 number_backgrounds = 5 minimum_size = 150 maximum_size = 1200 min_circ = 0.2 threshold_method = "MaxEntropy" if room_temp else "Default" #Apparently good for LN2: Default, Intermodes, IsoData, Otsu exclude_edges = True set_led_range(room_temp) img.backgroundEnabled=False led_ctrl1.write(0.0) led_ctrl2.write(0.0) time.sleep(0.1) img.waitNext(100) background = average_frames(number_backgrounds) #img.backgroundImage=background.bufferedImage #img.captureBackground(1,0) #show_panel(img.backgroundImage) #img.backgroundEnabled = True led_ctrl1.write(led_ctrl1.config.maxValue) led_ctrl2.write(led_ctrl2.config.maxValue) time.sleep(0.1) img.waitNext(100) image = average_frames(number_frames) led_ctrl1.write(0.0) led_ctrl2.write(0.0) op_image(image, background, "subtract", float_result=True, in_place=True) renderer = show_panel(image.getBufferedImage()) renderer.clearOverlays() invert(image) auto_threshold(image, method = threshold_method) #Tested ok: MaxEntropy, Triangle, Yen #renderer = show_panel(image.getBufferedImage()) #binary_open(aux) (r,output) = analyse_particles(image, minimum_size,maximum_size, fill_holes = True, exclude_edges = exclude_edges, print_table=False, output_image = "outlines", minCirc = min_circ , maxCirc = 1.0) points = "" npoints = 0 x=[] y=[] 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.append(int(r.getValue("XM", row))) y.append(int(r.getValue("YM", row))) points = points + " (" + str(x[-1]) + ", " + str(y[-1]) + ")" npoints = npoints + 1 renderer.addOverlay(Crosshairs(Pen(java.awt.Color.MAGENTA), java.awt.Point(x[-1],y[-1]), java.awt.Dimension(15,15))) print str(npoints) + " - " + points #print r #print x #print y offset = int(math.sqrt(1000)/2) cv = (min(x)-offset, min(y)-offset, max(x)+offset, max(y)+offset) renderer.addOverlay(Rect(Pen(java.awt.Color.MAGENTA), java.awt.Point(cv[0], cv[1]), java.awt.Dimension(cv[2]-cv[0],cv[3]-cv[1]))) #show_panel(output.getBufferedImage()) #img.backgroundEnabled=False