Lookup Table Operations
Creating a Lookup Table
Certain binary image operations can be implemented most easily through lookup
tables. A lookup table is a column vector in which each element represents the value
to return for one possible combination of pixels in a neighborhood. To create lookup
tables for various operations, use the makelut
function.
makelut
creates lookup tables for 2-by-2 and 3-by-3
neighborhoods. The following figure illustrates these types of neighborhoods. Each
neighborhood pixel is indicated by an x, and the center pixel is the one with a
circle.
For a 2-by-2 neighborhood, there are 16 possible permutations of the pixels in the neighborhood. Therefore, the lookup table for this operation is a 16-element vector. For a 3-by-3 neighborhood, there are 512 permutations, so the lookup table is a 512-element vector.
Note
makelut
and applylut
support only 2-by-2
and 3-by-3 neighborhoods. Lookup tables larger than 3-by-3 neighborhoods are not
practical. For example, a lookup table for a 4-by-4 neighborhood would have
65,536 entries.
Using a Lookup Table
Once you create a lookup table, you can use it to perform the desired operation by
using the applylut
function.
The example below illustrates using lookup table operations to modify an image
containing text. The example creates an anonymous function that returns
1
if three or more pixels in the 3-by-3 neighborhood are
1
; otherwise, it returns 0
. The example
then calls makelut
, passing in this function as the first
argument, and using the second argument to specify a 3-by-3 lookup table.
f = @(x) sum(x(:)) >= 3; lut = makelut(f,3);
lut
is returned as a 512-element vector of
1
s and 0
s. Each value is the output from the
function for one of the 512 possible permutations.
You then perform the operation using applylut
.
BW1 = imread("text.png");
BW2 = applylut(BW1,lut);
figure
montage({BW1,BW2})
For information about how applylut
maps pixel combinations in
the image to entries in the lookup table, see the reference page for applylut
.