ImageDev

- Getting Started
- ImageDev Python
- ImageDev C#
- ImageDev C++
- Licensing Information
- Redistributable Files
- Processing
- Image Manipulation
- - Synthetic Images
  - - RandomImage2d
    - RandomImage3d
    - RandomGaussianImage2d
    - RandomGaussianImage3d
    - RadialFunctionImage2d
    - RadialFunctionImage3d
    - OrientedLinesImage2d
    - OrientedLinesImage3d
    - RandomSphereImage3d
    - BoxGridImage2d
    - BoxGridImage3d
    - WedgeMaskImage3d
    - PointSpreadFunctionImage3d
  - Image Editing
  - - ConvertImage
    - ResetImage
    - CopyImage
    - PasteImage2d
    - PasteImage3d
    - CropImage2d
    - CropImage3d
    - SampleImage2d
    - SampleImage3d
    - InterlaceFrames2d
    - DeinterlaceFrames2d
  - Stack Operations
  - - SequenceConcatenation
    - SequenceToMultispectral
    - SequenceToVolume
    - VolumeToSequence
    - MultispectralToSequence
    - GetSliceFromVolume3d
    - SetSliceToVolume3d
    - GetObliqueSliceFromVolume3d
    - ImageStackProjection3d
    - VolumeProjection3d
- Geometry And Matching
- - Geometric Transforms
  - - Shearing3d
    - TranslateImage2d
    - TranslateImage3d
    - Flip2d
    - Flip3d
    - FlipImage2d
    - FlipImage3d
    - TransposeImage2d
    - TransposeImage3d
    - SwapQuadrants
    - Rotate2d
    - Rotate3d
    - RotationGenerator3d
    - Resize2d
    - Resize3d
    - RescaleByFactor
    - RescaleImageByFactor
    - ResampleAffine2d
    - ResampleAffine3d
    - ResampleElastic2d
    - SurfaceUnfolding3d
  - Pattern Recognition
  - - BinaryCorrelation2d
    - CrossCorrelation2d
    - CorrelationByDifference2d
    - CorrelationBySignChange2d
  - Registration
  - - ImagePrealignment3d
    - AffineRegistration
    - ElasticRegistration2d
- Arithmetic And Logic
- - Arithmetical Operations
  - - AbsoluteValue
    - AbsoluteMaximumWithImage
    - ArithmeticOperationWithImage
    - ArithmeticOperationWithValue
    - BlendWithImage
    - BlendWithValue
    - DirectionalBlending2d
    - CombineByMask
    - ImageFormula
    - EigenDecomposition2d
    - EigenDecomposition3d
  - Logical Operations
  - - MaskImage
    - LogicalOperationWithImage
    - LogicalOperationWithValue
    - LogicalNot
    - InvertImage
    - BitShift
- Image Filtering
- - Grayscale Transforms
  - - RescaleIntensity
    - StackRescaleIntensity
    - MatchContrast
    - HistogramEqualization
    - Clahe2d
    - Clahe3d
    - AdaptiveHistogramEqualization
    - ApplyGrayscaleLut
    - BackgroundImage2d
    - RadialBackgroundImage2d
    - ShadingCorrection
    - Exponential
    - Logarithm
    - Square
    - SquareRoot
    - RingArtifactRemoval3d
    - BeamHardeningCorrection3d
  - Color Transforms
  - - ColorToLightness
    - GetColorChannel
    - ColorToGrayscale
    - GrayscaleToColor
    - ColorSpaceConversion
    - ColorAntialiasing2d
    - BayerToRgb2d
    - DecorrelationStretch2d
    - BlendAlphaChannelWithImage
    - BlendAlphaChannelWithValue
  - Smoothing And Denoising
  - - BoxFilter2d
    - BoxFilter3d
    - MedianFilter2d
    - MedianFilter3d
    - GaussianFilter2d
    - GaussianFilter3d
    - ExponentialFilter2d
    - RecursiveExponentialFilter2d
    - RecursiveExponentialFilter3d
    - NonLocalMeansFilter2d
    - NonLocalMeansFilter3d
    - CurvatureDrivenDiffusion
    - BilateralFilter2d
    - BilateralFilter3d
    - MajorityFilter2d
    - MajorityFilter3d
    - SigmaFilter2d
    - SigmaFilter3d
    - Despeckle2d
    - Despeckle3d
    - NagaoFilter2d
    - NagaoFilter3d
    - SnnFilter2d
    - SnnFilter3d
    - FlowInpainting
  - Sharpening
  - - Deblurring2d
    - Delineate2d
    - Delineate3d
    - UnsharpMasking2d
    - UnsharpMasking3d
    - Shade2d
    - RichardsonLucyDeconvolution
  - Texture Filters
  - - MeanFilter2d
    - MeanFilter3d
    - VarianceFilter2d
    - VarianceFilter3d
    - SkewnessFilter2d
    - SkewnessFilter3d
    - KurtosisFilter2d
    - KurtosisFilter3d
    - ContrastFilter2d
    - ContrastFilter3d
    - VariationFilter2d
    - VariationFilter3d
    - EnergyFilter2d
    - EnergyFilter3d
    - EntropyFilter2d
    - EntropyFilter3d
    - AutocorrelationFilter
    - LocalAutocorrelationFilter2d
    - ImageCurvature2d
    - ImageCurvature3d
    - StructureEnhancementFilter2d
    - StructureEnhancementFilter3d
    - ScaleSpaceLogFilter2d
    - ScaleSpaceLogFilter3d
  - Frequency Domain
  - - ComplexFft
    - ComplexFftInverse
    - ComplexCenteredFft
    - ComplexCenteredFftInverse
    - CartesianToPolar2d
    - PolarToCartesian2d
    - ConvolutionWithImage
    - ConvolutionWithImage2d
    - RadialFrequencyFilter2d
    - GaborFiltering2d
- Edge Detection
- - Gradient
  - - GradientOperator2d
    - GradientOperator3d
    - VectorToMagnitude2d
    - VectorToMagnitude3d
    - GradientVector2d
    - GradientVector3d
    - GradientMagnitude2d
    - GradientMagnitude3d
    - MorphologicalGradient2d
    - MorphologicalGradient3d
    - RadialGradientCentered2d
    - RadialGradientCentered3d
    - RadialGradientContour2d
    - RadialGradientContour3d
    - RadialGradientLabel2d
    - RadialGradientLabel3d
  - Laplacian
  - - DobFilter2d
    - DobFilter3d
    - MorphologicalLaplacian
    - RecursiveLaplacian2d
    - RecursiveLaplacian3d
  - Other Derivatives
  - - GaussianDerivative2d
    - GaussianDerivative3d
    - GaussianHessianMatrix2d
    - GaussianHessianMatrix3d
    - GaussianGradientTensor2d
    - GaussianGradientTensor3d
  - Edge Marking
  - - ImageLocalMaxima2d
    - ImageLocalMaxima3d
    - RidgeDetection
    - ZeroCrossings2d
    - DijkstraShortestPath2d
    - EigenvaluesToStructureness2d
    - EigenvaluesToStructureness3d
    - TensorVoting2d
    - CannyEdgeDetector2d
    - CannyEdgeDetector3d
- Image Segmentation
- - Binarization
  - - Thresholding
    - ThresholdingByCriterion
    - AutoThresholdingBright
    - AutoThresholdingDark
    - ColorThresholding
    - TopHat
    - FeatureAdaptiveThresholding
    - AdaptiveThresholding2d
    - AdaptiveThresholding3d
    - HysteresisThresholding
  - Labeling
  - - Labeling2d
    - Labeling3d
    - ReorderLabels
    - AssignLabel
    - AddObjectToLabel
    - GroupCloseLabelsl2d
  - Feature Selection
  - - KillBorder2d
    - KillBorder3d
    - RemoveSmallSpots
    - ObjectBoundaries
    - BinarySmoothing2d
    - BinarySmoothing3d
    - LabelInterfaces
  - Separating And Filling
  - - FillHoles2d
    - FillHoles3d
    - RemoveSmallHoles
    - FillImageBorder3d
    - ExpandLabelBoundaries
    - SeparateObjects
    - HExtremaWatershed
    - SeparateObjectsByBlock
    - HExtremaWatershedByBlock
    - ConvexHull2d
  - Region Growing
  - - MarkerBasedWatershed2d
    - MarkerBasedWatershed3d
    - MarkerBasedWatershedByBlock
    - MarkerBasedWatershedBasinsByBlock
    - ExpandLabelsOnBackground
    - FloodFillThreshold2d
    - FloodFillThreshold3d
    - Waterpixel
  - Computational Geometry
  - - PolylineResampler2d
    - PolylineResampler3d
    - PolylineExtrusion3d
    - SurfaceFitting3d
- Mathematical Morphology
- - Erosion And Dilation
  - - Erosion2d
    - Erosion3d
    - Dilation2d
    - Dilation3d
    - ErosionDisk2d
    - ErosionDisk3d
    - ErosionBall3d
    - DilationDisk2d
    - DilationDisk3d
    - DilationBall3d
    - ErosionLine2d
    - ErosionLine3d
    - DilationLine2d
    - DilationLine3d
    - ErosionColor2d
    - DilationColor2d
    - SelectiveErosion2d
    - SelectiveErosion3d
    - SelectiveDilation2d
    - SelectiveDilation3d
  - Opening And Closing
  - - Opening2d
    - Opening3d
    - Closing2d
    - Closing3d
    - OpeningDisk2d
    - OpeningDisk3d
    - OpeningBall3d
    - ClosingDisk2d
    - ClosingDisk3d
    - ClosingBall3d
    - OpeningLine2d
    - OpeningLine3d
    - ClosingLine2d
    - ClosingLine3d
    - OpeningLineMaximum
    - ClosingLineMinimum
    - OpeningColor2d
    - ClosingColor2d
    - OpeningByReconstruction2d
    - OpeningByReconstruction3d
    - ClosingByReconstruction2d
    - ClosingByReconstruction3d
    - OpeningDiskByReconstruction2d
    - OpeningBallByReconstruction3d
    - ClosingDiskByReconstruction2d
    - ClosingBallByReconstruction3d
    - SelectiveOpening2d
    - SelectiveOpening3d
    - SelectiveClosing2d
    - SelectiveClosing3d
  - Hit Or Miss And Skeleton
  - - Skeleton
    - Centerline3d
    - InfluenceZones
    - Centroid2d
    - EndPoints2d
    - EndPoints3d
    - Pruning2d
    - Pruning3d
    - IsolatedPoints2d
    - IsolatedPoints3d
    - TriplePoints2d
    - InteriorPoints2d
    - ApplyMorphologicalLut2d
    - ApplyMorphologicalLut3d
  - Geodesic Transformations
  - - ReconstructionFromMarkers2d
    - ReconstructionFromMarkers3d
    - GrayscaleReconstruction2d
    - GrayscaleReconstruction3d
    - GrayscaleFillHoles2d
    - GrayscaleFillHoles3d
    - HExtrema2d
    - HExtrema3d
    - RegionalExtrema2d
    - RegionalExtrema3d
    - UltimateErosion
  - Distance Maps
  - - DistanceMap2d
    - DistanceMap3d
    - EuclideanDistanceMap3d
    - EuclideanDistanceMap2d
    - GeodesicDistanceMap
    - ClosestBoundaryPoints2d
    - ClosestBoundaryPoints3d
    - TimeMap
    - LocalThicknessMap3d
    - GeodesicPropagation2d
    - GeodesicMaxima
    - GeodesicMinima
- Image Analysis
- - Image Measurements
  - - BinaryAnalysis
    - Area2d
    - Area3d
    - IntensityIntegral2d
    - IntensityIntegral3d
    - ObjectCount
    - DistanceMean2d
    - EulerNumber2d
    - EulerNumber3d
    - FractalDimension
    - CurvatureIntegrals3d
  - Image Statistics
  - - IntensityExtrema
    - IntensityStatistics
    - IntensityMaskedStatistics
    - IntensityHistogram
    - IntensityBinHistogram
    - AutoThresholdingValue
    - CompareImage
    - CompareValue
    - SimilarityMetricValue
    - SsimValue2d
    - SsimValue3d
    - RegionSimilarity
    - RadialIntensityProfile2d
    - RadialIntensityProfile3d
    - CylindricalIntensityProfile3d
    - RadialAutocorrelationProfile
    - Cooccurrence2d
    - MeasureGaussianNoise
    - LocalMaxima2d
    - LocalMaxima3d
    - PeakExtractor
    - LocalDensityMap2d
    - LocalDensityMap3d
    - SegmentationMetrics
  - Individual Measurements
  - - VolumeFractionByLabel
    - LabelCountByRegion
    - VolumeFractionByRegion
    - LabelAnalysis
    - LabelFiltering
    - LabelFilteringAnalysis
    - FilterAnalysis
    - MeasurementToImage
    - FilterByMeasurement
    - SieveLabeling
  - Moments And Orientations
  - - MomentsOfInertia2d
    - MomentsOfInertia3d
    - InertiaMoment2d
    - Eccentricity2d
    - OrientationMapFourier3d
    - OrientationMatchingFourier3d
  - Morphometry
  - - ObjectVolume
    - TotalImageVolume
    - ObjectBoundaryArea
    - TotalImageBoundaryArea
    - AverageObjectAreaPerSlice3d
    - AverageObjectCountPerSlice3d
    - ObjectImageRatio
    - ObjectSpecificSurface
    - ObjectSurfaceDensity
    - PorosityPercentage3d
    - FragmentationIndex
    - StructureModelIndex3d
    - AverageObjectThickness3d
    - AverageSpaceThickness3d
    - ObjectLinearDensity3d
    - DegreeOfAnisotropy
  - Propagation
  - - AxisPropagationBinary3d
    - AxisPropagationBinaryWithSeeds3d
    - AxisPropagationLabel3d
    - AxisPropagationLabelWithSeeds3d
    - AxisPropagationDistance3d
    - EstimateShortestPath3d
    - PercolationThreshold3d
    - AxisConnectivity3d
    - CentroidPathTortuosity3d
- Machine Learning
- - Classification
  - - AutoSegmentation3Phases
    - AutoIntensityClassification
    - SupervisedTextureClassification2d
    - SupervisedTextureClassification3d
    - TextureClassificationCreate
    - TextureClassificationTrain
    - TextureClassificationApply
  - Deep learning
  - - OnnxPredictionFiltering2d
    - OnnxPredictionFiltering3d
    - OnnxPredictionSegmentation2d
    - OnnxPredictionSegmentation3d
    - OnnxPredictionTwoOutputs2d
    - OnnxPredictionTwoOutputs3d
- Business Application
- - Dental
  - - DentalWallSegmentation3d
    - DentalMeshExtraction3d
    - DentalUnfolding3d
- IO
- - Image Data
  - - ReadVipImage
    - WriteVipImage
  - Algebraic Data
  - - ReadArrayXd
    - ReadArrayXi64
    - WriteArrayXd
    - WriteArrayXi64
  - Model
  - - ReadOnnxModel
- CUDA
- - Geometry And Matching
  - - CudaCrossCorrelation2d
    - CudaTemplateMatching3d
  - Image Filtering
  - - CudaBoxFilter2d
    - CudaMedianFilter2d
    - CudaGaussianFilter3d
    - CudaAdaptiveManifoldNlmFilter
  - Mathematical Morphology
  - - CudaErosion2d
    - CudaDilation2d
    - CudaOpening2d
    - CudaClosing2d
- Utilities
- Initialization
- Processing
- Syntax Check
- Visualization
- Data Object
- Image Data
- Kernels
- - MorphologicalKernel2d
  - MorphologicalKernel3d
  - MorphologicalLut2d
  - MorphologicalLut3d
- Model
- - TextureClassificationModel
  - OnnxModel
- Global Measurements
- - Image Measurements
  - - Area2dMsr
    - Area3dMsr
    - IntensityIntegral2dMsr
    - IntensityIntegral3dMsr
    - ObjectCountMsr
    - DistanceMeanMsr
    - Euler2dMsr
    - Euler3dMsr
    - FractalMsr
    - CurvatureIntegralsMsr
  - Image Statistics
  - - IntensityExtremaMsr
    - StatisticsMsr
    - IntensityHistogramMsr
    - IntensityBinHistogramMsr
    - CompareMsr
    - SimilarityMetricValueMsr
    - SsimValueMsr
    - RegionSimilarityMsr
    - SegmentationMetricsObjectMsr
    - SegmentationMetricsImageMsr
    - CylindricalIntensityProfileMsr
    - RadialIntensityProfileMsr
    - CorrelationMsr
    - CoocurrrenceMsr
    - GaussianNoiseMsr
    - LocalMaximaMsr
    - PeakExtractorMsr
  - Individual Measurements
  - - VolumeFractionByLabelMsr
    - LabelCountByRegionMsr
    - VolumeFractionByRegionMsr
  - Moments And Orientations
  - - MomentsOfInertia2dMsr
    - MomentsOfInertia3dMsr
    - MeanInertiaMomentMsr
    - Eccentricity2dMsr
    - LocalOrientation3dMsr
  - Morphometry
  - - ObjectVolumeMsr
    - ImageVolumeMsr
    - ObjectBoundaryAreaMsr
    - ImageBoundaryAreaMsr
    - AverageObjectAreaPerSliceMsr
    - AverageObjectCountPerSliceMsr
    - ObjectImageRatioMsr
    - ObjectSpecificSurfaceMsr
    - ObjectSurfaceDensityMsr
    - PorosityPercentageMsr
    - FragmentationMsr
    - StructureModelIndexMsr
    - AverageObjectThicknessMsr
    - AverageSpaceThicknessMsr
    - ObjectLinearDensityMsr
    - AnisotropyDegreeMsr
  - Propagation
  - - AxisPropagationBinary3dMsr
    - AxisPropagationLabel3dMsr
    - AxisPropagationDistance3dMsr
    - PercolationThreshold3dMsr
    - CentroidTortuosity3dMsr
  - Geometry And Matching
  - - CrossCorrelation2dMsr
  - Edge Detection
  - - CannyEdgeDetectorMsr
  - Image Segmentation
  - - AutoThresholdingMsr
    - AutoSegmentation3PhasesMsr
  - Mathematical Morphology
  - - ApplyMorphologicalLutMsr
- Analysis Measurements
- - AnalysisMsr
  - Measurement
  - Native Measurements
  - - Geometry
    - Feret
    - Intensity
    - Histogram
    - Inertia
    - Locate
    - Segment
    - Cooccurrence
  - CustomMeasurement
  - MeasurementAttributes
  - - Quantile
    - Histogram
    - Feret2d
    - Feret3d
    - NeighborCount
    - Cooccurrence
    - Breadth3d
  - MeasurementGroup
- Measurement Information
- - FieldInformation
  - CustomMeasurementInfo
- CUDA
- - CudaContext
- User Guide
- First Steps
- - Hello ImageDev
  - Initialize ImageDev
- Image Management
- - Create 2D Image
  - Create 3D Image
  - Data Transfer
- Standard Processing
- - Denoising
  - Thresholding
- Image Analysis
- - Global Analysis
  - Label Analysis
  - Measurement Browsing
  - Measurement Group
  - Custom Analysis
- Advanced Processing
- - Algorithm Tracking
- Typical Use Cases
- - Particle Analysis
  - Pore Analysis

# Image Data

This group contains functions to load and save images that can be processed or returned by any ImageDev algorithm.

- ReadVipImage: Loads an image that has been generated and saved with ImageDev.
- WriteVipImage: Saves any image that has been generated with ImageDev on disk.

## VIP file format

The VIP format is an image file format, especially designed for managing any ImageDev data. It is a raw file format organized as follows: \begin{array}{|l|l|l|l|} \hline \textbf{Field} & \textbf{Size (bytes)} & \textbf{Type} & \textbf{Description} \\ \hline \text{Magic Number} & 4 & \text{4 character string} & \text{The VIP format identifier: "VIPI"} \\ \hline \text{Version} & 4 & \text{Unsigned long} & \text{The VIP format version (generally 2)} \\ \hline \text{Header Size} & 4 & \text{Unsigned long} & \text{The header size HS, in bytes} \\ \hline \text{Header} & \text{HS} & \text{Header structure} & \text{The header structure (more information below)} \\ \hline \text{Data} & \text{} & \text{} & \text{The image data (more information below)} \\ \hline \end{array}

### VIP header organization

The VIP header contains the following information: \begin{array}{|l|l|l|l|} \hline \textbf{Field} & \textbf{Size (bytes)} & \textbf{Type} & \textbf{Description} \\ \hline \text{Data Type} & 4 & \text{Unsigned long} & \text{Flag indicating the pixel data type} \\ \hline \text{Element Type} & 4 & \text{Unsigned long} & \text{Flag indicating the element type; from version 2} \\ \hline \text{Is Binary} & 1 & \text{Unsigned char} & \text{The image is binary if not equal to 0} \\ \hline \text{Is Label} & 1 & \text{Unsigned char} & \text{The image is label if not equal to 0} \\ \hline \text{Size X} & 4 & \text{Unsigned long} & \text{Number of elements of the X dimension} \\ \hline \text{Size Y} & 4 & \text{Unsigned long} & \text{Number of elements of the Y dimension} \\ \hline \text{Size C} & 4 & \text{Unsigned long} & \text{Number of spectral channels} \\ \hline \text{Size Z} & 4 & \text{Unsigned long} & \text{Number of elements of the Z dimension} \\ \hline \text{Size T} & 4 & \text{Unsigned long} & \text{Number of elements for image sequence}\\ \hline \text{Calibration X} & 60 & \text{Calibration structure} & \text{The calibration information of the X dimension (spacing, unit) } \\ \hline \text{Calibration Y} & 60 & \text{Calibration structure} & \text{The calibration information of the Y dimension (spacing, unit) } \\ \hline \text{Calibration C} & 60 & \text{Calibration structure} & \text{The calibration information of the spectral dimension (spacing, unit) } \\ \hline \text{Calibration Z} & 60 & \text{Calibration structure} & \text{The calibration information of the X dimension (spacing, unit) } \\ \hline \text{Calibration T} & 60 & \text{Calibration structure} & \text{The calibration information of the sequence dimension (spacing, unit) } \\ \hline \text{Color interpretation} & 4 & \text{Unsigned long} & \text{Flag indicating the color interpretation; from version 3} \\ \hline \text{Origin X} & 8 & \text{Double} & \text{Origin of the X dimension; from version 4} \\ \hline \text{Origin Y} & 8 & \text{Double} & \text{Origin of the Y dimension; from version 4} \\ \hline \text{Origin C} & 8 & \text{Double} & \text{Origin of spectral channels; from version 4} \\ \hline \text{Origin Z} & 8 & \text{Double} & \text{Origin of the Z dimension; from version 4} \\ \hline \text{Origin T} & 8 & \text{Double} & \text{Origin for image sequence; from version 4}\\ \hline \text{Spatial directions} & 72 & \text{Double[3]} & \text{Spatial directions of the spatial axis system; from version 5} \\ \hline \end{array}

#### Data type

This flag indicates the data type of all image element (pixels or voxels). \begin{array}{|l|l|l|} \hline \textbf{Name} & \textbf{Value} & \textbf{Description} \\ \hline \text{UINT8} & 0 & \text{8-bit unsigned integer} \\ \hline \text{UINT16} & 1 & \text{16-bit unsigned integer} \\ \hline \text{UINT32} & 2 & \text{32-bit unsigned integer} \\ \hline \text{INT8} & 4 & \text{8-bit signed integer} \\ \hline \text{INT16} & 5 & \text{16-bit signed integer} \\ \hline \text{INT32} & 6 & \text{32-bit signed integer} \\ \hline \text{FLOAT32} & 8 & \text{32-bit real floating-point} \\ \hline \text{FLOAT64} & 9 & \text{64-bit real floating-point} \\ \hline \text{COMPLEX_FLOAT32} & 10 & \text{32-bit complex floating-point} \\ \hline \text{COMPLEX_FLOAT64} & 11 & \text{64-bit complex floating-point} \\ \hline \end{array}

#### Element type

The element type flag indicates the type of mathematical dimension associated with each image element. \begin{array}{|l|l|l|} \hline \textbf{Name} & \textbf{Value} & \textbf{Description} \\ \hline \text{SINGLE} & 0 & \text{Single scalar value} \\ \hline \text{VECTOR_2} & 16 & \text{2D vector, generally representing X and Y coordinates of a vector field} \\ \hline \text{VECTOR_3} & 32 & \text{3D vector, generally representing X, Y, and Z coordinates of a vector field} \\ \hline \text{MATRIX_2X2_SYM} & 256 & \text{2x2 symmetric matrix, i.e., 3 elements, generally representing a 2D tensor field} \\ \hline \text{MATRIX_3X3_SYM} & 512 & \text{3x3 symmetric matrix, i.e., 6 elements, generally representing a 3D tensor field} \\ \hline \end{array}

#### Dimensional calibration

Each dimension of a VIP image has a calibration representing the data in world coordinates along this dimension. This information is set in a calibration structure organized as follows: \begin{array}{|l|l|l|l|} \hline \textbf{Field} & \textbf{Size (bytes)} & \textbf{Type} & \textbf{Description} \\ \hline \text{Image Size} & 4 & \text{Unsigned long} & \text{A known length along the related dimension in image units; for example, pixels} \\ \hline \text{WCS Size} & 8 & \text{Double} & \text{The size corresponding to the image size in the world coordinate system} \\ \hline \text{Unit} & 48 & \text{48 character string} & \text{The unit of the world coordinate system, until 48 characters} \\ \hline \end{array} For instance, if the calibration attached to the X axis of a 2D image gives:

- Image Size = 120
- WCS Size = 240
- Unit = "nm"

it means that along the horizontal axis, 120 pixels correspond to 240 nanometers (that is, 1 pixel = 2 nm).

#### Color interpretation

The color interpretation flag indicates how to interpret the color images. \begin{array}{|l|l|l|} \hline \textbf{Name} & \textbf{Value} & \textbf{Description} \\ \hline \text{UNKNOWN} & 0 & \text{Unknown} \\ \hline \text{RGB} & 1 & \text{Red, Green, Blue} \\ \hline \text{HSL} & 2 & \text{Hue, Saturation, Lightness} \\ \hline \text{YIQ} & 3 & \text{Brightness, In-phase, Quadrature (NTSC)} \\ \hline \text{NRGB} & 4 & \text{RGB color with chromaticity coordinates} \\ \hline \end{array}

#### Spatial directions

Describes a spatial axis system, with direction vectors describing the three axes.
Axes are defined in a right hand system, so the third direction can be computed from the first two. This information is set in a calibration structure organized as follows: \begin{array}{|l|l|l|l|} \hline \textbf{Field} & \textbf{Size (bytes)} & \textbf{Type} & \textbf{Description} \\ \hline \text{Column direction} & 24 & \text{Double[3]} & \text{The direction vector following the column dimension (X)} \\ \hline \text{Row direction} & 24 & \text{Double[3]} & \text{The direction vector following the row dimension (Y)} \\ \hline \text{Slice direction} & 24 & \text{Double[3]} & \text{The direction vector following the slice dimension (Z)} \\ \hline \end{array}

### VIP data organization

The VIP format theoritically supports up to 6 dimensions: the X, Y, and Z axis of a volume, channels of a spectral image, time steps of an image sequence, and the vectoriel information given by the element type. The last dimension, managing vector or matrix fields, is interlaced in the data format. Other information is non-interlaced and hierarchized as follows:

- For each time step of a sequence, a 3D image is saved. A 3D image is stored by saving all XY slices.
- For each slice, a spectral image is saved. A spectral image is stored by saving all channels.
- For each channel, an XY grayscale slice is saved.

© 2025 Thermo Fisher Scientific Inc. All rights reserved.