EasyImage::RecursiveAverage

Applies stronger noise reduction to small variations and conversely.

Namespace: Euresys::Open_eVision

[C++]

void RecursiveAverage(
   const EROIBW8* sourceImage,
   const EROIBW16* store,
   EROIBW8* destinationImage,
   const EBW16Vector* lookupTable
)

Parameters

sourceImage

Pointer to the source image/ROI.

store

Pointer to a 16-bit work image.

destinationImage

Pointer to the destination image/ROI.

lookupTable

Pointer to the LUT vector generated by a call to EasyImage::SetRecursiveAverageLUT.

Remarks

Recursive averaging is a well known process for noise reduction by temporal integration. The principle is to continuously update a noise-free image by blending it, using a linear combination, with the raw, noisy, live image stream.
Algorithmically, this amounts to apply the following recurrence: where a is a mixture coefficient. The value of this coefficient can be adjusted so that a prescribed noise reduction ratio is achieved. This procedure is effective when applied to still images, but generates a trailing effect on moving objects because of the transient behavior of the filter. The larger the noise reduction ratio, the heavier the trailing effect. To work around this, a non-linearity can be introduced in the blending process: small gray-level values variations between successive images are usually caused by noise, while large variations correspond to changes in the signal itself (camera displacement or object movements). Function EasyImage::RecursiveAverage uses this observation and applies stronger noise reduction to small variations and conversely. This way, noise is better reduced in still areas and trailing is avoided in moving areas.
For optimal performance, the non-linearity must be pre-computed once for all using function EasyImage::SetRecursiveAverageLUT.

Note. Before the first call to the EasyImage::RecursiveAverage method, the 16-bit work image must be cleared (all pixel values set to zero).

EasyImage.RecursiveAverage

Applies stronger noise reduction to small variations and conversely.

Namespace: Euresys.Open_eVision

[C#]

void RecursiveAverage(
   Euresys.Open_eVision.EROIBW8 sourceImage,
   Euresys.Open_eVision.EROIBW16 store,
   Euresys.Open_eVision.EROIBW8 destinationImage,
   Euresys.Open_eVision.EBW16Vector lookupTable
)

Parameters

sourceImage

Pointer to the source image/ROI.

store

Pointer to a 16-bit work image.

destinationImage

Pointer to the destination image/ROI.

lookupTable

Pointer to the LUT vector generated by a call to EasyImage::SetRecursiveAverageLUT.

Remarks

Recursive averaging is a well known process for noise reduction by temporal integration. The principle is to continuously update a noise-free image by blending it, using a linear combination, with the raw, noisy, live image stream.
Algorithmically, this amounts to apply the following recurrence: where a is a mixture coefficient. The value of this coefficient can be adjusted so that a prescribed noise reduction ratio is achieved. This procedure is effective when applied to still images, but generates a trailing effect on moving objects because of the transient behavior of the filter. The larger the noise reduction ratio, the heavier the trailing effect. To work around this, a non-linearity can be introduced in the blending process: small gray-level values variations between successive images are usually caused by noise, while large variations correspond to changes in the signal itself (camera displacement or object movements). Function EasyImage::RecursiveAverage uses this observation and applies stronger noise reduction to small variations and conversely. This way, noise is better reduced in still areas and trailing is avoided in moving areas.
For optimal performance, the non-linearity must be pre-computed once for all using function EasyImage::SetRecursiveAverageLUT.

Note. Before the first call to the EasyImage::RecursiveAverage method, the 16-bit work image must be cleared (all pixel values set to zero).