def get_user_params(event): """ Allows user to select file and user parameters Parameters ---------- event : Event Waits for get_user_params_JB JButton to be pressed Returns ------- dict Dict containing filename, number of Gaussians to fit, % of dataset to import, whether to specify grey value limits, minimum grey value and maximum grey value to consider (optional) """ # Open user dialog gui = GenericDialogPlus("Define user parameters") gui.addFileField("Image filename", "Select image file") gui.addNumericField("Number of Gaussians to fit: ", 2, 0) gui.addNumericField("Percentage of dataset to import: ", 15, 0) gui.addCheckbox("Specify grey value limits?", False) gui.addNumericField("Min grey value (optional): ", 0, 0) gui.addNumericField("Max grey value (optional): ", 255, 0) gui.showDialog() # Extract user parameters if gui.wasOKed(): user_params = {} # empty dict user_params['img_fname'] = str(gui.getNextString()) user_params['n_gaussians'] = int(gui.getNextNumber()) user_params['pct_stack_import'] = float(gui.getNextNumber()) user_params['specify_gv'] = gui.getNextBoolean() user_params['min_gv'] = float(gui.getNextNumber()) user_params['max_gv'] = float(gui.getNextNumber()) # Create results directory results_dir = os.path.splitext(user_params['img_fname'])[0] + "_results" if os.path.isdir(results_dir) == False: os.mkdir(results_dir) print("Results directory: {}".format(results_dir)) # Write user parameters to text file user_params_fname = os.path.join(results_dir, "Users_Params.csv") with open(user_params_fname, "wb") as f: w = csv.DictWriter(f, user_params.keys()) w.writeheader() w.writerow(user_params) # Write directory to look for user params to text file in main/ temp_user_dir = os.path.join(os.path.dirname(__file__), "temp_user_dir.txt") if os.path.isfile(temp_user_dir) == True: os.remove(temp_user_dir) # delete temp_user_dir.txt if present f = open(temp_user_dir, "w") f.write(user_params_fname) f.close() return user_params
def dialog(imp2, labelColorBarImp): gd = GenericDialogPlus("ROI labeller") categories=11 #placeholder slider variables so the class can be initiated slider1=0 slider2=0 slider3=0 slider4=0 test=previewLabelerAndListeners(imp2, slider1,slider2,slider3,slider4, gd) for i in range(1,categories): gd.addButton("label "+str(i), test) gd.addImage(labelColorBarImp) #imp7.close() - causes an error as image needed for the dialog gd.addButton("Set top",test) gd.addButton("Whole stack",test) gd.addButton("Set bottom", test) gd.addSlider("Top",1, imp2.getStackSize(), 1) gd.addSlider("Bottom",1, imp2.getStackSize(),imp2.getStackSize()) gd.addSlider("Minimum ROI size", 0, 9999, 0, 1) gd.addSlider("Maximum ROI size", 1, 10000, 10000, 1) slider1=gd.getSliders().get(0) slider2=gd.getSliders().get(1) test.slider1=slider1 test.slider2=slider2 slider3=gd.getSliders().get(2) slider4=gd.getSliders().get(3) test.slider3=slider3 test.slider4=slider4 slider1.addAdjustmentListener(test) slider2.addAdjustmentListener(test) slider3.addAdjustmentListener(test) slider4.addAdjustmentListener(test) gd.addChoice("Apply labeling to:", ["(Sub)stack", "Slice"], "(Sub)stack") gd.setLayout(GridLayout(0,2)) gd.setModal(False) buttons=gd.getButtons() gd.showDialog() while ((not gd.wasCanceled()) and not (gd.wasOKed())): Thread.sleep(50) return test
def getOptions(): gui = GenericDialogPlus("Options for Moving TIFF files") gui.addMessage("Select the number of imput files to be used per stitched image") gui.addSlider("", 2, 10, 2) gui.addFileField("Select csv file", "") gui.addMessage("Add key values and corresponding genotype, when finished, leave fields empty") gui.addStringField("Key :", prefs.get(None, "key1", "p")) gui.addToSameRow() gui.addStringField("Genotype :", prefs.get(None, "genotype1", "PROM-1_HA")) gui.addStringField("Key :", prefs.get(None, "key2", "p")) gui.addToSameRow() gui.addStringField("Genotype :", prefs.get(None, "genotype2", "PROM-1_HA")) gui.addStringField("Key :", prefs.get(None, "key3", "p")) gui.addToSameRow() gui.addStringField("Genotype :", prefs.get(None, "genotype3", "PROM-1_HA")) gui.addStringField("Key :", prefs.get(None, "key4", "p")) gui.addToSameRow() gui.addStringField("Genotype :", prefs.get(None, "genotype4", "PROM-1_HA")) gui.addStringField("Key :", prefs.get(None, "key5", "p")) gui.addToSameRow() gui.addStringField("Genotype :", prefs.get(None, "genotype5", "PROM-1_HA")) gui.showDialog() if gui.wasOKed(): tiffs_per_image = int(gui.getNextNumber()) csv_file = str(gui.getNextString()) genotypes = {} for i in range(5): key = str(gui.getNextString()) value = str(gui.getNextString()) if key != "": genotypes[key] = value else: return if len(genotypes) > 0: a = list(genotypes.items())[0] prefs.put(None, "key1", a[0]) prefs.put(None, "genotype1", a[1]) if len(genotypes) > 1: a = list(genotypes.items())[1] prefs.put(None, "key2", a[0]) prefs.put(None, "genotype2", a[1]) if len(genotypes) > 2: a = list(genotypes.items())[2] prefs.put(None, "key3", a[0]) prefs.put(None, "genotype3", a[1]) if len(genotypes) > 3: a = list(genotypes.items())[3] prefs.put(None, "key4", a[0]) prefs.put(None, "genotype4", a[1]) if len(genotypes) > 4: a = list(genotypes.items())[4] prefs.put(None, "key5", a[0]) prefs.put(None, "genotype5", a[1]) return tiffs_per_image, csv_file, genotypes
def getImgRoiDir(): gui = GenericDialogPlus( "Select directories to process images and ROI sets to apply") default_dir = OpenDialog.getDefaultDirectory() gui.addDirectoryField("Choose a iamge folder to be processed", default_dir) gui.addDirectoryField("Choose a ROI set folder to apply", default_dir) gui.showDialog() if gui.wasOKed(): img_dir = gui.getNextString() if not img_dir.endswith(os.sep): img_dir = img_dir + os.sep roi_dir = gui.getNextString() if not roi_dir.endswith(os.sep): roi_dir = roi_dir + os.sep return img_dir, roi_dir
def selectionDialog(categories,labelColorBarImp): gd = GenericDialogPlus("ROI labeller -image picking") imps = WM.getImageTitles() nonimages=WM.getNonImageTitles() gd.addChoice("Image to quantify", imps, imps[0]) try: gd.addChoice("FRETENTATOR results table", nonimages, nonimages[0]) fail=0 except: gd.addMessage("No results table open") fail=1 gd.addImage(labelColorBarImp) for i in range(categories): gd.addStringField("Label "+str(i) +" name:", "Label "+str(i)) gd.addChoice("Quantify an open image or add labels to open results table?", ["Image", "Results table"], "Results table") #quantImp= IJ.getImage(gd.getNextChoice()) gd.setModal(False) gd.showDialog() while ((not gd.wasCanceled()) and not (gd.wasOKed())): Thread.sleep(50) names=dict() for i in range(categories): names[i]=str(gd.getNextString()) imageName=gd.getNextChoice() if fail==0: resultsName=gd.getNextChoice() imageOrTable=gd.getNextChoice() else: imageOrTable="Image" resultsName=0 return names, imageName, resultsName, imageOrTable
Win.addNumericField("Maximal_overlap between Bounding boxes [0-1]", prefs.getFloat("MaxOverlap", 0.4), 2) Win.addMessage("Outputs") Win.addCheckbox("Add_ROI detected to ROI manager", prefs.getInt("AddRoi", True)) Win.addCheckbox("Show_result table", prefs.getInt("ShowTable", False)) Win.addMessage("""If you use this plugin please cite : Laurent SV Thomas, Jochen Gehrig bioRxiv 619338; doi: https://doi.org/10.1101/619338""") Win.addHelp( "https://github.com/multi-template-matching/MultiTemplateMatching-Fiji/wiki" ) Win.showDialog() if Win.wasOKed(): template = Win.getNextImage() image = Win.getNextImage() flipv = Win.getNextBoolean() fliph = Win.getNextBoolean() angles = Win.getNextString() method = Win.getNextChoice() n_hit = int(Win.getNextNumber()) score_threshold = Win.getNextNumber() #tolerance = Win.getNextNumber() tolerance = 0 max_overlap = Win.getNextNumber() add_roi = Win.getNextBoolean() show_table = Win.getNextBoolean() # Save for persistence
def previewDialog(imp): gd = GenericDialogPlus("Nuclear segmentation and quantification v1.01") #create a list of the channels in the provided imagePlus types = [] for i in xrange(1, imp.getNChannels() + 1): types.append(str(i)) #user can pick which channel to base the segmentation on gd.addChoice("Channel number to use for segmentation", types, types[0]) gd.addChoice("Channel to quantify", types, types[0]) methods = [ "Otsu", "Default", "Huang", "Intermodes", "IsoData", "IJ_IsoData", "Li", "MaxEntropy", "Mean", "MinError", "Minimum", "Moments", "Percentile", "RenyiEntropy", "Shanbhag", "Triangle", "Yen" ] gd.addChoice("Autosegmentation method", methods, methods[0]) intensities = ["254", "4094", "65534"] gd.addChoice("Max Intensity", intensities, intensities[-1]) gd.addSlider("Small DoG sigma", 0.5, 10, 1, 0.1) gd.addSlider("Large DoG sigma", 0.5, 20, 5, 0.1) gd.addCheckbox("TopHat background subtraction? (Slower, but better) ", True) gd.addSlider("TopHat sigma", 5, 20, 8, 0.1) gd.setModal(False) gd.addCheckbox("Manually set threshold? ", False) gd.addSlider("Manual threshold", 10, 65534, 2000, 1) gd.hideCancelButton() gd.showDialog() cal = imp.getCalibration() pixelAspect = (cal.pixelDepth / cal.pixelWidth) originalTitle = imp1.getTitle() choices = gd.getChoices() print choices sliders = gd.getSliders() checkboxes = gd.getCheckboxes() segmentChannel = int(choices.get(0).getSelectedItem()) quantChannel = int(choices.get(1).getSelectedItem()) thresholdMethod = choices.get(2).getSelectedItem() maxIntensity = int(choices.get(3).getSelectedItem()) gaussianSigma = sliders.get(0).getValue() / 10.0 largeDoGSigma = gd.sliders.get(1).getValue() / 10.0 topHat = gd.checkboxes.get(0).getState() topHatSigma = gd.sliders.get(2).getValue() / 10.0 manualSegment = gd.checkboxes.get(1).getState() manualThreshold = gd.sliders.get(3).getValue() segmentChannelOld = segmentChannel thresholdMethodOld = thresholdMethod maxIntensityOld = maxIntensity gaussianSigmaOld = gaussianSigma largeDoGSigmaOld = largeDoGSigma topHatOld = topHat topHatSigmaOld = topHatSigma manualSegmentOld = manualSegment manualThresholdOld = manualThreshold clij2.clear() segmentImp = extractChannel(imp1, segmentChannel, 0) try: gfx1 = clij2.push(segmentImp) gfx2 = clij2.create(gfx1) gfx3 = clij2.create(gfx1) gfx4 = clij2.create(gfx1) gfx5 = clij2.create(gfx1) gfx7 = clij2.create([imp.getWidth(), imp.getHeight()]) except: try: Thread.sleep(500) IJ.log( "Succeeded to sending to graphics card on the second time...") gfx1 = clij2.push(segmentImp) gfx2 = clij2.create(gfx1) gfx3 = clij2.create(gfx1) gfx4 = clij2.create(gfx1) gfx5 = clij2.create(gfx1) gfx7 = clij2.create([imp.getWidth(), imp.getHeight()]) except: errorDialog( """Could not send image to graphics card, it may be too large! Easy solutions: Try processing as 8-bit, cropping or scaling the image, or select a different CLIJ2 GPU. This issue is often intermittent, so trying again may also work! See the "Big Images on x graphics cards' notes at: https://clij2.github.io/clij2-docs/troubleshooting for more solutions """ + str(clij2.reportMemory())) gfx1, gfx2, gfx3, gfx4, gfx5 = segment(gfx1, gfx2, gfx3, gfx4, gfx5, gaussianSigma, thresholdMethod, maxIntensity, largeDoGSigma, pixelAspect, originalTitle, topHat, topHatSigma, manualSegment, manualThreshold) clij2.maximumZProjection(gfx5, gfx7) labelPrevImp = clij2.pull(gfx7) IJ.setMinAndMax(labelPrevImp, 0, clij2.getMaximumOfAllPixels(gfx7)) labelPrevImp.setTitle("Preview segmentation") labelPrevImp.show() IJ.run("glasbey_inverted") while ((not gd.wasCanceled()) and not (gd.wasOKed())): segmentChannel = int(choices.get(0).getSelectedItem()) quantChannel = int(choices.get(1).getSelectedItem()) thresholdMethod = choices.get(2).getSelectedItem() maxIntensity = int(choices.get(3).getSelectedItem()) gaussianSigma = sliders.get(0).getValue() / 10.0 largeDoGSigma = gd.sliders.get(1).getValue() / 10.0 topHat = gd.checkboxes.get(0).getState() topHatSigma = gd.sliders.get(2).getValue() / 10.0 manualSegment = gd.checkboxes.get(1).getState() manualThreshold = gd.sliders.get(3).getValue() if (segmentChannelOld != segmentChannel or thresholdMethodOld != thresholdMethod or maxIntensityOld != maxIntensity or gaussianSigmaOld != gaussianSigma or largeDoGSigmaOld != largeDoGSigma or topHatOld != topHat or topHatSigmaOld != topHatSigma or manualSegmentOld != manualSegment or manualThresholdOld != manualThreshold): if segmentChannelOld != segmentChannel: clij2.clear() segmentImp = extractChannel(imp1, segmentChannel, 0) gfx1 = clij2.push(segmentImp) gfx2 = clij2.create(gfx1) gfx3 = clij2.create(gfx1) gfx4 = clij2.create(gfx1) gfx5 = clij2.create(gfx1) gfx7 = clij2.create([imp.getWidth(), imp.getHeight()]) gfx1, gfx2, gfx3, gfx4, gfx5 = segment( gfx1, gfx2, gfx3, gfx4, gfx5, gaussianSigma, thresholdMethod, maxIntensity, largeDoGSigma, pixelAspect, originalTitle, topHat, topHatSigma, manualSegment, manualThreshold) clij2.maximumZProjection(gfx5, gfx7) labelPrevImp.close() labelPrevImp = clij2.pull(gfx7) IJ.setMinAndMax(labelPrevImp, 0, clij2.getMaximumOfAllPixels(gfx7)) labelPrevImp.setTitle("Preview segmentation") labelPrevImp.show() IJ.run("glasbey_inverted") segmentChannelOld = segmentChannel thresholdMethodOld = thresholdMethod maxIntensityOld = maxIntensity gaussianSigmaOld = gaussianSigma largeDoGSigmaOld = largeDoGSigma topHatOld = topHat topHatSigmaOld = topHatSigma manualSegmentOld = manualSegment manualThresholdOld = manualThreshold Thread.sleep(200) labelPrevImp.close() return segmentChannel, quantChannel, thresholdMethod, maxIntensity, gaussianSigma, largeDoGSigma, topHat, topHatSigma, manualSegment, manualThreshold
from ij.gui import GenericDialog from fiji.util.gui import GenericDialogPlus import os, shutil gdp = GenericDialogPlus("File Mover") file_type = gdp.getNextString() gdp.addStringField("File Extension ", '.tif', 5) x = gdp.addDirectoryField("Source: ", " ") gdp.addDirectoryField("Destination: ", " ") gdp.showDialog() if gdp.wasOKed(): file_type = gdp.getNextString().strip() source_path = gdp.getNextString() dest_path = gdp.getNextString() print(file_type) print("source " + source_path) print("dest " + dest_path) else: exit() moved = 'Moved Images' path = os.path.join(dest_path, moved) try: dest = os.mkdir(path) except OSError as error: print("Error: Moved Images is already present") exit() def move(): for root, dirs, files in os.walk((os.path.normpath(source_path)),
doRigidTransformCheckbox = gdp.getCheckboxes().get(1); translationXSlider = gdp.getSliders().get(2); translationYSlider = gdp.getSliders().get(3); translationZSlider = gdp.getSliders().get(4); rotationXSlider = gdp.getSliders().get(5); rotationYSlider = gdp.getSliders().get(6); rotationZSlider = gdp.getSliders().get(7); doSpotDetectionCheckbox = gdp.getCheckboxes().get(2); toleranceSlider = gdp.getSliders().get(8); thresholdSlider = gdp.getSliders().get(9); # loop until user closed the dialog stillValid = False; while ((not gdp.wasCanceled()) and not (gdp.wasOKed())): # reserve memory for input and output images if (input is None): input = clijx.create([ (long)(imp.getWidth() * scaleX), (long)(imp.getHeight() * scaleY), (long)(imp.getNSlices() * scaleZ)], clijx.Float); temp1 = clijx.create(input); temp2 = clijx.create(input); dog = clijx.create(input); transformed = clijx.create(input); reslicedFromTop = clijx.create([input.getWidth(), input.getDepth(), input.getHeight()], input.getNativeType()); cylinderProjection = clijx.create([(long)(input.getWidth() * 0.75), input.getHeight(), 540], input.getNativeType());
print("Cleaning up!") try: shutil.rmtree(td) except OSError: print("Failed to remove temporary directory: "+td+"\n") pass download_urls=cmtkgui.downloads() # download_urls=['http://www.nitrc.org/frs/download.php/4814/CMTK-2.2.3-CYGWIN-i686.tar.gz', 'http://www.nitrc.org/frs/download.php/4812/CMTK-2.2.3-Linux-x86_64.tar.gz', 'http://www.nitrc.org/frs/download.php/4820/CMTK-2.2.3-MacOSX-10.4-i686.tar.gz', 'http://www.nitrc.org/frs/download.php/4822/CMTK-2.2.3-MacOSX-10.5-x86_64.tar.gz', 'http://www.nitrc.org/frs/download.php/4824/CMTK-2.2.3-MacOSX-10.6-x86_64.tar.gz', 'http://www.nitrc.org/frs/download.php/4604/CMTK-2.2.1-CYGWIN-i686.tar.gz', 'http://www.nitrc.org/frs/download.php/4596/CMTK-2.2.1-Linux-x86_64.tar.gz', 'http://www.nitrc.org/frs/download.php/4608/CMTK-2.2.1-MacOSX-10.4-i686.tar.gz', 'http://www.nitrc.org/frs/download.php/4610/CMTK-2.2.1-MacOSX-10.5-x86_64.tar.gz', 'http://www.nitrc.org/frs/download.php/4611/CMTK-2.2.1-MacOSX-10.6-x86_64.tar.gz'] download_files=map(os.path.basename,download_urls) download_dict=dict(zip(download_files,download_urls)) print cmtkgui.install_dir() gd = GenericDialogPlus('Install CMTK') gd.addMessage('Currently installed CMTK version: '+cmtkgui.installed_version()) recommended_file=cmtkgui.recommended_file(download_files) if recommended_file is None: recommended_file = download_files[0] gd.addChoice("Download file",download_files,recommended_file) gd.addMessage('By downloading this file you agree to the following (if you '+ 'do not agree to this, please press "Cancel" below):') gd.addMessage('Core CMTK code is licensed under the GPLv3.\nBundled software'+ ' may be licensed under different terms - see licences/ directory for details') gd.showDialog() if gd.wasOKed(): download_file=gd.getNextChoice() # nb url has a suffix to indicate that user agreed to license download_url=download_dict[download_file]+'/?i_agree=1&download_now=1' print "Downloading "+download_file+' from url '+download_url+' to '+cmtkgui.install_dir() cmtkgui.download_and_untar_url(download_url,cmtkgui.install_dir(),untar_binaries,download_file)
try: download_url='https://github.com/jefferis/fiji-cmtk-gui/tarball/master' # check date installed_version='NA' local_version_info=cmtkgui.gui_local_versioninfo() if local_version_info.has_key('date'): installed_version=local_version_info['date'] github_version_info=cmtkgui.gui_github_versioninfo() update_available=cmtkgui.gui_update_available(github_version_info) gd = GenericDialogPlus('Update CMTK GUI') if update_available: gd.addMessage('CMTK GUI update available') gd.setOKLabel("Download") else: gd.addMessage('CMTK GUI is up to date') gd.addMessage('Currently installed CMTK GUI version: '+installed_version) gd.showDialog() if gd.wasOKed() and update_available: # nb url has a suffix to indicate that user agreed to license from ij import IJ IJ.showStatus('Downloading CMTK GUI') cmtkgui.download_and_untar_url(download_url,cmtkgui.gui_install_dir(),untar_github_archive) cmtkgui.gui_write_local_versioninfo(github_version_info) except SystemExit, e: from ij import IJ IJ.showStatus(str(e))
download_urls = cmtkgui.downloads() # download_urls=['http://www.nitrc.org/frs/download.php/4814/CMTK-2.2.3-CYGWIN-i686.tar.gz', 'http://www.nitrc.org/frs/download.php/4812/CMTK-2.2.3-Linux-x86_64.tar.gz', 'http://www.nitrc.org/frs/download.php/4820/CMTK-2.2.3-MacOSX-10.4-i686.tar.gz', 'http://www.nitrc.org/frs/download.php/4822/CMTK-2.2.3-MacOSX-10.5-x86_64.tar.gz', 'http://www.nitrc.org/frs/download.php/4824/CMTK-2.2.3-MacOSX-10.6-x86_64.tar.gz', 'http://www.nitrc.org/frs/download.php/4604/CMTK-2.2.1-CYGWIN-i686.tar.gz', 'http://www.nitrc.org/frs/download.php/4596/CMTK-2.2.1-Linux-x86_64.tar.gz', 'http://www.nitrc.org/frs/download.php/4608/CMTK-2.2.1-MacOSX-10.4-i686.tar.gz', 'http://www.nitrc.org/frs/download.php/4610/CMTK-2.2.1-MacOSX-10.5-x86_64.tar.gz', 'http://www.nitrc.org/frs/download.php/4611/CMTK-2.2.1-MacOSX-10.6-x86_64.tar.gz'] download_files = map(os.path.basename, download_urls) download_dict = dict(zip(download_files, download_urls)) print cmtkgui.install_dir() gd = GenericDialogPlus('Install CMTK') gd.addMessage('Currently installed CMTK version: ' + cmtkgui.installed_version()) recommended_file = cmtkgui.recommended_file(download_files) if recommended_file is None: recommended_file = download_files[0] gd.addChoice("Download file", download_files, recommended_file) gd.addMessage('By downloading this file you agree to the following (if you ' + 'do not agree to this, please press "Cancel" below):') gd.addMessage( 'Core CMTK code is licensed under the GPLv3.\nBundled software' + ' may be licensed under different terms - see licences/ directory for details' ) gd.showDialog() if gd.wasOKed(): download_file = gd.getNextChoice() # nb url has a suffix to indicate that user agreed to license download_url = download_dict[download_file] + '/?i_agree=1&download_now=1' print "Downloading " + download_file + ' from url ' + download_url + ' to ' + cmtkgui.install_dir( ) cmtkgui.download_and_untar_url(download_url, cmtkgui.install_dir(), untar_binaries, download_file)
def previewDialog(imp): gd = GenericDialogPlus("FRETENATOR") #create a list of the channels in the provided imagePlus types = [] for i in xrange(1, imp.getNChannels()+1): types.append(str(i)) gd.addMessage("""Rowe, J. H, Rizza, A., Jones A. M. (2022) Quantifying phytohormones in vivo with FRET biosensors and the FRETENATOR analysis toolset Methods in Molecular Biology Rowe, JH., Grangé-Guermente, M., Exposito-Rodriguez, M.,Wimalasekera, R., Lenz, M., Shetty, K., Cutler, S., Jones, AM., Next-generation ABACUS biosensors reveal cellular ABA dynamics driving root growth at low aerial humidity """) #user can pick which channel to base the segmentation on if len(types)>2: gd.addChoice("Channel number to use for segmentation", types, types[2]) gd.addChoice("Channel number to use for donor", types, types[0]) gd.addChoice("Channel number to use for acceptor (FRET)", types, types[1]) gd.addChoice("Channel number to use for acceptor", types, types[2]) #print('YAY') else: gd.addChoice("Channel number to use for segmentation", types, types[-1]) gd.addChoice("Channel number to use for donor", types, types[0]) gd.addChoice("Channel number to use for acceptor (FRET)", types, types[-2]) gd.addChoice("Channel number to use for acceptor", types, types[-1]) methods=["Otsu","Default", "Huang", "Intermodes", "IsoData", "IJ_IsoData", "Li", "MaxEntropy", "Mean", "MinError", "Minimum", "Moments", "Percentile", "RenyiEntropy", "Shanbhag", "Triangle", "Yen"] gd.addChoice("Autosegmentation method", methods, methods[0]) intensities=["254", "4094", "65534"] gd.addChoice("Max Intensity", intensities, intensities[-1]) gd.addSlider("Small DoG sigma", 0.5, 10, 0.8, 0.1) gd.addSlider("Large DoG sigma", 0.5, 20, 4 ,0.1) gd.addCheckbox("TopHat background subtraction? (Slower, but better) ", False) gd.addSlider("TopHat sigma", 5, 20, 8 ,0.1) gd.setModal(False) gd.addCheckbox("Manually set threshold? ", False) gd.addSlider("Manual threshold", 10, 65534, 2000, 1) dilationOptions=["0", "1", "2","3", "4", "5", "6"] gd.addChoice("Dilation?", dilationOptions, "0") gd.addCheckbox("Size exclusion of ROI? ", False) gd.addSlider("Minimum ROI size", 0, 9999, 20, 1) gd.addSlider("Maximum ROI size", 1, 10000, 10000, 1) gd.addCheckbox("Create nearest point projection with outlines (SLOW)? ", True) gd.addCheckbox("Watershed object splitting? ", True) gd.showDialog() cal = imp.getCalibration() pixelAspect=(cal.pixelDepth/cal.pixelWidth) originalTitle=imp1.getTitle() choices=gd.getChoices() sliders=gd.getSliders() checkboxes=gd.getCheckboxes() segmentChannel=int(choices.get(0).getSelectedItem()) donorChannel=int(choices.get(1).getSelectedItem()) acceptorChannel=int(choices.get(2).getSelectedItem()) acceptorChannel2=int(choices.get(3).getSelectedItem()) thresholdMethod=choices.get(4).getSelectedItem() maxIntensity=int(choices.get(5).getSelectedItem()) gaussianSigma=sliders.get(0).getValue()/10.0 largeDoGSigma = gd.sliders.get(1).getValue()/10.0 topHat=gd.checkboxes.get(0).getState() topHatSigma=gd.sliders.get(2).getValue()/10.0 manualSegment = gd.checkboxes.get(1).getState() manualThreshold=gd.sliders.get(3).getValue() dilation=int(choices.get(6).getSelectedItem()) sizeExclude=gd.checkboxes.get(2).getState() minSize = gd.sliders.get(4).getValue() maxSize = gd.sliders.get(5).getValue() watershed = gd.checkboxes.get(4).getState() #print dir(gd.sliders.get(5)) #print maxSize segmentChannelOld=segmentChannel thresholdMethodOld=thresholdMethod maxIntensityOld=maxIntensity gaussianSigmaOld=gaussianSigma largeDoGSigmaOld= largeDoGSigma topHatOld=topHat topHatSigmaOld=topHatSigma manualSegmentOld= manualSegment manualThresholdOld=manualThreshold dilationOld=dilation sizeExcludeOld=sizeExclude minSizeOld=minSize maxSizeOld=maxSize watershedOld=watershed clij2.clear() segmentImp=extractChannel(imp1, segmentChannel, 0) try: gfx1=clij2.push(segmentImp) gfx2=clij2.create(gfx1) gfx3=clij2.create(gfx1) gfx4=clij2.create(gfx1) gfx5=clij2.create(gfx1) gfx7=clij2.create([imp.getWidth(), imp.getHeight()]) except: try: Thread.sleep(500) print("Succeeded to sending to graphics card on the second time...") gfx1=clij2.push(segmentImp) gfx2=clij2.create(gfx1) gfx3=clij2.create(gfx1) gfx4=clij2.create(gfx1) gfx5=clij2.create(gfx1) gfx7=clij2.create([imp.getWidth(), imp.getHeight()]) except: errorDialog("""Could not send image to graphics card, it may be too large! Easy solutions: Try processing as 8-bit, cropping or scaling the image, or select a different CLIJ2 GPU. This issue is often intermittent, so trying again may also work! See the "Big Images on x graphics cards' notes at: https://clij2.github.io/clij2-docs/troubleshooting for more solutions """ + str(clij2.reportMemory()) ) gfx1,gfx2,gfx3,gfx4,gfx5 = segment(gfx1,gfx2,gfx3,gfx4,gfx5, gaussianSigma, thresholdMethod,maxIntensity, largeDoGSigma, pixelAspect, originalTitle, topHat, topHatSigma , manualSegment, manualThreshold, dilation,sizeExclude, minSize, maxSize, watershed) clij2.maximumZProjection(gfx5, gfx7) labelPrevImp= clij2.pull(gfx7) IJ.setMinAndMax(labelPrevImp, 0,clij2.getMaximumOfAllPixels(gfx7)) labelPrevImp.setTitle("Preview segmentation") labelPrevImp.show() IJ.run("glasbey_inverted") while ((not gd.wasCanceled()) and not (gd.wasOKed())): segmentChannel=int(choices.get(0).getSelectedItem()) donorChannel=int(choices.get(1).getSelectedItem()) acceptorChannel=int(choices.get(2).getSelectedItem()) acceptorChannel2=int(choices.get(3).getSelectedItem()) thresholdMethod=choices.get(4).getSelectedItem() maxIntensity=int(choices.get(5).getSelectedItem()) gaussianSigma=sliders.get(0).getValue()/10.0 largeDoGSigma = gd.sliders.get(1).getValue()/10.0 topHat=gd.checkboxes.get(0).getState() topHatSigma=gd.sliders.get(2).getValue()/10.0 manualSegment = gd.checkboxes.get(1).getState() manualThreshold = gd.sliders.get(3).getValue() dilation=int(choices.get(6).getSelectedItem()) sizeExclude=gd.checkboxes.get(2).getState() minSize = gd.sliders.get(4).getValue() maxSize = gd.sliders.get(5).getValue() watershed = gd.checkboxes.get(4).getState() if (segmentChannelOld !=segmentChannel or thresholdMethodOld !=thresholdMethod or maxIntensityOld !=maxIntensity or gaussianSigmaOld !=gaussianSigma or largeDoGSigmaOld != largeDoGSigma or topHatOld !=topHat or topHatSigmaOld !=topHatSigma or manualSegmentOld != manualSegment or manualThresholdOld !=manualThreshold or dilation != dilationOld or sizeExcludeOld!=sizeExclude or minSizeOld!=minSize or maxSizeOld!=maxSize or watershedOld!=watershed ): if minSizeOld!=minSize: if minSize>=maxSize: maxSize=minSize+1 gd.sliders.get(5).setValue(maxSize) if maxSizeOld!=maxSize: if minSize>=maxSize: minSize=maxSize-1 gd.sliders.get(4).setValue(minSize) if segmentChannelOld!=segmentChannel: clij2.clear() segmentImp=extractChannel(imp1, segmentChannel, 0) gfx1=clij2.push(segmentImp) gfx2=clij2.create(gfx1) gfx3=clij2.create(gfx1) gfx4=clij2.create(gfx1) gfx5=clij2.create(gfx1) gfx7=clij2.create([imp.getWidth(), imp.getHeight()]) gfx1,gfx2,gfx3,gfx4,gfx5 = segment(gfx1,gfx2,gfx3,gfx4,gfx5, gaussianSigma, thresholdMethod,maxIntensity, largeDoGSigma, pixelAspect, originalTitle, topHat,topHatSigma, manualSegment, manualThreshold, dilation,sizeExclude, minSize, maxSize, watershed) clij2.maximumZProjection(gfx5, gfx7) labelPrevImp.close() labelPrevImp= clij2.pull(gfx7) IJ.setMinAndMax(labelPrevImp, 0,clij2.getMaximumOfAllPixels(gfx7)) labelPrevImp.setTitle("Preview segmentation") labelPrevImp.show() IJ.run("glasbey_inverted") segmentChannelOld=segmentChannel thresholdMethodOld=thresholdMethod maxIntensityOld=maxIntensity gaussianSigmaOld=gaussianSigma largeDoGSigmaOld = largeDoGSigma topHatOld=topHat topHatSigmaOld=topHatSigma manualSegmentOld= manualSegment manualThresholdOld=manualThreshold dilationOld=dilation sizeExcludeOld=sizeExclude minSizeOld=minSize maxSizeOld=maxSize watershedOld=watershed Thread.sleep(200) labelPrevImp.close() makeNearProj = gd.checkboxes.get(3).getState() return segmentChannel, donorChannel, acceptorChannel, acceptorChannel2, thresholdMethod, maxIntensity, gaussianSigma, largeDoGSigma, topHat, topHatSigma, manualSegment, manualThreshold, makeNearProj, dilation, sizeExclude, minSize, maxSize, watershed
try: download_url = 'https://github.com/jefferis/fiji-cmtk-gui/tarball/master' # check date installed_version = 'NA' local_version_info = cmtkgui.gui_local_versioninfo() if local_version_info.has_key('date'): installed_version = local_version_info['date'] github_version_info = cmtkgui.gui_github_versioninfo() update_available = cmtkgui.gui_update_available(github_version_info) gd = GenericDialogPlus('Update CMTK GUI') if update_available: gd.addMessage('CMTK GUI update available') gd.setOKLabel("Download") else: gd.addMessage('CMTK GUI is up to date') gd.addMessage('Currently installed CMTK GUI version: ' + installed_version) gd.showDialog() if gd.wasOKed() and update_available: # nb url has a suffix to indicate that user agreed to license from ij import IJ IJ.showStatus('Downloading CMTK GUI') cmtkgui.download_and_untar_url(download_url, cmtkgui.gui_install_dir(), untar_github_archive) cmtkgui.gui_write_local_versioninfo(github_version_info) except SystemExit, e: from ij import IJ IJ.showStatus(str(e))