Skip to content

Instantly share code, notes, and snippets.

@NicoKiaru
Last active June 19, 2023 10:33
Batch conversion to pyramidal ome-tiff using Glencoe Software optimized workflow #BIOP #Fiji #OmeTiff #MRXS
/* Batch conversion of files to OME-TIFF following this install:
* https://c4science.ch/w/bioimaging_and_optics_platform_biop/image-processing/qupath/ome-tiff-conversion/
*
* Uses bioformats2raw and raw2ometiff
* https://www.glencoesoftware.com/blog/2019/12/09/converting-whole-slide-images-to-OME-TIFF.html
*
* Works with MRXS files
*
* Nicolas BIOP, EPFL, 2021
*/
#@File(label = "File to convert to ome.tiff") originalFile
#@Integer(label = "Number of resolution levels", value = 5) nResolutions
#@Boolean(label = "Check if this is a RGB image") isRGB
#@String(label = "Compression", choices = {"Uncompressed", "LZW", "JPEG-2000", "JPEG-2000 Lossy","JPEG", "zlib"}, value = "LZW") compression
bf2rawPath = "bioformats2raw.bat"
raw2ometiffPath = "raw2ometiff.bat"
// First step : create a temporary dir for raw data
String tmpdir = Files.createTempDirectory("raw2ometiff").toFile().getAbsolutePath();
// Starts the command
List<String> cmd = new ArrayList<>();
// bioformats2raw.bat --resolutions=4 source dest
cmd.add(bf2rawPath)
cmd.add("--resolutions="+nResolutions)
cmd.add(originalFile.getAbsolutePath())
cmd.add(tmpdir+File.separator+"raw")
println("Tmp folder = "+tmpdir+File.separator+"raw")
ProcessBuilder pb = new ProcessBuilder(cmd);
println("- Starting conversion to raw data (1/2) "+originalFile.getAbsolutePath())
Process p = pb.inheritIO().start();
p.waitFor();
println("- Done")
// raw2ometiff.bat --compression="LZW" source dest.tiff
def ometiffFileName = FilenameUtils.removeExtension(originalFile.getAbsolutePath())+".ome.tiff";
cmd.clear()
cmd.add(raw2ometiffPath)
cmd.add("--compression="+compression)
cmd.add("--progress")
cmd.add(tmpdir+File.separator+"raw")
cmd.add(ometiffFileName)
pb = new ProcessBuilder(cmd);
//pb.redirectInput(ProcessBuilder.Redirect.INHERIT);
//pb.redirectOutput(ProcessBuilder.Redirect.INHERIT);
println("- Starting writing as ome.tiff (2/2) : "+ometiffFileName)
p = pb.inheritIO().start();
p.waitFor();
println("- Done")
println("Cleaning raw temp data");
FileUtils.deleteDirectory(new File(tmpdir+File.separator+"raw"));
println("- Done");
import java.io.*
import java.util.ArrayList
import java.util.List
import java.nio.file.Files
import org.apache.commons.io.FilenameUtils
import org.apache.commons.io.FileUtils
import ij.IJ
import ij.Prefs
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment