Working with images¶
Introduction¶
There are several types of images in the jicbioimage.core.image
module.
Raw data is contained in the jicbioimage.core.image.Image
class. The
jicbioimage.core.image.ProxyImage
and
jicbioimage.core.image.MicroscopyImage
classes contain image meta data
along with a reference to the raw image.
The jicbioimage.core.image.Image
is a subclass of numpy.ndarray
.
In addition to the numpy.ndarray
functionality the
jicbioimage.core.image.Image
class has specialised functionality for
creating images, tracking the history of images and returning png/html
representations of images.
Creating images¶
Using numpy
to create images¶
There are several ways of creating images. One can use the
functionality inherited from numpy.ndarray
.
>>> from jicbioimage.core.image import Image
>>> Image((50,50))
<Image object at 0x..., dtype=uint8>
Warning
When creating an image in this fashion it will be filled with the noise of whatever was present in that piece of computer memory before the memory was allocated to the image.
A safer way to create an image is to first create a numpy.ndarray
using numpy.zeros()
or numpy.ones()
and then cast it to the
jicbioimage.core.image.Image
type.
>>> import numpy as np
>>> np.zeros((50,50), dtype=np.uint8).view(Image)
<Image object at 0x..., dtype=uint8>
When creating an array in this fashion it’s history creation attribute is empty.
>>> print(np.zeros((50, 50), dtype=np.uint8).view(Image).history.creation)
None
To assign a creation event to the image history one can use the
jicbioimage.core.image.Image.from_array()
class method.
>>> ar = np.zeros((50, 50), dtype=np.uint8)
>>> im = Image.from_array(ar)
>>> im.history.creation
'Created Image from array'
Creating images from file¶
Suppose that we wanted to create an jicbioimage.core.image.Image
instance
from the file images/rgb_squares.png
.
>>> fpath = "images/rgb_squares.png"
This can be achieved using the jicbioimage.core.image.Image.from_file()
class
method.
>>> im = Image.from_file(fpath)
Accessing png representations of an image¶
The jicbioimage.core.image.Image.png()
function can be used to access
the image as a PNG binary string. This function is used internally to implement
the IPython integration, which allows images to be viewed directly in IPython
qtconsole/notebook.
>>> im
Working with stacks of images¶
Many bioimages contain stacks of 2D images representing a 3D structure. The
jicbioimage.core.image.Image3D
class can be used to work with this
type of data.
The jicbioimage.core.image.Image3D
is a subclass of
numpy.ndarray
. To create an instance of a
jicbioimage.core.image.Image3D
from a numpy array and assign a
creation event to the history of the 3D image one can use the
jicbioimage.core.image.Image3D.from_array
method.
To access such a stack from a
jicbioimage.core.image.MicroscopyCollection
one can use the
jicbioimage.core.image.MicroscopyCollection.zstack()
method.
>>> from jicbioimage.core.image import Image3D
>>> ar = np.zeros((50, 50, 50), dtype=np.uint8)
>>> im3d = Image3D.from_array(ar)
>>> im3d.history.creation
'Created Image3D from array'
It is possible to write and read an instance of
jicbioimage.core.image.Image3D
as a series of 2D images to and from a
directory using the jicbioimage.core.image.Image3D.to_directory()
method
and jicbioimage.core.image.Image3D.from_directory()
class method.