This is machine translation

Translated by Microsoft
Mouseover text to see original. Click the button below to return to the English verison of the page.

Note: This page has been translated by MathWorks. Please click here
To view all translated materals including this page, select Japan from the country navigator on the bottom of this page.


Morphological reconstruction


IM = imreconstruct(marker,mask)
IM = imreconstruct(marker,mask,conn)
IM = imreconstruct(gpuarrayMarker,gpuarrayMask)



IM = imreconstruct(marker,mask) performs morphological reconstruction of the image marker under the image mask. marker and mask can be two intensity images or two binary images with the same size. The returned image IM is an intensity image or a binary image, depending on the input images, and is the same size as the input images.

marker must be the same size as mask, and its elements must be less than or equal to the corresponding elements of mask. If the values in marker are greater than corresponding elements in mask, imreconstruct clips the values to the mask level before starting the procedure.

By default, imreconstruct uses 8-connected neighborhoods for 2-D images and 26-connected neighborhoods for 3-D images. For higher dimensions, imreconstruct uses conndef(ndims(I),'maximal').

IM = imreconstruct(marker,mask,conn) performs morphological reconstruction with the specified connectivity.


IM = imreconstruct(gpuarrayMarker,gpuarrayMask) performs morphological reconstruction on a GPU. The input marker image and mask image must be gpuArrays. This syntax requires the Parallel Computing Toolbox™.


collapse all

Read a grayscale image and display it.

I = imread('snowflakes.png');

Adjust the contast of the image to create the mask image and display results.

mask = adapthisteq(I);

Create a marker image that identifies high-intensity objects in the image using morphological erosion and display results.

se = strel('disk',5);
marker = imerode(mask,se);

Perform morphological opening on the mask image, using the marker image to identify high-intensity objects in the mask. Display results.

obr = imreconstruct(marker,mask);

Read a logical image into workspace and display it. This is the mask image.

mask = imread('text.png');

Create a marker image that identifies the object in the image you want to extract through segmentation. For this example, identify the "w" in the word "watershed".

marker = false(size(mask));
marker(13,94) = true;

Perform segmentation of the mask image using the marker image.

im = imreconstruct(marker,mask);

Read mask image and create gpuArray.

mask = gpuArray(imread('text.png'));
figure, imshow(mask),

Create marker image gpuArray.

marker = gpuArray.false(size(mask));
marker(13,94) = true;

Perform the segmentation and display the result.

im = imreconstruct(marker,mask);
figure, imshow(im)

Input Arguments

collapse all

Input image, specified as a nonsparse numeric or logical array.

Example: se = strel('disk',5); marker = imerode(mask,se);

Data Types: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Mask image, specified as a nonsparse numeric or logical array.

Example: mask = imread('text.png');

Data Types: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Connectivity, specified as one of the values in this table.



Two-dimensional connectivities


4-connected neighborhood


8-connected neighborhood

Three-dimensional connectivities


6-connected neighborhood


18-connected neighborhood


26-connected neighborhood

Connectivity can also be defined in a more general way for any dimension by using for conn a 3-by-3-by- ... -by-3 matrix of 0s and 1s. The 1-valued elements define neighborhood locations relative to the center element of conn. Note that conn must be symmetric about its center element.

Example: obr = imreconstruct(marker,mask,4);

Data Types: double | logical

Input image on a GPU, specified as a gpuArray.

Example: marker = gpuArray(imread('text.png'));

Mask image on a GPU, specified as a gpuArray.

Example: mask = gpuArray(imread('text.png'));

Output Arguments

collapse all

Reconstructed image, returned as a numeric or logical array, depending on the input image, that is the same size as the input image.


  • Morphological reconstruction is the algorithmic basis for several other Image Processing Toolbox™ functions, including imclearborder, imextendedmax, imextendedmin, imfill, imhmax, imhmin, and imimposemin.

  • Performance note: This function may take advantage of hardware optimization for data types logical, uint8, uint16, single, and double to run faster. Hardware optimization requires marker and mask to be 2-D images and conn to be either 4 or 8.


imreconstruct uses the fast hybrid grayscale reconstruction algorithm described in [1].


[1] Vincent, L., "Morphological Grayscale Reconstruction in Image Analysis: Applications and Efficient Algorithms," IEEE Transactions on Image Processing, Vol. 2, No. 2, April, 1993, pp. 176-201.

Extended Capabilities

Introduced before R2006a

Was this topic helpful?