IPSDK 4.1
IPSDK : Image Processing Software Development Kit
Separated bilateral smoothing 2d
imageseparatedBilateral2dImg (inImg,inSpaceSigma,inRangeSigma)
imageseparatedBilateral2dImg (inImg,inHalfKnlSize,inSpaceSigma,inRangeSigma)

Detailed Description

separated version of bilateral filter on 2d image

The separated bilateral filter is an approximation of the Bilateral smoothing 2d that gives resulting images that may be close to what is obtained with the original bilateral filter with dramatically better time performance. The separated bilateral filter is executed in 2 passes: first along x-axis, then along y-axis.

Output image pixel values are given by:

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

where:

Input and output images must have same size.

Here is an example of a separated bilateral 2d operation applied to an 8-bits grey levels input image (with $\sigma_S=10.0$ and $\sigma_R=20.0$):

separatedBilateral2d.png
See also
M. Moreaud, F. Cokelaer, Flowing Bilateral Filter : definition and GPU implementation, Image Analysis and Stereology (revision in progress)

Example of Python code :

Example imports

import PyIPSDK
import PyIPSDK.IPSDKIPLFiltering as filter

Code Example

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

Example of C++ code :

Example informations

Header file

#include <IPSDKIPL/IPSDKIPLFiltering/Processor/SeparatedBilateral2dImg/SeparatedBilateral2dImg.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
separatedBilateral2dImg(pInImg, inHalfKnlSize, inSpaceSigma, inRangeSigma, pOutImg);