Introduction to the img
Module¶
For the course of this tutorial, we assume that you have DNG up and running.
Loading Images and Density Maps¶
OpenStructure features an img
module that is dedicated to the
manipulation of images/density maps. The images or density maps can either be
one-, two- or three-dimensional. The most common formats used in X-ray/
electron crystallography and atomic force microscopy are supported in addition
to several general purpose image formats. See
supported file formats for details. The img
module was originally developed as part of the Image Processing Library &
Toolbox IPLT. More documentation and examples can also be found on the
IPLT website <http://www.iplt.org>.
To load a density map, type
map = io.LoadImage('/path/to/examples/code_fragments/map/1ppt.map')
This will load the fragment density map from the specified file ‘fragment.map’ and store the result in map.
Now let’s inspect what we just loaded:
print(map.GetPixelSampling(), map.GetSize())
We can see that the sampling is set to 1.0 Angstrom in all three dimensions. The loaded map is an instance of ImageHandle
, a class to represent images in one, two and three dimensions.
Manipulating Images and Density Maps¶
The algorithms used for manipulation of an image are found in the
img.alg
module. Therefore before using an algorithm we
first have to import the img.alg
module.
from ost.img import alg
The img.alg
module provides a wide range of algorithms to
manipulate image data. Here for example we use a LowPassFilter to restrict the
resolution of the density map to frequencies lower than a certain threshold.
map_filtered = map.Apply(alg.LowPassFilter(3.0))
The filtered map is stored in a new variable called map_filtered. A complete list of algorithms is available on the img.alg - Image Processing Algorithms page.
Displaying Images and Density Maps¶
Now that we have a filtered map it’s time to have a look at it. There are fundamentally two ways to visualize 3-dimensional density maps. One is by drawing isocontour surfaces. These are conceptually similar to contour lines used in cartography: every point on an isosurface has the same density value. Isosurfaces are easy to create in OpenStructure:
go = gfx.MapIso("filtered", map_filtered,0.5)
scene.Add(go)
The other way to visualize a 3-dimensional map is by showing one 2-dimensional density slice at a time, allowing the user to move through the slices. In OpenStructure this is achieved using a DataViewer). A DataViewer showing the filtered map is created using the following command:
gui.CreateDataViewer(map_filtered)
This command displays a panel showing one slice of the density map lying on a particular (x,y) plane in the coordinate reference system. The z and x keys can be used to move to slices lying at a lower or higher coordinate along the z axis, allowing the examination of the full 3-dimensional volume.
A more detailed explanation of the img
module can be found in the
tutorial section for img
.
Continue with part three of the tutorial.