ImageDev

CudaTemplateMatching3d

Performs a correlation by convolution between a three-dimensional grayscale image and a grayscale kernel.

Access to parameter description

This command is experimental, his signature may be modified between now and his final version.

For an introduction: section Image Correlation.

See also

Function Syntax

This function returns a CudaTemplateMatching3dOutput structure containing outputImage and outputTransformIndexImage.
// Output structure of the cudaTemplateMatching3d function.
struct CudaTemplateMatching3dOutput
{
    /// The correlation scores image.
    std::shared_ptr< iolink::ImageView > outputImage;
    /// The index image for transform.
    std::shared_ptr< iolink::ImageView > outputTransformIndexImage;
    /// The dataframe indicating the rotations and scale to apply.
    std::shared_ptr< const iolink::DataFrameView > transformTable;
};

// Function prototype
CudaTemplateMatching3dOutput cudaTemplateMatching3d( std::shared_ptr< iolink::ImageView > inputImage, std::shared_ptr< iolink::ImageView > inputTemplate, std::shared_ptr< iolink::ImageView > inputMask, std::shared_ptr< iolink::ImageView > inputFilter, bool rotateMask, std::shared_ptr< const iolink::DataFrameView > transformTable, CudaTemplateMatching3d::TilingMode tilingMode, iolink::Vector3u32 tileSize, CudaContext::Ptr cudaContext, std::shared_ptr< iolink::ImageView > outputImage = nullptr, std::shared_ptr< iolink::ImageView > outputTransformIndexImage = nullptr );

Class Syntax

Parameters

Parameter Name Description Type Supported Values Default Value
input
inputImage
The input image where the template is searched. Image Grayscale nullptr
input
inputTemplate
The template image. Its shape must be contained in the input image. Image Grayscale nullptr
input
inputMask
Optional: The input mask. Its shape must be the same as the template image. Image Binary or Grayscale nullptr
input
inputFilter
Optional: The input filter image used to correct the input template in the Fourier domain. Its shape must be the same as the input reference image. Image Grayscale nullptr
input
rotateMask
The flag that indicates if the mask has to be rotated with the template.
It increases significantly the computation time but has to be set to True if the mask is not rotation invariant (not a sphere).
Bool false
input
transformTable
The dataframe indicating the rotations and scale to apply.
Columns: Rx (def 0), Ry (def 0), Rz (def 0), Sx (def 1), Sy (def 1), Sz (def 1). If columns are omitted default value are considered. If parameter is omitted no transform is applied (default values). The output of RotationGenreator3d can be directly set for this parameter.
DataFrameViewConst nullptr
input
tilingMode
The way to manage the GPU memory. If the input image is already on GPU, this parameter is ignored.
NONE The entire input image is transferred to the GPU memory. If the total input, intermediate and output data size exceed the GPU memory, the computation will fail.
USER_DEFINED The input image is processed by tiles of a predefined size.
Enumeration NONE
input
tileSize
The tile width and height in pixels. They must be greater than or equal to the correlation kernel width and height. This parameter is used only in USER_DEFINED tiling mode. Vector3u32 Any value {128, 128, 128}
input
cudaContext
CUDA context information. CudaContext nullptr
output
outputImage
The correlation scores image. Image nullptr
output
outputTransformIndexImage
The index image for transform. Image nullptr

Object Examples

auto fibers = readVipImage( std::string( IMAGEDEVDATA_IMAGES_FOLDER ) + "fibers.vip" );
auto fibers_template = readVipImage( std::string( IMAGEDEVDATA_IMAGES_FOLDER ) + "fibers_template.vip" );
auto fibers_template_mask = readVipImage( std::string( IMAGEDEVDATA_IMAGES_FOLDER ) + "fibers_template_mask.vip" );

CudaTemplateMatching3d cudaTemplateMatching3dAlgo;
cudaTemplateMatching3dAlgo.setInputImage( fibers );
cudaTemplateMatching3dAlgo.setInputTemplate( fibers_template );
cudaTemplateMatching3dAlgo.setInputMask( fibers_template_mask );
cudaTemplateMatching3dAlgo.setInputFilter( nullptr );
cudaTemplateMatching3dAlgo.setRotateMask( false );
cudaTemplateMatching3dAlgo.setTransformTable( nullptr );
cudaTemplateMatching3dAlgo.setTilingMode( CudaTemplateMatching3d::TilingMode::NONE );
cudaTemplateMatching3dAlgo.setTileSize( {128, 128, 128} );
cudaTemplateMatching3dAlgo.setCudaContext( nullptr );
cudaTemplateMatching3dAlgo.execute();

std::cout << "outputImage:" << cudaTemplateMatching3dAlgo.outputImage()->toString();
std::cout << "outputTransformIndexImage:" << cudaTemplateMatching3dAlgo.outputTransformIndexImage()->toString();

Function Examples

auto fibers = readVipImage( std::string( IMAGEDEVDATA_IMAGES_FOLDER ) + "fibers.vip" );
auto fibers_template = readVipImage( std::string( IMAGEDEVDATA_IMAGES_FOLDER ) + "fibers_template.vip" );
auto fibers_template_mask = readVipImage( std::string( IMAGEDEVDATA_IMAGES_FOLDER ) + "fibers_template_mask.vip" );

auto result = cudaTemplateMatching3d( fibers, fibers_template, fibers_template_mask, nullptr, false, nullptr, CudaTemplateMatching3d::TilingMode::NONE, {128, 128, 128}, nullptr );

std::cout << "outputImage:" << result.outputImage->toString();
std::cout << "outputTransformIndexImage:" << result.outputTransformIndexImage->toString();