IPSDK 4.1
IPSDK : Image Processing Software Development Kit
Adaptive Threshold Mean 3d
imageadaptiveThresholdMean3dImg (inImg3d,halfKnlSize)

Detailed Description

binarize a 3d input image according an adaptive threshold based on the mean intensity of the voxel's neighbourhood

For each voxel, the algorithm computes a threshold according to a neighbourhood described by $InKnlSize$. The computed threshold $T$ is the mean intensity along the voxel's neighbourhood $\aleph$ :

\[ T(x, y, z) = \frac{1}{N} \sum_{(i, j, k) \in \aleph}{InImg(x+i, y+j, z+k)} \]

Where $N$ is the number of voxels in $\aleph$.

This algorithm is equivalent to the Adaptive Threshold 3d binarization algorithm, with each kernel coefficient set to $1/N$. However, it is optimized to compute a mean adaptive threshold based binarization and yields better performances.

Note
To avoid a noisy binarization, it is advised to filter the input image with a median filter before computing the binarization.

See Adaptive Threshold Mean 2d for a 2d example of the adaptative mean threshold result.

Example of Python code :

Example imports

import PyIPSDK
import PyIPSDK.IPSDKIPLBinarization as bin

Code Example

# opening of input images
inImg = PyIPSDK.loadTiffImageFile(inputImgPath)
# threshold computation with a given kernel
outImg = bin.adaptiveThresholdMean3dImg(inImg, halfKnlSize)

Example of C++ code :

Example informations

Header file

#include <IPSDKIPL/IPSDKIPLBinarization/Processor/AdaptiveThresholdMean3dImg/AdaptiveThresholdMean3dImg.h>

Code Example

// Sample with a generated output image
// ------------------------------------
// compute absolute value of input image
ImagePtr pAutoOutImg = adaptiveThresholdMean3dImg(pInImg, halfKnlSize);
// Sample with a provided output image
// -----------------------------------
// Retrieve the input image size
const ipUInt64 sizeX = pInImg->getSizeX();
const ipUInt64 sizeY = pInImg->getSizeY();
const ipUInt64 sizeZ = pInImg->getSizeZ();
// create output image
ImageGeometryPtr pOutputImageGeometry = geometry3d(eImageBufferType::eIBT_Binary, sizeX, sizeY, sizeZ);
boost::shared_ptr<MemoryImage> pOutImg(boost::make_shared<MemoryImage>());
pOutImg->init(*pOutputImageGeometry);
// compute absolute value of input image
adaptiveThresholdMean3dImg(pInImg, halfKnlSize, pOutImg);