# Classification of operations

In image processing textbooks, you often see low-level image processing operations grouped into two categories:

• Point processes
• Neighborhood processes

In a point process, the value of each output pixel is a function of only the corresponding input pixel. Examples include adding a constant to all image pixels and gamma correction.

In a neighborhood process, the value of each output pixel is a function of the corresponding input pixel and a fixed set of neighborhood pixels around it. For example, filtering with a 3-by-3 filter is a neighborhood process. Each output pixel depends on the values of the corresponding input pixel, as well as that pixel's eight neighbors. Dilation is another example of a neighborhood process.

Here are two more types of operations that I've found to be common:

• Transforms
• Queue processes

Lots of operations have the word transform in them, such as Fourier transform, Hough transform, and geometric or spatial transform. But it's a little hard to define what makes something a transform. I think transforms tend to have these characteristics in common:

• They are invertible, or at least approximately invertible under certain conditions.
• The transform pairs involve different coordinate systems. For example, the Fourier transform involves a spatial and a frequency coordinate system, and the Radon transform involves a spatial and a rho-theta coordinate system. Even geometric transforms involve two different spatial coordinate systems.

I'm hoping to find a better term for queue processes, but that's the best I've come up with so far. A queue process works by "spreading out" in some fashion from a set of starting pixels. I use the word "queue" here because implementations often involve a queue data structure, like this:

% Initialize the queue
for each pixel p in image:
if p satisfies some condition
push p onto queue
end if
end for

while queue not empty
get next pixel k from queue
record something about k in the output image
for each neighbor pixel j of pixel k
if j satisfies some condition
push j onto queue
end if
end for
end while


"Flood filling," which many of you can probably visualize, can be implemented this way. There are several algorithms in the Image Processing Toolbox that use queues in this fashion, including morphological reconstruction (imreconstruct) and the watershed transform (watershed).

I have three questions for you:

• Do you have better insight into why we call some operations "transforms"?
• Can you think of a better term than "queue process"?
• Can you think of other useful classes of image processing operations?

Post your thoughts as a comment.

|