Steve on Image Processing with MATLAB

Image processing concepts, algorithms, and MATLAB


Steve on Image Processing with MATLAB has been archived and will not be updated.

Filling holes in images

Didja know? You can fill holes, or pits, in grayscale images by using the Image Processing Toolbox function imfill.

The other day I was rereading the Tarboton paper on upslope area, trying to decide what to do next in my series on that topic. I noticed that the author described filling in "pits" in digital elevation models (DEMs) as a common preprocessing step. He outlined a method based on pixel flow directions, but didn't give details. I realized that this preprocessing step is very easy to do using the Image Processing Toolbox, but that many users might not know about this capability.

Let me first define a little more precisely what I mean by "pit" or "hole," and then I'll show you how to fill it in. It's a little easier to show in one dimension, so let's start there.

Here's a one-dimensional function:

t = linspace(0, 3*pi, 100);
y = t/2 + sin(t);

The plot above has a local minimum in its interior. This is a hole, or pit. If we are careful to define our connectivity appropriately for one dimension, we can use imfill with the 'holes' option to fill in the hole.

% Define a one-dimensional connectivity in the horizontal direction.
conn = [0 0 0; 1 1 1; 0 0 0];
y2 = imfill(y, conn, 'holes');


The filled curve has this key property: From any interior point, you can now travel to a boundary minimum without ever going uphill. Here's what it looks for an image:

I = imread('tire.tif');
I2 = imfill(I,'holes');  % the default connectivity is fine
title('Original image')
title('Filled image')

The hole-filling algorithm in imfill is based on morphological reconstruction (imreconstruct). If you are interested in the theoretical details, see section 6.3.7 of Morphological Image Analysis: Principles and Applications, 2nd ed., Springer, by P. Soille.

Published with MATLAB® 7.4

  • print


To leave a comment, please click here to sign in to your MathWorks Account or create a new one.