Christopher Bottoms
Christopher Bottoms

Reputation: 11158

How do I batch extract metadata from DM3 files using ImageJ?

How can you extract metadata for a batch of images? My first thought was to record a macro and then modify it to operate on a list of file names.

In that vein, I tried recording a macro doing something like this:

Ctrl-o # Open a file
12.dm3Enter # Select file to open
Ctrl-i # Open metadata in a new window
Ctrl-s # Save file
Info for 12.txtEnter# Name of file being saved
Ctrl-w# Close current window
Ctrl-w# Close current window

These steps work when I do them manually. This results in the following macro, which seems to be missing most of what I tried to record:

open("/path/to/file/12.dm3");
run("Show Info...");
run("Close");
run("Close");

Upvotes: 1

Views: 1662

Answers (2)

Lucius Silanus
Lucius Silanus

Reputation: 149

You could use getImageInfo() instead of run("Show Info..."). This will create a string in the macro containing the run("Show Info...") output, but can then be modified as you like. See http://rsb.info.nih.gov/ij/developer/macro/functions.html#getImageInfo for more information.

Upvotes: 1

Christopher Bottoms
Christopher Bottoms

Reputation: 11158

Modifying a Jython script that is supposed to extract dimension metadata from an image:

from java.io import File
from loci.formats import ImageReader
from loci.formats import MetadataTools

import glob

# Create output file
outFile = open('./pixel_sizes.txt','w')

# Get list of DM3 files
filenames = glob.glob('*.dm3')

for filename in filenames:

        # Open file
        file = File('.', filename)

        # parse file header
        imageReader = ImageReader()
        meta = MetadataTools.createOMEXMLMetadata()
        imageReader.setMetadataStore(meta)
        imageReader.setId(file.getAbsolutePath())

        # get pixel size
        pSizeX = meta.getPixelsPhysicalSizeX(0)

        # close the image reader
        imageReader.close()

        outFile.write(filename + "\t" + str(pSizeX) + "\n")

# Close the output file
outFile.close()

(Gist).

Upvotes: 2

Related Questions