Measurement Studio for VB6

cancel
Showing results for 
Search instead for 
Did you mean: 

LearnCalibrationPoints question

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

0 Kudos
Message 1 of 1
(6,577 Views)