File Exchange

image thumbnail

Imagic, MRC and DM3 file i/o

version (17.2 KB) by

Functions for reading and writing image files for electron microscopy



View License

This directory contains m-functions for reading and writing files used in electron microscopy and 3D reconstruction. The file formats those used by the IMAGIC software package (Image Science GmbH; EMAN and Frealign are public-domain programs that also use this format), the MRC program library, and the Digital Micrograph (Gatan, Inc.) file format. These functions were written on what published information we could find, and work for our limited purposes; they are not supported by the software authors at all.

The functions generally assume that little-endian files are being read by a little-endian machine. However, some functions might still work with big-endian machines such as PowerPC, as they were originally written on a Mac computer.

Fred Sigworth, Liguo Wang
Yale University

Loads part or all of the data in an Imagic file pair into a matlab 3-d array. This function also returns a data structure with part of the information from the header.

Writes an entire matlab 3-d array as an Imagic file with float32 data type.

Create, read or write a datastructure that contains all the information in an Imagic header. The structure (a struct of arrays) allows manipulation of header information. For writing very large datafiles, the header file can be constructed and written out separately by these functions.

Read a file generated by Digital Micrograph, version 3. These files have a large tree structure, and the code inside this function can be modified to return any field or fields of this structure. At present just the pixel size and number of pixels is returned along with the raw image.

Read part or all of an MRC-format file (2d or 3d) into a Matlab array; also retrieves information about the image size.

Write an entire 3d Matlab array into an MRC-format file

Write the header of an MRC-format file, allowing the user to write the rest of the file directly with the fwrite function.

Comments and Ratings (11)

Fred Sigworth

Please note that the ReadDM3 function has been updated to read dm4 files as well. See this entry:

Bjarke Svane

Alex Bard

The ReadMRC function works perfectly on my local machine, using Matlab R2017b on Win64. However, when I move the exact same code onto the university's supercomputer, which uses R2015b for 64-bit Linux, I get an error message that says, "ReadMRC: not enough data in file." Anyone have any idea what I need to do to fix that? As far as I can tell it's able to open or at least see the file (because trying to read a nonexistent file gives a different error message), but for some reason it's not able to access the data or something.

Thanks for the function! However, whenever i try to open my mrc file using


I get the error "Undefined variable "sample" or class "sample.mrc"
I am using version R2017a on Linux

moonseop kim

now i am trying to use ReadMRC. For example, my data is data1 so when i try to ReadMRC(data1), it does not work T.T

What is this problem?


Thanks for sharing! Small bug with ReadMRC when reading one image at a time, it will load the full MRC with the first image since nz=min(,numSlices); is only redifined in the if startSlice>1

Fred Sigworth

Oh yes, I wrote it and use it on Mac OS X. --Fred

Miriam Dowle


Is this compatible with Matlab for Mac OS X?

Thanks, Miriam


Liang Jin

Great modules for reading/writing MRC files.

MATLAB Release Compatibility
Created with R2010a
Compatible with any release
Platform Compatibility
Windows macOS Linux

Inspired: Read .dm3 and .dm4 image files

MATLAB Online Live Editor Challenge

Win cash prizes and have your live script featured on our website

Learn more

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video