IPSDK 0.2
IPSDK : Image Processing Software Development Kit
Bilateral smoothing 2dSee full documentation
imagebilateral2dImg (inImg,inSpaceSigma,inRangeSigma)
imagebilateral2dImg (inImg,inHalfKnlSize,inSpaceSigma,inRangeSigma)

Detailed Description

bilateral filter on 2d image

The bilateral filter is a non-linear smoothing filter that has good properties of edge-preserving. Each pixel value is replaced by a weighted average of the values of its neighbours. The weight is a product of two gaussian functions, one depending on the euclidian distance between the central pixel and its current neighbour, the other depending on the difference of the intensities of these 2 pixels.

On output image values are given by:

\[ OutImg[x, y] = \dfrac { \sum_{o_y=-n}^{n}{\sum_{o_x=-n}^{n}{W(x, y, o_x, o_y)*InImg[x+o_x, y+o_y]}} } { \sum_{o_y=-n}^{n}{\sum_{o_x=-n}^{n}{W(x, y, o_x, o_y)}} } \]

where:

Input and output images must have same size.

Here is an example of a bilaterial filter applied to an 8-bits grey levels input image (with $\sigma_S=10.0$ and $\sigma_R=50.0$) :

bilateral2d.png
See also
http://en.wikipedia.org/wiki/Bilateral_filter

Example of Python code :

Example imports

import PyIPSDK
import PyIPSDK.IPSDKIPLFiltering as filter

Code Example

# opening of input images
inImg = PyIPSDK.loadTiffImageFile(inputImgPath)
# bilateral filter 2d computation
outImg = filter.bilateral2dImg(inImg, 5, 3)

Example of C++ code :

Example informations

Header file

#include <IPSDKIPL/IPSDKIPLFiltering/Processor/Bilateral2dImg/Bilateral2dImg.h>

Code Example

// definition of a custom output geometry
ImageGeometryPtr pOutImageGeometry =
geometry2d(outImageBufferType,
pInImg->getSizeX(),
pInImg->getSizeY());
// creation of output image
boost::shared_ptr<MemoryImage> pOutImg = boost::make_shared<MemoryImage>();
pOutImg->init(*pOutImageGeometry);
// compute bilateral filter on input image
bilateral2dImg(pInImg, inHalfKnlSize, inSpaceSigma, inRangeSigma, pOutImg);