Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Interpolating along the 2-D image slices

I have a set of 100 2-D image slices of the same size. I have used MATLAB to stack them to create a volumetric data. While the size of the 2-D slices is 480x488 pixels, the direction in which the images are stacked is not wide enough to visualize the volume in different orientation when projected. I need to interpolate along the slices to increase the size for visualization.

Can somebody please give me an idea or tip about how to do it?

Edit: Anotated projected microscopy-images

Looking at a face

General view

The figure 1 is the top-view of the projected volume.

The figure 2 is the side-view of the projected volume.

When I change the rotation-angle, and try to visualize the volume in different orientation, e.g. side-view (figure 2), is what I see as in figure 2.

I want to expand the side view by interpolating along the image slices.

like image 732
Sequentialrant Avatar asked Jul 21 '11 05:07

Sequentialrant


People also ask

How do you interpolate an image?

Image interpolation is generally achieved through one of three methods: nearest neighbor, bilinear interpolation, or bicubic interpolation. Since each method has its own merits and challenges, the choice of appropriate method is based on state of affairs.

What is interpolating an image?

Image interpolation occurs when you resize or distort your image from one pixel grid to another. Image resizing is necessary when you need to increase or decrease the total number of pixels, whereas remapping can occur when you are correcting for lens distortion or rotating an image.


2 Answers

Here is an adapted example from the MATLAB documentation on how to visualize volumetric data (similar to yours) using isosurfaces:

%# load MRI dataset: 27 slices of 128x128 images
load mri
D = squeeze(D);       %# 27 2D-images

%# view slices as countours
contourslice(D,[],[],1:size(D,3))
colormap(map), view(3), axis tight

%# apply isosurface
figure
%#D = smooth3(D);
p = patch( isosurface(D,5) );
isonormals(D, p);
set(p, 'FaceColor',[1,.75,.65], 'EdgeColor','none')
daspect([1 1 .5]), view(3), axis tight, axis vis3d
camlight, lighting gouraud

%# add isocaps
patch(isocaps(D,5), 'FaceColor','interp', 'EdgeColor','none');
colormap(map)

contoursliceisosurface_isocaps

like image 87
Amro Avatar answered Nov 15 '22 06:11

Amro


MATLAB has a function interp3 that can be used for interpolation, assuming that the data is uniformly discretised.

Check out the documentation.

Hope this helps.

EDIT: The MATLAB function interp3 works as follows:

vi = interp3(x, y, z, v, xi, yi, zi);

I assume that your "stack" of slices defines the arrays x, y, z, v as 3D arrays, where x, y are the coordinates of the pixels in the plane, z is the "height" of each slice and v is the actual image slices, maybe as "intensity" values for the pixels.

If you want to interpolate new image slices at intermediate z values you could specify these levels in the zi array. The arrays xi, yi would again represent the coordinates of the pixels in the plane.

like image 44
Darren Engwirda Avatar answered Nov 15 '22 08:11

Darren Engwirda