Declaration
procedure smooth(dst: TIEVisionImage; smoothType: TIEVisionSmoothType = ievGAUSSIAN; param1: int32_t = 3; param2: int32_t = 0; param3: double = 0.0; param4: double = 0.0); overload; safecall;
procedure smooth(smoothType: TIEVisionSmoothType = ievGAUSSIAN; param1: int32_t = 3; param2: int32_t = 0; param3: double = 0.0; param4: double = 0.0); overload; safecall;
Description
Smooth the image.
First overload places the result into destination object.
Second overload updates the current image.
Also see:
Comparison of smoothing, blurring and noise reduction methods
Box Filter (ievBLUR_NO_SCALE/ievBLUR)
Performs a linear convolution filling the kernel with 1s. For ievBLUR the kernel is also normalized by its area, i.e. scaled by 1 / (param1 * param2).
To smooth different pixels with different-size box kernels, you can use the integral image that is computed using
integral.
Parameter | Description |
dst | Container for the destination image |
smoothType | Type of the smoothing |
param1 | Width of the blurring kernel box |
param2 | Height of the blurring kernel box (Specify 0 to use same value as param1) |
param3, param4 | Ignored |
Gaussian Blur (ievGAUSSIAN)
Convolves the image with a Gaussian kernel.
Parameter | Description |
dst | Container for the destination image |
smoothType | Type of the smoothing |
param1 | Width of the Gaussian kernel (Must be odd) |
param2 | Height of the Gaussian kernel (Must be odd, Specify 0 to use same value as param1) |
param3,param4 | Gaussian kernel standard deviation in X/Y direction (Specify param3/4 as 0 to compute from the kernel size) |
Median Blur (ievMEDIAN)
Blurs an image using a median filter.
Parameter | Description |
dst | Container for the destination image |
smoothType | Type of the smoothing |
param1 | Width and height of the aperture (Must be odd and greater than 1, e.g. 3, 5, 7...) |
param2,param3,param4 | Ignored |
Bilateral Filter (ievBILATERAL)
Applies a bilateral filter to an image. The Bilateral filter can reduce unwanted noise very well while keeping edges fairly sharp. However, it is very slow compared to most filters.
Parameter | Description |
dst | Container for the destination image |
smoothType | Type of the smoothing |
param1 | Diameter of each pixel neighborhood that is used during filtering. If specified as 0, it is computed from sigmaSpace (param4) |
param2 | Ignored |
param3 | Filter sigma in the color space. A larger value of the parameter means that farther colors within the pixel neighborhood will be mixed together, resulting in larger areas of semi-equal color |
param4 | Filter sigma in the coordinate space. A larger value of the parameter means that farther pixels will influence each other as long as their colors are close enough. When param1>0, it specifies the neighborhood size regardless of sigmaSpace. Otherwise, param1 is proportional to sigmaSpace |
Sigma values: For simplicity, you can set the 2 sigma values (param3/param4) to be the same. If they are small (e.g. < 10), the filter will not have much effect, whereas if they are large (> 150), they will have a very strong effect, making the image look "cartoonish".
Filter size: Large filters (param1 > 5) are very slow, so it is recommended to use param1=5 for real-time applications, and perhaps param1=9 for offline applications that need heavy noise filtering.
| Demos\ImageEditing\EveryMethod\EveryMethod.dpr |
// Load test image
ImageEnView1.IO.LoadFromFile( 'D:\TestImage.jpg' );
// Smooth image using Blur
ImageEnView1.IEBitmap.GetIEVisionImage().smooth( ievBLUR, 3, 3 );
ImageEnView1.Update();
// Smooth image using Gaussian
// Parameter values specify the kernel size and must be odd
ImageEnView1.IEBitmap.GetIEVisionImage().smooth( ievGAUSSIAN, 3, 3 );
ImageEnView1.Update();
// Smooth image using Median
// Parameter values specify the aperture size and must be odd
ImageEnView1.IEBitmap.GetIEVisionImage().smooth( ievMEDIAN, 3 );
ImageEnView1.Update();
// Smooth image using Bilateral
// For Param3 and Param4, values in the range 30-100 are best
ImageEnView1.IEBitmap.GetIEVisionImage().smooth( ievBILATERAL, 5, 0, 30, 30 );
ImageEnView1.Update();