def test_05_07_get_pixel_data_3d(self): svc = ij2.get_dataset_service(self.context) result = svc.create1(np.array([10, 7, 3]), "MyDataset", [ij2.Axes().Y, ij2.Axes().X, ij2.Axes().CHANNEL], 16, False, False) imgplus = result.getImgPlus() script = """ ra = imgplus.randomAccess(); for (x=0;x<imgplus.dimension(0);x++) { ra.setPosition(x, 0); for (y=0;y<imgplus.dimension(1);y++) { ra.setPosition(y, 1); for (c=0;c<imgplus.dimension(2);c++) { ra.setPosition(c, 2); ra.get().set(x + y * 10 + c * 100); } } } """ J.run_script(script, dict(imgplus=imgplus)) pixel_data = ij2.get_pixel_data(imgplus) self.assertSequenceEqual(pixel_data.shape, [10, 7, 3]) i, j, c = np.mgrid[0:10, 0:7, 0:3] np.testing.assert_array_equal(pixel_data, i + j*10 + c*100)
def write_image(pathname, pixels, pixel_type, c=0, z=0, t=0, size_c=1, size_z=1, size_t=1, channel_names=None): """Write the image using bioformats filename - save to this filename pixels - the image to save pixel_type - save using this pixel type c - the image's channel index z - the image's z index t - the image's t index sizeC - # of channels in the stack sizeZ - # of z stacks sizeT - # of timepoints in the stack channel_names - names of the channels (make up names if not present """ omexml = ome.OMEXML() omexml.image(0).Name = os.path.split(pathname)[1] p = omexml.image(0).Pixels assert isinstance(p, ome.OMEXML.Pixels) p.SizeX = pixels.shape[1] p.SizeY = pixels.shape[0] p.SizeC = size_c p.SizeT = size_t p.SizeZ = size_z p.DimensionOrder = ome.DO_XYCZT p.PixelType = pixel_type index = c + size_c * z + size_c * size_z * t if pixels.ndim == 3: p.SizeC = pixels.shape[2] p.Channel(0).SamplesPerPixel = pixels.shape[2] omexml.structured_annotations.add_original_metadata(ome.OM_SAMPLES_PER_PIXEL, str(pixels.shape[2])) elif size_c > 1: p.channel_count = size_c pixel_buffer = convert_pixels_to_buffer(pixels, pixel_type) xml = omexml.to_xml() script = """ importClass(Packages.loci.formats.services.OMEXMLService, Packages.loci.common.services.ServiceFactory, Packages.loci.formats.ImageWriter); var service = new ServiceFactory().getInstance(OMEXMLService); var metadata = service.createOMEXMLMetadata(xml); var writer = new ImageWriter(); writer.setMetadataRetrieve(metadata); writer.setId(path); writer.setInterleaved(true); writer.saveBytes(index, buffer); writer.close(); """ jutil.run_script(script, dict(path=pathname, xml=xml, index=index, buffer=pixel_buffer))
def get_context(): '''Get the ImageJ context This is a singleton ImageJ context. We need a singleton for now because of http://trac.imagej.net/ticket/1413 This is an imagej.ImageJ, which at one point was the context. Call self.getContext() to get the org.scijava.Context which may be what you want. ''' global the_imagej_context if the_imagej_context is None: the_imagej_context = create_context(None) # # We have to turn off the updater and tell ImageJ to never call # System.exit. We have to tell ImageJ that we read the readme file. # # To Do: programatically turn off the updater and take control of # the quitting and exit process. # max_value = J.run_script( "java.lang.Long.toString(java.lang.Long.MAX_VALUE);") prefs = [("imagej.updater.core.UpToDate", "latestNag", max_value), ("imagej.core.options.OptionsMisc", "exitWhenQuitting", "false")] plugin_service = the_imagej_context.getService( "org.scijava.plugin.PluginService") ui_interface = J.class_for_name("imagej.ui.UserInterface") script = """ var result = java.lang.System.getProperty('ij.ui'); if (! result) { var infos = pluginService.getPluginsOfType(ui_interface); if (infos.size() > 0) { result = infos.get(0).getClassName(); } } result;""" ui_class = J.run_script( script, dict(pluginService=plugin_service, ui_interface=ui_interface)) first_run = "firstRun-" + the_imagej_context.getVersion() if ui_class: prefs.append((ui_class, first_run, "false")) for class_name, key, value in prefs: c = J.class_for_name(class_name) J.static_call( "imagej/util/Prefs", "put", "(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;)V", c, key, value) return the_imagej_context
def get_context(): '''Get the ImageJ context This is a singleton ImageJ context. We need a singleton for now because of http://trac.imagej.net/ticket/1413 This is an imagej.ImageJ, which at one point was the context. Call self.getContext() to get the org.scijava.Context which may be what you want. ''' global the_imagej_context if the_imagej_context is None: the_imagej_context = create_context(None) # # We have to turn off the updater and tell ImageJ to never call # System.exit. We have to tell ImageJ that we read the readme file. # # To Do: programatically turn off the updater and take control of # the quitting and exit process. # max_value = J.run_script( "java.lang.Long.toString(java.lang.Long.MAX_VALUE);") prefs = [ ("imagej.updater.core.UpToDate", "latestNag", max_value), ("imagej.core.options.OptionsMisc", "exitWhenQuitting", "false")] plugin_service = the_imagej_context.getService( "org.scijava.plugin.PluginService") ui_interface = J.class_for_name("imagej.ui.UserInterface") script = """ var result = java.lang.System.getProperty('ij.ui'); if (! result) { var infos = pluginService.getPluginsOfType(ui_interface); if (infos.size() > 0) { result = infos.get(0).getClassName(); } } result;""" ui_class = J.run_script(script, dict(pluginService=plugin_service, ui_interface=ui_interface)) first_run = "firstRun-"+the_imagej_context.getVersion() if ui_class: prefs.append((ui_class, first_run, "false")) for class_name, key, value in prefs: c = J.class_for_name(class_name) J.static_call( "imagej/util/Prefs", "put", "(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;)V", c, key, value) return the_imagej_context
def test_06_03_future_main(self): c = J.run_script(""" new java.util.concurrent.Callable() { call: function() { return 2+2; }};""") result = J.execute_future_in_main_thread( J.make_future_task(c, fn_post_process=J.unwrap_javascript)) self.assertEqual(result, 4)
def get_commands(): """Return a list of the available command strings""" script = """ new java.util.concurrent.Callable() { call: function() { importClass(Packages.ij.Menus, Packages.ij.IJ); var hashtable=Menus.getCommands(); if (hashtable==null) { IJ.run("pleaseignorethis"); hashtable = Menus.getCommands(); } return hashtable; } }; """ c = J.run_script(script, class_loader=get_user_loader()) hashtable = J.execute_callable_in_main_thread(c) keys = J.call(hashtable, "keys", "()Ljava/util/Enumeration;") keys = J.jenumeration_to_string_list(keys) values = J.call(hashtable, "values", "()Ljava/util/Collection;") values = [J.to_string(x) for x in J.iterate_java(J.call(values, "iterator", "()Ljava/util/Iterator;"))] class CommandList(list): def __init__(self): super(CommandList, self).__init__(keys) self.values = values return CommandList()
def set_omero_credentials(omero_server, omero_port, omero_username, omero_password): '''Set the credentials to be used to connect to the Omero server omero_server - DNS name of the server omero_port - use this port to connect to the server omero_username - log on as this user omero_password - log on using this password The session ID is valid after this is called. An exception is thrown if the login fails. omero_logout() can be called to log out. ''' global __omero_server global __omero_username global __omero_session_id global __omero_port __omero_server = omero_server __omero_port = omero_port __omero_username = omero_username script = """ var client = Packages.omero.client(server, port); var serverFactory = client.createSession(user, password); client.getSessionId(); """ __omero_session_id = jutil.run_script(script, dict( server = __omero_server, port = __omero_port, user = __omero_username, password = omero_password)) return __omero_session_id
def set_omero_credentials(omero_server, omero_port, omero_username, omero_password): '''Set the credentials to be used to connect to the Omero server omero_server - DNS name of the server omero_port - use this port to connect to the server omero_username - log on as this user omero_password - log on using this password The session ID is valid after this is called. An exception is thrown if the login fails. omero_logout() can be called to log out. ''' global __omero_server global __omero_username global __omero_session_id global __omero_port __omero_server = omero_server __omero_port = omero_port __omero_username = omero_username script = """ var client = Packages.omero.client(server, port); var serverFactory = client.createSession(user, password); client.getSessionId(); """ __omero_session_id = jutil.run_script( script, dict(server=__omero_server, port=__omero_port, user=__omero_username, password=omero_password)) return __omero_session_id
def on_show_imagej(self): """Show the ImageJ user interface This method shows the ImageJ user interface when the user presses the Show ImageJ button. """ logger.debug("Starting ImageJ UI") ui_service = ij2.get_ui_service(get_context()) if ui_service is not None and not ui_service.isVisible(): if cpprefs.get_headless(): # Silence the auto-updater in the headless preferences # ij2.update_never_remind() ui_service.createUI() elif ui_service is not None: ui = ui_service.getDefaultUI() J.execute_runnable_in_main_thread( J.run_script( """new java.lang.Runnable() { run: function() { ui.getApplicationFrame().setVisible(true); }}""", dict(ui=ui), ), True, )
def test_07_04_make_future_task_from_callable(self): call_able = J.run_script(""" new java.util.concurrent.Callable() { call: function() { return 2+2; }};""") future = J.make_future_task(call_able, fn_post_process=J.unwrap_javascript) future.run() self.assertEqual(future.get(), 4)
def set_current_image(imagej_obj): '''Set the currently active window''' imagej_obj.show() image_window = imagej_obj.getWindow() J.execute_runnable_in_main_thread(J.run_script( """new java.lang.Runnable() { run:function() { Packages.ij.WindowManager.setCurrentWindow(w); }} """, dict(w=image_window)), synchronous=True)
def setActiveDisplay(self, display): '''Make this the active display''' # Note: has to be run in GUI thread on mac r = J.run_script( """new java.lang.Runnable() { run:function() { displayService.setActiveDisplay(display); } } """, dict(displayService=self.o, display=display.o)) J.execute_runnable_in_main_thread(r, True)
def createUIS(self, arg): '''Create the ImageJ UI with a string argument''' r = J.run_script( """new java.lang.Runnable() { run:function() { uiService.showUI(arg); } }; """, dict(uiService=self.o, arg=arg)) J.execute_runnable_in_main_thread(r, True)
def test_07_02_cancel_future(self): future = J.run_script(""" new java.util.concurrent.FutureTask( new java.util.concurrent.Callable() { call: function() { return 2+2; }});""") wfuture = J.get_future_wrapper(future, fn_post_process=J.unwrap_javascript) wfuture.cancel(True) self.assertTrue(wfuture.isCancelled()) self.assertRaises(J.JavaException, wfuture.get)
def __init__(self, path): self.stream = None if path.lower().startswith("omero:"): self.rdr = get_omero_reader() return self.rdr = None class_list = get_class_list() find_rdr_script = """ var classes = class_list.getClasses(); var rdr = null; var lc_filename = java.lang.String(filename.toLowerCase()); for (pass=0; pass < 3; pass++) { for (class_idx in classes) { var maybe_rdr = classes[class_idx].newInstance(); if (pass == 0) { if (maybe_rdr.isThisType(filename, false)) { rdr = maybe_rdr; break; } continue; } else if (pass == 1) { var suffixes = maybe_rdr.getSuffixes(); var suffix_found = false; for (suffix_idx in suffixes) { var suffix = java.lang.String(suffixes[suffix_idx]); suffix = suffix.toLowerCase(); if (lc_filename.endsWith(suffix)) { suffix_found = true; break; } } if (! suffix_found) continue; } if (maybe_rdr.isThisType(stream)) { rdr = maybe_rdr; break; } } if (rdr) break; } rdr; """ self.stream = jutil.make_instance( 'loci/common/RandomAccessInputStream', '(Ljava/lang/String;)V', path) filename = os.path.split(path)[1] IFormatReader = make_iformat_reader_class() jrdr = jutil.run_script( find_rdr_script, dict(class_list=class_list, filename=filename, stream=self.stream)) if jrdr is None: raise ValueError("Could not find a Bio-Formats reader for %s", path) self.rdr = IFormatReader() self.rdr.o = jrdr
def set_temp_current_image(imagej_obj): '''Set the temporary current image for the UI thread''' script = """ new java.lang.Runnable() { run: function() { Packages.ij.WindowManager.setTempCurrentImage(ip); } }; """ J.execute_runnable_in_main_thread( J.run_script(script, dict(ip = imagej_obj.o)), True)
def close(self): '''Close the display This is run in the UI thread with synchronization. ''' r = J.run_script( """new java.lang.Runnable() { run: function() { display.close(); } }; """, dict(display=self.o)) J.execute_runnable_in_main_thread(r, True)
def execute_macro(macro_text): '''Execute a macro in ImageJ macro_text - the macro program to be run ''' interp = J.make_instance("ij/macro/Interpreter","()V"); J.execute_runnable_in_main_thread(J.run_script( """new java.lang.Runnable() { run: function() { interp.run(macro_text); }}""", dict(interp=interp, macro_text=macro_text)), synchronous=True)
def get_pixel_data(self, axes = None): imgplus = self.getImgPlus() pixel_data = get_pixel_data(imgplus) script = """ var result = java.util.ArrayList(); for (i=0;i<imgplus.numDimensions();i++) result.add(imgplus.axis(i)); result""" inv_axes = J.run_script(script, dict(imgplus=imgplus)) inv_axes = list(J.iterate_collection(inv_axes)) transpose = calculate_transpose(inv_axes, axes) return pixel_data.transpose(transpose)
def get_pixel_data(self, axes=None): imgplus = self.getImgPlus() pixel_data = get_pixel_data(imgplus) script = """ var result = java.util.ArrayList(); for (i=0;i<imgplus.numDimensions();i++) result.add(imgplus.axis(i)); result""" inv_axes = J.run_script(script, dict(imgplus=imgplus)) inv_axes = list(J.iterate_collection(inv_axes)) transpose = calculate_transpose(inv_axes, axes) return pixel_data.transpose(transpose)
def get_temp_current_image(): '''Get the temporary ImagePlus object for the current thread''' script = """ new java.util.concurrent.Callable() { call: function() { return Packages.ij.WindowManager.getTempCurrentImage(); } }; """ gtci = J.make_future_task(J.run_script(script)) imageplus_obj = J.execute_future_in_main_thread(gtci) return get_imageplus_wrapper(imageplus_obj)
def __init__(self, path): self.stream = None if path.lower().startswith("omero:"): self.rdr = get_omero_reader() return self.rdr = None class_list = get_class_list() find_rdr_script = """ var classes = class_list.getClasses(); var rdr = null; var lc_filename = java.lang.String(filename.toLowerCase()); for (pass=0; pass < 3; pass++) { for (class_idx in classes) { var maybe_rdr = classes[class_idx].newInstance(); if (pass == 0) { if (maybe_rdr.isThisType(filename, false)) { rdr = maybe_rdr; break; } continue; } else if (pass == 1) { var suffixes = maybe_rdr.getSuffixes(); var suffix_found = false; for (suffix_idx in suffixes) { var suffix = java.lang.String(suffixes[suffix_idx]); suffix = suffix.toLowerCase(); if (lc_filename.endsWith(suffix)) { suffix_found = true; break; } } if (! suffix_found) continue; } if (maybe_rdr.isThisType(stream)) { rdr = maybe_rdr; break; } } if (rdr) break; } rdr; """ self.stream = jutil.make_instance('loci/common/RandomAccessInputStream', '(Ljava/lang/String;)V', path) filename = os.path.split(path)[1] IFormatReader = make_iformat_reader_class() jrdr = jutil.run_script(find_rdr_script, dict(class_list = class_list, filename = filename, stream = self.stream)) if jrdr is None: raise ValueError("Could not find a Bio-Formats reader for %s", path) self.rdr = IFormatReader() self.rdr.o = jrdr
def test_07_01_wrap_future(self): future = J.run_script(""" new java.util.concurrent.FutureTask( new java.util.concurrent.Callable() { call: function() { return 2+2; }});""") wfuture = J.get_future_wrapper(future, fn_post_process=J.unwrap_javascript) self.assertFalse(wfuture.isDone()) self.assertFalse(wfuture.isCancelled()) wfuture.run() self.assertTrue(wfuture.isDone()) self.assertEqual(wfuture.get(), 4)
def fn(self, *args): script = """ new java.util.concurrent.Callable() { call: function() { return o.%s(%s); } }; """ % (method, ",".join(["arg%d" % i for i in range(len(args))])) d = dict([("arg%d" % i, arg) for i, arg in enumerate(args)]) d["o"] = self.o future = J.make_future_task(J.run_script(script, d)) J.execute_future_in_main_thread(future) return fn_post_process(future.get())
def show_imagej(): '''Show the ImageJ user interface''' r = J.run_script("""new java.lang.Runnable() { run: function() { var imageJ = Packages.ij.IJ.getInstance(); if (imageJ == null) { imageJ = Packages.ij.ImageJ(); } imageJ.setVisible(true); imageJ.toFront(); } };""", class_loader=get_user_loader()) J.execute_runnable_in_main_thread(r, True)
def fn(self, *args): script = """ new java.lang.Runnable() { run: function() { o.%s(%s); } }; """ % (method, ",".join(["arg%d" % i for i in range(len(args))])) d = dict([("arg%d" % i, arg) for i, arg in enumerate(args)]) d["o"] = self.o future = J.make_future_task(J.run_script(script, d)) J.execute_future_in_main_thread(future) return future.get()
def __init__(self): if service_classes is None: classes = None ctxt_fn = J.run_script("""new java.util.concurrent.Callable() { call: function() { return new Packages.imagej.ImageJ(false); } }""") else: classes = [ J.class_for_name(x) for x in service_classes or REQUIRED_SERVICES ] classes = J.make_list(classes) ctxt_fn = J.run_script( """new java.util.concurrent.Callable() { call: function() { return new Packages.imagej.ImageJ(classes); } }""", dict(classes=classes.o)) self.o = J.execute_future_in_main_thread( J.make_future_task(ctxt_fn))
def createUI(self): '''Create the ImageJ UI''' # # This has to be done via a future in order # for CP to run the Mac event loop. # r = J.run_script( """new java.lang.Runnable() { run:function() { uiService.showUI(); } }; """, dict(uiService=self.o)) J.execute_runnable_in_main_thread(r, True)
def __init__(self): if service_classes is None: classes = None ctxt_fn = J.run_script( """new java.util.concurrent.Callable() { call: function() { return new Packages.imagej.ImageJ(false); } }""") else: classes = [ J.class_for_name(x) for x in service_classes or REQUIRED_SERVICES] classes = J.make_list(classes) ctxt_fn = J.run_script( """new java.util.concurrent.Callable() { call: function() { return new Packages.imagej.ImageJ(classes); } }""", dict(classes = classes.o)) self.o = J.execute_future_in_main_thread( J.make_future_task(ctxt_fn))
def run(self, workspace): jb.attach()#initialize JVM input_image_name = self.input_image_name.value output_image_name = self.output_image_name.value self.gsize = self.input_gaussian_filter.value self.rsize = self.input_rolling_ball.value self.lowseed = self.input_low_seed.value self.highseed = self.input_high_seed.value image_set = workspace.image_set assert isinstance(image_set, cpi.ImageSet) #prepare input image input_image = image_set.get_image(input_image_name, must_be_grayscale = True) input_pixels = input_image.pixel_data ij_processor = ijiproc.make_image_processor((input_pixels*255.0).astype('float32')) #JavaScript API script = """ var img=Packages.ij.ImagePlus(name,ij_processor); Packages.ij.IJ.run(img, "8-bit", ""); var macro="g_size="+gsize+" r_size="+rsize+" low_edge="+lowseed+" high_edge="+highseed+" noise=-1"; java.lang.System.out.println(macro); Packages.ij.IJ.run(img, "Hysteresis Segment", macro); var output_proc=img.getProcessor(); """ #img.show(); #Packages.ij.WindowManager.setCurrentWindow(img.getWindow()); #""" in_params={ "name":output_image_name, "ij_processor": ij_processor, "gsize":self.gsize, "rsize":self.rsize, "lowseed":self.lowseed, "highseed":self.highseed} out_params={"output_proc":None} r = jb.run_script(script, bindings_in = in_params,bindings_out = out_params) #prepare output image output_pixels = ijiproc.get_image(out_params["output_proc"], False) output_image = cpi.Image(output_pixels, parent_image = input_image) #write output image_set.add(output_image_name, output_image) if workspace.frame is not None: workspace.display_data.input_pixels = input_pixels workspace.display_data.output_pixels = output_pixels jb.detach()#close JVM
def inject_image(self, pixels, name=''): '''inject an image into ImageJ for processing''' ij_processor = ijiproc.make_image_processor( (pixels * 255.0).astype('float32')) script = """ new java.lang.Runnable() { run: function() { var imp = Packages.ij.ImagePlus(name, ij_processor); imp.show(); Packages.ij.WindowManager.setCurrentWindow(imp.getWindow()); }};""" r = J.run_script(script, bindings_in = { "name":name, "ij_processor": ij_processor}) J.execute_runnable_in_main_thread(r, True)
def test_05_06_create_dataset(self): i,j = np.mgrid[:7, :9] image = (i+j*10).astype(float) ds = ij2.create_dataset(self.context, image, "Foo") imgplus = ds.getImgPlus() script = """ var ra=imgplus.randomAccess(); ra.setPosition(x, 0); ra.setPosition(y, 1); ra.get().get()""" fn = np.frompyfunc( lambda x, y: J.run_script(script, dict(imgplus=imgplus, x=x, y=y)), 2, 1) pixel_data = fn(j, i) np.testing.assert_array_equal(image, pixel_data)
def createDisplay(self, name, dataset): '''Create a display that contains the given dataset''' # # Must be run on the gui thread # jcallable = J.run_script( """new java.util.concurrent.Callable() { call:function() { return displayService.createDisplay(name, dataset); } }; """, dict(displayService=self.o, name=name, dataset=dataset.o)) future = J.make_future_task(jcallable, fn_post_process=wrap_display) return J.execute_future_in_main_thread(future)
def createDisplay(self, name, dataset): """Create a display that contains the given dataset""" # # Must be run on the gui thread # jcallable = J.run_script( """new java.util.concurrent.Callable() { call:function() { return displayService.createDisplay(name, dataset); } }; """, dict(displayService=self.o, name=name, dataset=dataset.o), ) future = J.make_future_task(jcallable, fn_post_process=wrap_display) return J.execute_future_in_main_thread(future)
def select_overlay(display, overlay, select=True): '''Select or deselect an overlay display - the overlay's display overlay - the overlay to select ''' for view in J.get_collection_wrapper(display, fn_wrapper = wrap_data_view): if J.call(overlay, "equals", "(Ljava/lang/Object;)Z", view.getData()): J.execute_runnable_in_main_thread(J.run_script( """new java.lang.Runnable() { run: function() { view.setSelected(select);} }""", dict(view = view.o, select=select)), synchronous=True) break else: logger.info("Failed to select overlay")
def get_measurements_for_good_pipeline(nimages = 1, group_numbers = None): '''Get an appropriately initialized measurements structure for the good pipeline''' path = os.path.join(example_images_directory(), "ExampleSBSImages") m = cpmeas.Measurements() if group_numbers is None: group_numbers = [1] * nimages group_indexes = [1] last_group_number = group_numbers[0] group_index = 1 for group_number in group_numbers: if group_number == last_group_number: group_index += 1 else: group_index = 1 group_indexes.append(group_index) for i in range(1, nimages+1): filename = ("Channel2-%02d-%s-%02d.tif" % (i, "ABCDEFGH"[int((i-1) / 12)], ((i-1) % 12) + 1)) url = pathname2url(os.path.join(path, filename)) m[cpmeas.IMAGE, cpmeas.C_FILE_NAME + "_DNA", i] = filename m[cpmeas.IMAGE, cpmeas.C_PATH_NAME + "_DNA", i] = path m[cpmeas.IMAGE, cpmeas.C_URL+"_DNA", i] = url m[cpmeas.IMAGE, cpmeas.GROUP_NUMBER, i] = group_numbers[i-1] m[cpmeas.IMAGE, cpmeas.GROUP_INDEX, i] = group_indexes[i-1] jblob = J.run_script(""" importPackage(Packages.org.cellprofiler.imageset); importPackage(Packages.org.cellprofiler.imageset.filter); var imageFile=new ImageFile(new java.net.URI(url)); var imageFileDetails = new ImageFileDetails(imageFile); var imageSeries=new ImageSeries(imageFile, 0); var imageSeriesDetails = new ImageSeriesDetails(imageSeries, imageFileDetails); var imagePlane=new ImagePlane(imageSeries, 0, ImagePlane.ALWAYS_MONOCHROME); var ipd = new ImagePlaneDetails(imagePlane, imageSeriesDetails); var stack = ImagePlaneDetailsStack.makeMonochromeStack(ipd); var stacks = java.util.Collections.singletonList(stack); var keys = java.util.Collections.singletonList(imageNumber); var imageSet = new ImageSet(stacks, keys); imageSet.compress(java.util.Collections.singletonList("DNA"), null); """, dict(url=url, imageNumber = str(i))) blob = J.get_env().get_byte_array_elements(jblob) m[cpmeas.IMAGE, M_IMAGE_SET, i, blob.dtype] = blob pipeline = cpp.Pipeline() pipeline.loadtxt(StringIO(GOOD_PIPELINE)) pipeline.write_pipeline_measurement(m) return m
def get_measurements_for_good_pipeline(nimages=1, group_numbers=None): '''Get an appropriately initialized measurements structure for the good pipeline''' path = os.path.join(example_images_directory(), "ExampleSBSImages") m = cpmeas.Measurements() if group_numbers is None: group_numbers = [1] * nimages group_indexes = [1] last_group_number = group_numbers[0] group_index = 1 for group_number in group_numbers: if group_number == last_group_number: group_index += 1 else: group_index = 1 group_indexes.append(group_index) for i in range(1, nimages + 1): filename = ("Channel2-%02d-%s-%02d.tif" % (i, "ABCDEFGH"[int( (i - 1) / 12)], ((i - 1) % 12) + 1)) url = pathname2url(os.path.join(path, filename)) m[cpmeas.IMAGE, cpmeas.C_FILE_NAME + "_DNA", i] = filename m[cpmeas.IMAGE, cpmeas.C_PATH_NAME + "_DNA", i] = path m[cpmeas.IMAGE, cpmeas.C_URL + "_DNA", i] = url m[cpmeas.IMAGE, cpmeas.GROUP_NUMBER, i] = group_numbers[i - 1] m[cpmeas.IMAGE, cpmeas.GROUP_INDEX, i] = group_indexes[i - 1] jblob = J.run_script( """ importPackage(Packages.org.cellprofiler.imageset); importPackage(Packages.org.cellprofiler.imageset.filter); var imageFile=new ImageFile(new java.net.URI(url)); var imageFileDetails = new ImageFileDetails(imageFile); var imageSeries=new ImageSeries(imageFile, 0); var imageSeriesDetails = new ImageSeriesDetails(imageSeries, imageFileDetails); var imagePlane=new ImagePlane(imageSeries, 0, ImagePlane.ALWAYS_MONOCHROME); var ipd = new ImagePlaneDetails(imagePlane, imageSeriesDetails); var stack = ImagePlaneDetailsStack.makeMonochromeStack(ipd); var stacks = java.util.Collections.singletonList(stack); var keys = java.util.Collections.singletonList(imageNumber); var imageSet = new ImageSet(stacks, keys); imageSet.compress(java.util.Collections.singletonList("DNA"), null); """, dict(url=url, imageNumber=str(i))) blob = J.get_env().get_byte_array_elements(jblob) m[cpmeas.IMAGE, M_IMAGE_SET, i, blob.dtype] = blob pipeline = cpp.Pipeline() pipeline.loadtxt(StringIO(GOOD_PIPELINE)) pipeline.write_pipeline_measurement(m) return m
def set_current_image(imagej_obj): '''Set the currently active window imagej_obj - an ImagePlus to become the current image ''' J.execute_runnable_in_main_thread(J.run_script( """new java.lang.Runnable() { run:function() { var w = imp.getWindow(); if (w == null) { imp.show(); } else { Packages.ij.WindowManager.setCurrentWindow(w); } } } """, dict(imp=imagej_obj.o)), synchronous=True)
def select_overlay(display, overlay, select=True): '''Select or deselect an overlay display - the overlay's display overlay - the overlay to select ''' for view in J.get_collection_wrapper(display, fn_wrapper=wrap_data_view): if J.call(overlay, "equals", "(Ljava/lang/Object;)Z", view.getData()): J.execute_runnable_in_main_thread(J.run_script( """new java.lang.Runnable() { run: function() { view.setSelected(select);} }""", dict(view=view.o, select=select)), synchronous=True) break else: logger.info("Failed to select overlay")
def get_current_image(): '''Get the WindowManager's current image returns a wrapped ImagePlus object ''' # # Run this on the UI thread so its thread context is the same # as the macro invocation # script = """ new java.util.concurrent.Callable() { call: function() { return Packages.ij.WindowManager.getCurrentImage(); } }; """ gci = J.make_future_task(J.run_script(script)) imageplus_obj = J.execute_future_in_main_thread(gci) return get_imageplus_wrapper(imageplus_obj)
def run_batch_macro(macro_text, imp): '''Run a macro in batch mode macro_text - the macro program to be run imp - an image plus to become the active image returns the image plus that was the active image at the end of the run ''' script = """ new java.util.concurrent.Callable() { call: function() { return interp.runBatchMacro(macro_text, imp); } }; """ interp = J.make_instance("ij/macro/Interpreter", "()V") future = J.make_future_task( J.run_script(script, dict(interp=interp, macro_text=macro_text, imp=imp))) return J.execute_future_in_main_thread(future)
def test_06_01_get_mask_data(self): # Get the overlay data from a display # display_svc = ij2.get_display_service(self.context) overlay_svc = ij2.get_overlay_service(self.context) image = np.zeros((30, 30)) ds = ij2.create_dataset(self.context, image, "Foo") display = display_svc.createDisplay("Foo", ds) d2 = display_svc.createDisplay("Bar", ij2.create_dataset(self.context, image, "Bar")) overlay = J.run_script( """var o = new Packages.imagej.data.overlay.RectangleOverlay(context.getContext()); o.setOrigin(5, 0); o.setOrigin(3, 1); o.setExtent(6, 0); o.setExtent(7, 1); o;""", dict(context=self.context)) overlay_svc.addOverlays(display, J.make_list([overlay])) ij2.select_overlay(display.o, overlay) mask = ij2.create_mask(display) i, j = np.mgrid[0:mask.shape[0], 0:mask.shape[1]] np.testing.assert_equal(mask, (j >= 5) & (j < 11) & (i >= 3) & (i < 10))
def get_omero_reader(): '''Return an loci.ome.io.OMEROReader instance, wrapped as a FormatReader''' script = """ var rdr = new Packages.loci.ome.io.OmeroReader(); rdr.setServer(server); rdr.setPort(port); rdr.setUsername(username); rdr.setSessionID(sessionID); rdr; """ if __omero_session_id is None: omero_login() jrdr = jutil.run_script( script, dict(server=__omero_server, port=__omero_port, username=__omero_username, sessionID=__omero_session_id)) rdr = make_iformat_reader_class()() rdr.o = jrdr return rdr
def on_show_imagej(self): '''Show the ImageJ user interface This method shows the ImageJ user interface when the user presses the Show ImageJ button. ''' logger.debug("Starting ImageJ UI") ui_service = ij2.get_ui_service(get_context()) if ui_service is not None and not ui_service.isVisible(): if cpprefs.get_headless(): # Silence the auto-updater in the headless preferences # ij2.update_never_remind() ui_service.createUI() elif ui_service is not None: ui = ui_service.getDefaultUI() J.execute_runnable_in_main_thread( J.run_script( """new java.lang.Runnable() { run: function() { ui.getApplicationFrame().setVisible(true); }}""", dict(ui=ui)), True)