Hello,
I am trying to stitch together images of entire c.elegans worms to recreate a 3d image of the entire worm. Stitching them manually is easy but tedious, so I am trying to write an ImageJ macro that will stitch them for me. All the plugins necessary are available (pairwise stitching, run 8bit, etc) and I can get a macro to stitch the files in a single folder if I provide the exact file names, paths, etc within the macro. However, with my severely limited coding knowledge, I cannot find a way to make this process generic. Additionally, I want this macro to be propagative (not sure if this is the right description) to the point where the user selects a 'mother' folder with subfolders that each contain the images for a single worm (see below). Then ImageJ would sample each 'daughter' folder, stitch those images together, and save the result, before moving on to the next 'daughter' folder. MOTHER >DAUGHTER 1 >worm 1_1 >worm 1_2 >worm 1_3 >worm 1_4 >worm 1_5 >worm 1_6 >worm 1_7 >DAUGHTER 2 >worm 2_1 >worm 2_2 >worm 2_3 >worm 2_4 >worm 2_5 >DAUGHTER 3 >worm 3_1 >worm 3_2 >worm 3_3 >worm 3_4 >worm 3_5 >worm 3_6 etc etc From what I have found on the web and my own trail and error I have pieced together the following: // This macro will takemutlipleple folders with individual // images sequential images, sorted by sequence into folders, // and stitch them together using the "PairwiseStitching" macro. // The stitched images will be saved to the 'mother' // directory with the name of the sequence-folder they were // constructed from. print(""); print("-- 3D Stitching --"); print(""); mother = getDirectory("select mother directory"); print("MOTHER directory set as:"); print(mother); // The MOTHER directory contains any number of daughter // directories. The following sequence effectively primes // ImageJ to be familiar with all the files within the // 'Daughter' directories. setBatchMode(true); count = 0; countFiles(mother); n = 0; processFiles(mother); print(count+" files processed"); function countFiles(mother) { list = getFileList(mother); for (i=0; i<list.length; i++) { if (endsWith(list[i], "/")) countFiles(""+mother+list[i]); else count++; print(list.length); } } function processFiles(mother) { list = getFileList(mother); for (i=0; i<list.length; i++) { if (endsWith(list[i], "/")) processFiles(""+mother+list[i]); else { showProgress(n++, count); daughter = mother+list[i]; print(daughter); } } } // The first two images are stitched together to serve as a // template for subsequent images to be stitched on to. // This template is saved in the MOTHER directory with the // file name of the DAUGHTER directory. for (i=0; i<2; i++) initial(daughter, mother, file1, file2); function initial(daughter, mother, file1, file2) { open(daughter + list[i]); run("8-bit"); open(daughter + list[i+1]); run("8-bit"); print("stitching 1+2"); run("Pairwise stitching", "first_image=file1 second_image=file2 fusion_method=[Max. Intensity] check_peaks=5 compute_overlap subpixel_accuracy x=0.0000 y=0.0000 z=0.0000 registration_channel_image_1=[Average all channels] registration_channel_image_2=[Average all channels]"); saveAs("Tiff", mother + daughter); if (i == 2) exit(); } // With a template available, imageJ can now propagate through // The remaining files (i<list.length) to stitch them to the template stitch(daughter); for (i = 2; i < list.length; i++) stitch(daughter, mother, file1, file2); function stitch(daughter, mother, file1, file2); { open(daughter + file1); run("8-bit"); open(mother + "daughter.tif"); print("propagative stitching"); run("Pairwise stitching", "first_image=file1 second_image=daughter.tif fusion_method=[Max. Intensity] check_peaks=5 compute_overlap subpixel_accuracy x=0.0000 y=0.0000 z=0.0000 registration_channel_image_1=[Average all channels] registration_channel_image_2=[Average all channels]"); saveAs("Tiff", mother + daughter) } //** I'm not sure if this style of naming will work, i'm not sure how to recall Thank you all so much for your help, in advance. I look forward to all suggestions and criticisms. - Ben -- Sent from: http://imagej.1557.x6.nabble.com/ -- ImageJ mailing list: http://imagej.nih.gov/ij/list.html |
Have you tried using Grid/Collection Stitching?
https://imagej.net/Image_Stitching#Grid.2FCollection_Stitching -- Sent from: http://imagej.1557.x6.nabble.com/ -- ImageJ mailing list: http://imagej.nih.gov/ij/list.html |
I have, and it seems gets overwhelmed when i have more than 4 images for it
to put together. the worms are all oriented differently so I unfortunately cannot set a grid for the images to be stitched on. Thanks for the suggestion though! -- Sent from: http://imagej.1557.x6.nabble.com/ -- ImageJ mailing list: http://imagej.nih.gov/ij/list.html |
Hi,
You can define many types of grids before starting the stitching, and it does support C. elegans image stitching. This is one of the cases we originally developed it for :) We also wrote quite extensive documentation, did you read it on how to set up grids? It is pretty straight forward: http://imagej.net/Image_Stitching … specifically here: http://imagej.net/Image_Stitching#Grid.2FCollection_Stitching - you can choose from many grid types, and a simple line can represented by some of them We also just finished the BigStitcher which is a significant extension of the Stitching plugins. One feature that might specifically be interesting for you is that you can interactively try different grid types, so you can adjust sliders until the initialization is right by real-time display of the result. You can find general instructions here: http://imagej.net/BigStitcher … Again, specifically on the interactive grid initialization here: http://imagej.net/BigStitcher_manual_translation#Move_Tiles_To_Regular_Grid_… At the end of the day, both are macro-scriptable, so once you know the basic workflow it is easy to automate. All the best, Stephan --- Dr. Stephan Preibisch Group Leader Berlin Institute for Medical Systems Biology (BIMSB), Max Delbrück Center for Molecular Medicine (MDC) Building 89, 1.08b Robert-Rössle-Str. 10 13125 Berlin email: [hidden email]<mailto:[hidden email]> web: http://preibischlab.mdc-berlin.de twitter: http://twitter.com/preibischs On Apr 26, 2018, at 7:07 PM, nebenb <[hidden email]<mailto:[hidden email]>> wrote: I have, and it seems gets overwhelmed when i have more than 4 images for it to put together. the worms are all oriented differently so I unfortunately cannot set a grid for the images to be stitched on. Thanks for the suggestion though! -- Sent from: http://imagej.1557.x6.nabble.com/ -- ImageJ mailing list: http://imagej.nih.gov/ij/list.html -- ImageJ mailing list: http://imagej.nih.gov/ij/list.html |
Hello Dr. Preibisch,
Thank you for your response! The stitching plugins all work great when I'm manually stitching worms, my troubles come more from the macro-writing in that I'm not sure how write a macro to jump from folder to folder to stitch worm after worm together. I'm excited to try out your new BigStitcher! Now if only the ImageJ server weren't down for maintenance..I'll give it a try on monday! Vielen Dank! Ben -- Sent from: http://imagej.1557.x6.nabble.com/ -- ImageJ mailing list: http://imagej.nih.gov/ij/list.html |
In reply to this post by Stephan.Preibisch@mdc-berlin.de
Hi Ben,
> if only the ImageJ server weren't down for maintenance..I'll give it a > try on monday! Are you talking about http://imagej.nih.gov/ij? Everything there is mirrored daily to http://imagej.net/index.html, so feel free to use that if the NIH site is ever inaccessible. Why do you need the ImageJ 1.x website to try out the BigStitcher? Regards, Curtis -- Curtis Rueden LOCI software architect - https://loci.wisc.edu/software ImageJ2 lead, Fiji maintainer - https://imagej.net/User:Rueden Did you know ImageJ has a forum? http://forum.imagej.net/ On Fri, Apr 27, 2018 at 11:52 AM, nebenb <[hidden email]> wrote: > Hello Dr. Preibisch, > > Thank you for your response! The stitching plugins all work great when I'm > manually stitching worms, my troubles come more from the macro-writing in > that I'm not sure how write a macro to jump from folder to folder to stitch > worm after worm together. > > I'm excited to try out your new BigStitcher! Now if only the ImageJ server > weren't down for maintenance..I'll give it a try on monday! > > Vielen Dank! > > Ben > > > > > > -- > Sent from: http://imagej.1557.x6.nabble.com/ > > -- > ImageJ mailing list: http://imagej.nih.gov/ij/list.html > -- ImageJ mailing list: http://imagej.nih.gov/ij/list.html |
Hi Curtis,
If I'm remembering correctly, ImageJ/FIJI weren't wanting to update because they couldn't connect to a server? Regardless, I have the BigStitcher beta now and its GREAT its so easy and straightforward and does a remarkable job stitching my files together. I'm still working on understanding how to script the stitching process to be automated, since I can use the same stitch-settings for each group of files. Ideally, FIJI would move from folder to folder stitching together the files in each. I don't see a clear way to do this with BigStitcher but also have close to zero coding experience and might be missing something obvious. Dr. Preibisch, Thank you again for the tip on BigStitcher, it works wonders! As i mentioned above I'm trying to script the image stitching to be automated. Since the worms i'm trying to stitch are arbitrarily oriented, I can't define a tiling-orientation ahead of time, but the stitcher does a good job orienting the tiles. Thanks again for all the input, Ben -- Sent from: http://imagej.1557.x6.nabble.com/ -- ImageJ mailing list: http://imagej.nih.gov/ij/list.html |
Hi Ben,
It’s great to hear that the BigStitcher works for you. Did you try to put all tiles on top of each other and maybe it’ll be able to figure it out itself using quite aggressive, high thresholds? If that works, you can easily automate it using the ImageJ Macro Recording function with BigStitcher (Plugins > BigStitcher > Batch Processing & Plugins > Multiview Reconstruction > Batch Processing). It might also work well using interest point detection and Precise Descriptor-based registration in the Multiview Reconstruction instead of the correlation-based stitching. Depends on the marker in your C. elegans. All the best, Stephan --- Dr. Stephan Preibisch Group Leader Berlin Institute for Medical Systems Biology (BIMSB), Max Delbrück Center for Molecular Medicine (MDC) Building 89, 1.08b Robert-Rössle-Str. 10 13125 Berlin email: [hidden email]<mailto:[hidden email]> web: http://preibischlab.mdc-berlin.de twitter: http://twitter.com/preibischs On May 4, 2018, at 10:38 PM, nebenb <[hidden email]<mailto:[hidden email]>> wrote: Hi Curtis, If I'm remembering correctly, ImageJ/FIJI weren't wanting to update because they couldn't connect to a server? Regardless, I have the BigStitcher beta now and its GREAT its so easy and straightforward and does a remarkable job stitching my files together. I'm still working on understanding how to script the stitching process to be automated, since I can use the same stitch-settings for each group of files. Ideally, FIJI would move from folder to folder stitching together the files in each. I don't see a clear way to do this with BigStitcher but also have close to zero coding experience and might be missing something obvious. Dr. Preibisch, Thank you again for the tip on BigStitcher, it works wonders! As i mentioned above I'm trying to script the image stitching to be automated. Since the worms i'm trying to stitch are arbitrarily oriented, I can't define a tiling-orientation ahead of time, but the stitcher does a good job orienting the tiles. Thanks again for all the input, Ben -- Sent from: http://imagej.1557.x6.nabble.com/ -- ImageJ mailing list: http://imagej.nih.gov/ij/list.html -- ImageJ mailing list: http://imagej.nih.gov/ij/list.html |
Free forum by Nabble | Edit this page |