The Image Processing LIbrary is a collection of standard image processing algorithms (and a couple of unique ones) with overloads for common data types. The methods are broken down into several categories including:

spacerbulletBinary Morphological Methods
spacerbullet
Grayscale Morphological Methods
spacerbullet
Convolution Methods
spacerbullet
Correlation Methods
spacerbullet
Edge Detectors
spacerbullet
Dynamic Range Adjustment Methods
spacerbullet
Resampling Methods
spacerbullet
Logical Methods
spacerbullet
Masking Methods
spacerbullet
Statistical Methods
spacerbullet
Drawing Methods
spacerbullet
Other Methods

 


Binary Morphological Methods

The image processing library has the standard binary morphological operations: Erode, Dilate, Open, and Close. Each of these methods have been optimized in C++ to exit out of nested loops as soon as sufficient information is achieved to qualify a pixel as true or false.


spacerbulletBinaryErode()

spacer

Binary Erosion is one of the two primary binary operators in mathematical morphology. Eroding an image involves measuring subregions of the image under a shaped operator called a structuring element. Erosion removes the portions of the binary image that cannot fully contain all the pixels of the structuring element. A conceptual analog to the erosion technique is running an eraser the shape of the structuring element around all the edges of the blobs in the image.

The example below shows the effect of a 7x3 rectangular structuring element on a binary mask of rice. The left image is the origina and the right is the eroded result. The asymmetry of the structuring element causes vertical dimensions of the mask to be more aggressively eroded than the horizontal.

 

 

 

spacerbulletBinaryDilate()

spacer

Binary dilation is the opposite operation of erosion. Dilation involves expanding the mask in any regions that partially encompass the kernel. The conceptual analog for dilation is running a structuring element shaped marker around all the edges of the blobs in the image.

The example below shows the same binary rice image and the result from dilating with a 7x3 rectangular structuring element.

 

 

 

spacerbulletBinaryOpen()

spacer

Binary opening is a composite morphological method that is intended to open up regions of the binary image that do not fully encompass the kernel while not affecting the remaining portions of the image. The open is performed by first eroding the source image and then dilating the result of that image with the same kernel. Opening is particularly useful when trying to break apart logical blobs for labeling and analysis.

The example below shows the result of opening the rice image with the same 7x3 structuring element. Notice how some of the rice blobs on the left are touching at points, but after opening the touching regions have been removed. Minimal degration of the other regions has occurred.

 

 

 

spacerbulletBinaryClose()

spacer

Binary closing is the oposite operation as binary opening. In closing, the operator merges blobs that have gaps smaller than the structuring element. In contrast to opening, closing is commonly used to combine regions that been fragmented by thresholding, noise, etc. The binary close operation is a dilation followed by an erosion with the same structuring element.

The example below shows the result of closing the rice image with the same 7x3 structuring element. Note how some of the blobs that were close together in the original image are now connected after the closing.

 

 

 

spacerbulletBinaryLabel()

spacer

Binary labeling is the process of searching through a binary image and separating all the discreet blobs in the image into indexed regions. The two common labeling variants are 4- and 8-connected relationships (although this can be expanded conceptually to n-dimensions). A 4-connected blob is a region in which all of its member pixels are connected by north, west, south, or east neighboring pixels. The 8-connected label image more aggressively combines blobs by allowing members of a region to be connected by any of the 8 pixels surrounding the

 

 

 

spacerbulletBinaryAreaFill()

spacer

@@@

 

   

 

spacerbulletBinaryThickening()

spacer

@@@

 

 

spacerbulletBinaryThinning()

spacer

@@@

 

 

spacerbulletBinaryPerimeter()

spacer

@@@

 

   

 

spacerbulletBinaryHitOrMiss()

spacer

@@@