func GcvInitCameraMatrix2D(objPts, imgPts *mat64.Dense, dims [2]int,
	aspectRatio float64) (camMat *mat64.Dense) {

	objDim, nObjPts := objPts.Dims()
	imgDim, nImgPts := imgPts.Dims()

	if objDim != 3 || imgDim != 2 || nObjPts != nImgPts {
		panic("Invalid dimensions for objPts and imgPts")
	}

	objPtsVec := NewGcvPoint3f32Vector(int64(nObjPts))
	imgPtsVec := NewGcvPoint2f32Vector(int64(nObjPts))

	for j := 0; j < nObjPts; j++ {
		objPtsVec.Set(j, NewGcvPoint3f32(mat64.Col(nil, j, objPts)...))
	}

	for j := 0; j < nObjPts; j++ {
		imgPtsVec.Set(j, NewGcvPoint2f32(mat64.Col(nil, j, imgPts)...))
	}

	_imgSize := NewGcvSize2i(dims[0], dims[1])

	camMat = GcvMatToMat64(GcvInitCameraMatrix2D_(
		objPtsVec, imgPtsVec, _imgSize, aspectRatio))
	return camMat
}
func GcvInitCameraMatrix2D(objPts, imgPts *mat64.Dense, dims [2]int,
	aspectRatio float64) (camMat *mat64.Dense) {

	objDim, nObjPts := objPts.Dims()
	imgDim, nImgPts := imgPts.Dims()

	if objDim != 3 || imgDim != 2 || nObjPts != nImgPts {
		panic("Invalid dimensions for objPts and imgPts")
	}

	objPtsVec := NewGcvPoint3f32Vector(int64(nObjPts))
	imgPtsVec := NewGcvPoint2f32Vector(int64(nObjPts))

	for j := 0; j < nObjPts; j++ {
		objPtsVec.Set(j, NewGcvPoint3f32(mat64.Col(nil, j, objPts)...))
	}

	for j := 0; j < nObjPts; j++ {
		imgPtsVec.Set(j, NewGcvPoint2f32(mat64.Col(nil, j, imgPts)...))
	}

	_imgSize := NewGcvSize2i(dims[0], dims[1])

	camMat = GcvMatToMat64(GcvInitCameraMatrix2D_(
		objPtsVec, imgPtsVec, _imgSize, aspectRatio))
	return camMat
}
func GcvInitCameraMatrix2D ( objPts , imgPts * mat64 . Dense , dims [ 2 ] int , aspectRatio float64 ) ( camMat * mat64 . Dense ) { objDim , nObjPts := objPts . Dims ( ) imgDim , nImgPts := imgPts . Dims ( ) if objDim != 3 || imgDim != 2 || nObjPts != nImgPts { panic ( " " ) } objPtsVec := NewGcvPoint3f32Vector ( int64 ( nObjPts ) ) imgPtsVec := NewGcvPoint2f32Vector ( int64 ( nObjPts ) ) for j := 0 ; j < nObjPts ; j ++ { objPtsVec . Set ( j , NewGcvPoint3f32 ( mat64 . Col ( nil , j , objPts ) ... ) ) } for j := 0 ; j < nObjPts ; j ++ { imgPtsVec . Set ( j , NewGcvPoint2f32 ( mat64 . Col ( nil , j , imgPts ) ... ) ) } _imgSize := NewGcvSize2i ( dims [ 0 ] , dims [ 1 ] ) camMat = GcvMatToMat64 ( GcvInitCameraMatrix2D_ ( objPtsVec , imgPtsVec , _imgSize , aspectRatio ) ) return camMat }
// GcvInitCameraMatrix2D takes one 3-by-N matrix and one 2-by-N Matrix as input.
// Each column in the input matrix represents a point in real world (objPts) or
// in image (imgPts).
// Return: the camera matrix.
GcvInitCameraMatrix2D takes one 3 - by - N matrix and one 2 - by - N Matrix as input . Each column in the input matrix represents a point in real world ( objPts ) or in image ( imgPts ) . Return : the camera matrix .