IPSDK 0.2
IPSDK : Image Processing Software Development Kit
Image 3d registration using grey signed featuresSee full documentation
Features3dRegistrationResultgreySignedFeaturesImg3dRegistration (inOriginImg3d,inTargetImg3d,inRegMotionModel3d)
Features3dRegistrationResultgreySignedFeaturesImg3dRegistration (inOriginImg3d,inTargetImg3d,inScaleCandidates,inGradStdDev,inOptGradientGaussianCoverage,inCornerDetectionParams3d,inNbFeatures,inFeaturesDistX,inFeaturesDistY,inInterpolationPolicy,inSamplingBallInfo3d,inRegMotionModel3d,inCorrelationThreshold3d,inOptRegistrationEstimationConfig,outFeatures3dRegistrationResults)
Features3dRegistrationResultgreySignedFeaturesImg3dRegistration (inOriginImg3d,inTargetImg3d)
Features3dRegistrationResultgreySignedFeaturesImg3dRegistration (inOriginImg3d,inTargetImg3d,inGradStdDev,inNbFeatures,inFeaturesDist,outFeatures3dRegistrationResults)
Features3dRegistrationResultgreySignedFeaturesImg3dRegistration (inOriginImg3d,inTargetImg3d,inScaleCandidates)
Features3dRegistrationResultgreySignedFeaturesImg3dRegistration (inOriginImg3d,inTargetImg3d,inScaleCandidates,inGradStdDev,inNbFeatures,inFeaturesDist,outFeatures3dRegistrationResults)

Detailed Description

algorithm allowing registration of 3d images using features associated to grey signature

This algorithm allows to automatically compute motion transform linking two images. Given an origin image $InOriginImg3d$ and a target image $InTargetImg3d$, this algorithm basically allows to automatically compute motion transform linking. We compute transformation allowing to link points of images with following formula :

\[ P_{target}=sR(\chi, \beta, \alpha)P_{origin} + T(T_x, T_y, T_z) \]

with :

The computed transformation can also be of form :

\[ \bar{P}_{target}=H \bar{P}_{origin} \]

in case of homography motion model (ipsdk::imaproc::attr::eRegistrationMotionModel3d::eRMM2d_Homography) with :

This algorithm is composed of three main phasis :

Extraction phasis can be controlled via following parameters : $InOptGradStdDev$, $InOptGradientGaussianCoverage$, $InOptCornerDetectionParams3d$, $InOptNbFeatures$, $InOptFeaturesDistX$, $InOptFeaturesDistY$, $InOptFeaturesDistZ$, $InOptInterpolationPolicy$ and $InOptSamplingBallInfo3d$ (see Extract grey signed features 3d).

Motion transform computation phasis can be controlled via following parameters : $InOptRegMotionModel3d$, $InOptCorrelationThreshold3d$ and $InOptRegistrationEstimationConfig$. Note that in case where $InOptRegMotionModel3d$ parameter is set to ipsdk::imaproc::attr::eRegistrationMotionModel3d::eRMM3d_Similarity or ipsdk::imaproc::attr::eRegistrationMotionModel3d::eRMM3d_Homography, algorithm will iterate on its three main phasis searching for best results adusting used scale for feature extraction (this phasis is not scale invariant see Extract grey signed features 3d). In this case an additional parameter $InOptScaleCandidates$ allows to defined candidates for tested scale factor.

See Image 3d registration using grey signed features for an illustration of this algorithm applied in 2d case.

Example of Python code :

Example imports

import PyIPSDK
import PyIPSDK.IPSDKIPLRegistration as registration

Code Example

# opening of input images
inImg3d1 = PyIPSDK.loadTiffImageFile(inputImgPath1)
inImg3d2 = PyIPSDK.loadTiffImageFile(inputImgPath2)
# computation of motion transform between images
outRegistrationResult = registration.greySignedFeaturesImg3dRegistration(inImg3d1, inImg3d2, PyIPSDK.eRegistrationMotionModel3d.eRMM3d_Similarity)
transformParams = outRegistrationResult.transform.params
# print of results
print("Registration results :")
print("----------------------")
print("Nb original features : " + str(outRegistrationResult.indicators.nbFeatures1))
print("Nb target features : " + str(outRegistrationResult.indicators.nbFeatures2))
print("Nb made pairs : " + str(outRegistrationResult.indicators.nbPairs))
print("Robust estimation status :")
print("--------------------------")
print(outRegistrationResult.indicators.estimationResults.toString())
print("Estimated motion transform :")
print("----------------------------")
print("Rotation (chi, beta, alpha in radians) : {" + str(transformParams[PyIPSDK.Rigid3d.eTP_Chi]) + ", " + str(transformParams[PyIPSDK.Rigid3d.eTP_Beta]) + ", " + str(transformParams[PyIPSDK.Rigid3d.eTP_Alpha]) + "}")
print("Translation : {" + str(transformParams[PyIPSDK.Rigid3d.eTP_Tx]) + ", " + str(transformParams[PyIPSDK.Rigid3d.eTP_Ty]) + ", " + str(transformParams[PyIPSDK.Rigid3d.eTP_Tz]) + "}")

Example of C++ code :

Example informations

Header file

#include <IPSDKIPL/IPSDKIPLRegistration/Processor/GreySignedFeaturesImg3dRegistration/GreySignedFeaturesImg3dRegistration.h>

Code Example

// Load the input images
ImagePtr pInImg1 = loadTiffImageFile(inImgFilePath1);
ImagePtr pInImg2 = loadTiffImageFile(inImgFilePath2);
// computation of motion transform between images
Features3dRegistrationResultPtr pOutRegistrationResult = greySignedFeaturesImg3dRegistration(pInImg1, pInImg2, eRegistrationMotionModel3d::eRMM3d_Similarity);
const RegistrationMotionTransform3d& outTransform = pOutRegistrationResult->getNode<Features3dRegistrationResult::Transform>();