Hello,
I am trying to use LearnCalibrationPoints to calibrate an image. Here is a click handler for a Calibrate button.
***********************************************************************************************************************
Private Sub cmdCal_Click()
Dim img As New CWIMAQControlsLib.CWIMAQImage
Dim calPoints As New CWIMAQControlsLib.CWIMAQCalibrationPoints
Dim realWorldCoords As New CWIMAQControlsLib.CWIMAQPoints
Dim pixelCoords As New CWIMAQControlsLib.CWIMAQPoints
Dim calOpts As New CWIMAQControlsLib.CWIMAQLearnCalibrationOptions
Dim score As Single
Dim rVal As Long
Dim report As New CWIMAQControlsLib.CWIMAQCoordinatesReport
Dim coordsValid
Dim j
On Error GoTo OOPS
'Set up the learn calibration options
With calOpts
' .CalibrationMethod = cwimaqNonlinearCalibration
.CalibrationMethod = cwimaqPerspectiveCalibration
.CorrectionRegionMode = cwimaqFullImage
' .CorrectionScalingMode = cwimaqScaleToPreserveArea
.CorrectionScalingMode = cwimaqScaleToFit
.LearnCorrectionTable = True
.LearnErrorMap = False
.CalibrationAxisInfo.AxisOrientation = cwimaqAxisOrientationDirect
End With
Debug.Print calOpts.CalibrationAxisInfo.AxisOrientation
calPoints.Unit = cwimaqCalUnitMillimeter
calPoints.RealWorldCoordinates.Initialize Array(0#, 0.6, 0#, 0.6), Array(0#, 0#, 0.4, 0.4)
calPoints.PixelCoordinates.Initialize Array(156.37, 467.45, 169.51, 480.11), Array(337.9, 356.66, 129.62, 148.82)
rVal = CWIMAQVision1.Copy(CWIMAQ1.Images(1), img)
Debug.Print rVal
CWIMAQViewer1.Detach
score = 0#
rVal = CWIMAQVision1.LearnCalibrationPoints(img, calPoints, calOpts, score)
Debug.Print score, rVal
rVal = CWIMAQVision1.WriteImageAndVisionInfo(img, App.Path & "\calInfo.png")
Debug.Print rVal
realWorldCoords.Initialize Array(0#, 0.6, 0#, 0.6), Array(0#, 0#, 0.4, 0.4)
CWIMAQVision1.ConvertRealWorldToPixelCoordinates img, realWorldCoords, report
Debug.Print report.Coordinates.Count
coordsValid = report.CoordinatesValid
For j = 1 To report.Coordinates.Count
If coordsValid(j - 1) Then
Debug.Print j, report.Coordinates(j).X, report.Coordinates(j).Y
End If
Next
pixelCoords.Initialize Array(156.37, 467.45, 169.51, 480.11), Array(337.9, 356.66, 129.62, 148.82)
CWIMAQVision1.ConvertPixelToRealWorldCoordinates img, pixelCoords, report
Debug.Print report.Coordinates.Count
coordsValid = report.CoordinatesValid
For j = 1 To report.Coordinates.Count
If coordsValid(j - 1) Then
Debug.Print j, report.Coordinates(j).X, report.Coordinates(j).Y
End If
Next
' CWIMAQViewer1.Attach img
Exit Sub
OOPS:
Call ShowError(Me.Name & ".cmdCal_Click")
End Sub
***********************************************************************************************************************
Running the code produces this output.
***********************************************************************************************************************
0
0
1000 0
0
4
2 311.1198 19.4995
4 298.2089 227.2453
4
1 0.3409932 0.6281503
2 0.9409932 0.6281503
3 0.3409932 0.2281503
4 0.9409932 0.2281503
***********************************************************************************************************************
The call to "ConvertRealWorldToPixelCoordinates" can't convert the calibration RealWorld coordinates to the calibration Pixel coordinates. The call to "ConvertPixelToRealWorldCoordinates" messes up in the reverse direction. Does anyone see the problem?
Bill Swartz