ImageDev

EigenvaluesToStructureness3d

Computes a structure score image from the eigenvalues of a three-dimensional tensor image.

Access to parameter description

This algorithm allows extracting tubular, blob-like, and plate-like structures from dark or bright background.

The computation is based on eigenvalues $\lambda_{1}$, $\lambda_{2}$ and $\lambda_{3}$ where $\mid \lambda_{1} \mid \geq \mid \lambda_{2} \mid \geq \mid \lambda_{3} \mid $.

The structure score for bright tubular structures corresponds to:
$ score = \begin{cases} 0 & \text{ if } \lambda_1 >0 \text{ or } \lambda_2 >0 \\ (1-\exp(-\frac{\mathcal{R}_a^2}{2\alpha^2}))\exp(-\frac{\mathcal{R}_b^2}{2\beta^2})(1-\exp(-\frac{S^2}{2c^2})) & \end{cases} $

The score for bright blob-like structures is computed as follows:
$ score = \begin{cases} 0 & \text{ if } \lambda_1 >0 \text{ or } \lambda_2 >0 \text{ or } \lambda_3 >0\\ (1-\exp(-\frac{\mathcal{R}_a^2}{2\alpha^2}))(1-\exp(-\frac{\mathcal{R}_b^2}{2\beta^2})) (1-\exp(-\frac{S^2}{2c^2})) \end{cases} $

The score for bright plate-like structures is computed as follows:
$ score = \begin{cases} 0 & \text{ if } \lambda_1 >0 \\ \exp(-\frac{\mathcal{R}_a^2}{2\alpha^2})\exp(-\frac{\mathcal{R}_b^2}{2\beta^2})(1-\exp(-\frac{S^2}{2c^2})) & \end{cases} $

Where: For dark objects the conditions on $\lambda_{1}$, $\lambda_{2}$ and $\lambda_{3}$ are reversed.

This algorithm outputs a float grayscale image where each pixel intensity represents a structure score between 0 and 1.

The method for tubular structures is referenced by Alejandro Frangi publication:
A.F.Frangi, W.J.Niessen, K.L.Vincken, M.A.Viergever. "Multiscale vessel enhancement filtering". Lecture Notes in Computer Science(MICCAI), vol. 1496, pp. 130-137, 1998.

See also

Function Syntax

This function returns outputImage.
// Function prototype
std::shared_ptr< iolink::ImageView > eigenvaluesToStructureness3d( std::shared_ptr< iolink::ImageView > inputEigenvaluesImage, EigenvaluesToStructureness3d::Lightness lightness, EigenvaluesToStructureness3d::StructureType structureType, double alpha, double beta, double noiseCutoff, std::shared_ptr< iolink::ImageView > outputImage = NULL );
This function returns outputImage.
// Function prototype.
eigenvalues_to_structureness_3d( input_eigenvalues_image,
                                 lightness = EigenvaluesToStructureness3d.Lightness.BRIGHT,
                                 structure_type = EigenvaluesToStructureness3d.StructureType.ROD,
                                 alpha = 0.75,
                                 beta = 0.75,
                                 noise_cutoff = 0.5,
                                 output_image = None )
This function returns outputImage.
// Function prototype.
public static IOLink.ImageView
EigenvaluesToStructureness3d( IOLink.ImageView inputEigenvaluesImage,
                              EigenvaluesToStructureness3d.Lightness lightness = ImageDev.EigenvaluesToStructureness3d.Lightness.BRIGHT,
                              EigenvaluesToStructureness3d.StructureType structureType = ImageDev.EigenvaluesToStructureness3d.StructureType.ROD,
                              double alpha = 0.75,
                              double beta = 0.75,
                              double noiseCutoff = 0.5,
                              IOLink.ImageView outputImage = null );

Class Syntax

Parameters

Class Name EigenvaluesToStructureness3d

Parameter Name Description Type Supported Values Default Value
input
inputEigenvaluesImage
The input image containing the eigenvalues field. Type must be float. Spectral series size is 3 (channel 0 = largest eigenvalue, channel 1 = medium eigen value, channel 2 = smallest eigenvalue). Image Multispectral nullptr
input
lightness
The type of structure lightness to extract.
BRIGHT Extracts bright structures from dark background.
DARK Extracts dark structures from bright background.
Enumeration BRIGHT
input
structureType
The type of structure shapes to extract.
ROD Extracts rod-like (tubular) structures.
BALL Extracts blob-like (spherical) structures.
PLANE Extracts plate-like (planar) structures.
Enumeration ROD
input
alpha
The flatness sensitivity threshold. It corresponds to the alpha term of the score equation. Float64 >0 0.75
input
beta
The blobness sensitivity threshold. It corresponds to the beta term of the score equation. Float64 >0 0.75
input
noiseCutoff
The noise scale factor. It is used for computing the c term of the score equation. Float64 >0 0.5
output
outputImage
The score output image. X, Y, and Z dimensions, calibration and interpretation of the output image are forced to the same values as the input. The spectral dimension is forced to 1. Type is forced to float and all values are between 0 and 1. Image nullptr

Object Examples

auto neuron_eigenvalues = readVipImage( std::string( IMAGEDEVDATA_IMAGES_FOLDER ) + "neuron_eigenvalues.vip" );

EigenvaluesToStructureness3d eigenvaluesToStructureness3dAlgo;
eigenvaluesToStructureness3dAlgo.setInputEigenvaluesImage( neuron_eigenvalues );
eigenvaluesToStructureness3dAlgo.setLightness( EigenvaluesToStructureness3d::Lightness::BRIGHT );
eigenvaluesToStructureness3dAlgo.setStructureType( EigenvaluesToStructureness3d::StructureType::ROD );
eigenvaluesToStructureness3dAlgo.setAlpha( 0.75 );
eigenvaluesToStructureness3dAlgo.setBeta( 0.75 );
eigenvaluesToStructureness3dAlgo.setNoiseCutoff( 0.5 );
eigenvaluesToStructureness3dAlgo.execute();

std::cout << "outputImage:" << eigenvaluesToStructureness3dAlgo.outputImage()->toString();
neuron_eigenvalues = imagedev.read_vip_image(imagedev_data.get_image_path("neuron_eigenvalues.vip"))

eigenvalues_to_structureness_3d_algo = imagedev.EigenvaluesToStructureness3d()
eigenvalues_to_structureness_3d_algo.input_eigenvalues_image = neuron_eigenvalues
eigenvalues_to_structureness_3d_algo.lightness = imagedev.EigenvaluesToStructureness3d.BRIGHT
eigenvalues_to_structureness_3d_algo.structure_type = imagedev.EigenvaluesToStructureness3d.ROD
eigenvalues_to_structureness_3d_algo.alpha = 0.75
eigenvalues_to_structureness_3d_algo.beta = 0.75
eigenvalues_to_structureness_3d_algo.noise_cutoff = 0.5
eigenvalues_to_structureness_3d_algo.execute()

print( "output_image:", str( eigenvalues_to_structureness_3d_algo.output_image ) )
ImageView neuron_eigenvalues = Data.ReadVipImage( @"Data/images/neuron_eigenvalues.vip" );

EigenvaluesToStructureness3d eigenvaluesToStructureness3dAlgo = new EigenvaluesToStructureness3d
{
    inputEigenvaluesImage = neuron_eigenvalues,
    lightness = EigenvaluesToStructureness3d.Lightness.BRIGHT,
    structureType = EigenvaluesToStructureness3d.StructureType.ROD,
    alpha = 0.75,
    beta = 0.75,
    noiseCutoff = 0.5
};
eigenvaluesToStructureness3dAlgo.Execute();

Console.WriteLine( "outputImage:" + eigenvaluesToStructureness3dAlgo.outputImage.ToString() );

Function Examples

auto neuron_eigenvalues = readVipImage( std::string( IMAGEDEVDATA_IMAGES_FOLDER ) + "neuron_eigenvalues.vip" );

auto result = eigenvaluesToStructureness3d( neuron_eigenvalues, EigenvaluesToStructureness3d::Lightness::BRIGHT, EigenvaluesToStructureness3d::StructureType::ROD, 0.75, 0.75, 0.5 );

std::cout << "outputImage:" << result->toString();
neuron_eigenvalues = imagedev.read_vip_image(imagedev_data.get_image_path("neuron_eigenvalues.vip"))

result = imagedev.eigenvalues_to_structureness_3d( neuron_eigenvalues, imagedev.EigenvaluesToStructureness3d.BRIGHT, imagedev.EigenvaluesToStructureness3d.ROD, 0.75, 0.75, 0.5 )

print( "output_image:", str( result ) )
ImageView neuron_eigenvalues = Data.ReadVipImage( @"Data/images/neuron_eigenvalues.vip" );

IOLink.ImageView result = Processing.EigenvaluesToStructureness3d( neuron_eigenvalues, EigenvaluesToStructureness3d.Lightness.BRIGHT, EigenvaluesToStructureness3d.StructureType.ROD, 0.75, 0.75, 0.5 );

Console.WriteLine( "outputImage:" + result.ToString() );