CalibrateLinescanCamera
Compute the camera parameters (intrinsic + extrinsic) by evaluating images containing a line calibration pattern. The pattern must consist of alternating vertical and diagonal lines, with each diagonal having the same constant slope: |\|\|...\|. The results are only valid for the x-direction of a line scan image. To get accurate x-values for a transformation into world coordinates, the y-coordinate must be set to half the sensor width and so equal to the cy-value of the camera matrix. For other y-values, the results are approximated and can be inaccurate. The extrinsic parameters are computed for the first image in the array.
Can use available TwinCAT Job Tasks for executing parallel code regions.
Syntax
Definition:
HRESULT CalibrateLinescanCamera(
HRESULT hrPrev,
PVOID pSrcImages,
USHORT nSrcArraySize,
ITcVnContainer* ipPatternLineOrigins,
double fSlopeRad,
TcVnMatrix3x3_LREAL& aCameraMatrix,
TcVnArray8_LREAL& aDistortionCoefficients,
TcVnMatrix3x3_LREAL& aRotationMatrix,
TcVnVector3_LREAL& aTranslationVector,
double& fReprojError,
TcVnCameraCalibrationOptions& stCalibrationOptions,
ETcVnEdgeDirection eEdgeDirection,
float fMinStrength = 100,
ULONG nMaxSearchLines = 11,
ULONG nMaxThickness = 5,
ULONG nSubpixelsIterations = 50,
float fApproxPrecision = 0.001f,
ETcVnEdgeDetectionAlgorithm eAlgorithm = EDA_APPROX_ERF
)
Parameters
Name |
Type |
Default |
Description |
---|---|---|---|
hrPrev |
|
HRESULT indicating the result of previous operations (If SUCCEEDED(hrPrev) equals false, no operation is executed.) | |
pSrcImages |
PVOID |
|
Pointer to an array of 1 or more source images (1 channel). If the images have more than 1 row, each row must contain an image of the same pattern position. |
nSrcArraySize |
USHORT |
|
pSrcImages array size |
ipPatternLineOrigins |
|
X position of the pattern line origins (ContainerType_Vector_REAL, usually same origin for vertical and following diagonal line) | |
fSlopeRad |
double |
|
Slope of the diagonal line in rad (> 0, < PI/2), relative to the vertical line (i.e., 0 would be a vertical line, PI/2 a horizontal line) |
aCameraMatrix |
|
Returns the camera matrix | |
aDistortionCoefficients |
|
Returns the lens distortion coefficients [k1, k2, p1, p2, k3, k4, k5, k6] | |
aRotationMatrix |
|
Returns the rotation matrix | |
aTranslationVector |
|
Returns the translation vector | |
fReprojError |
double& |
|
Returns the reprojection error |
stCalibrationOptions |
|
Calibration options (recommended to set bFixAspectRatio, bFixPrincipalPoint, bZeroTangentDist) | |
eEdgeDirection |
|
Specification of the edge direction to search for | |
fMinStrength |
float |
100 |
Specification of the minimum strength (intensity difference) of the edge to search for |
nMaxSearchLines |
ULONG |
11 |
Maximum number of search lines (equally distributed over the image height, at most 1 searchline per image row) |
nMaxThickness |
ULONG |
5 |
Specification of the maximum thickness of the edge to search for, which means fMinStrength must be reached within nMaxThickness pixels |
nSubpixelsIterations |
ULONG |
50 |
Specifies the number of subpixels (for INTERPOLATION, 10 - 20 usually is sufficient) or maximum number of iterations for optimizing the parameters (for APPROX_ERF and APPROX_GAUSSIAN, 50 - 100 usually is sufficient) |
fApproxPrecision |
float |
0.001f |
Specifies the approximation precision for APPROX_ERF and APPROX_GAUSSIAN (0.001 usually is sufficient, unused for INTERPOLATION) |
eAlgorithm |
EDA_APPROX_ERF |
Selection of the edge detection algorithm |
Required License
TC3 Vision Metrology 2D
System Requirements
Development environment | Target platform | PLC libraries to include |
---|---|---|
TwinCAT V3.1.4024.54 or later | PC or CX (x64) with PL50, e.g. Intel 4-core Atom CPU | Tc3_Vision |