Use my forked assert.InDeltaSlic for testing.

This commit is contained in:
Chih-Wei Chang 2015-02-18 10:44:22 +08:00
parent dcfe2940df
commit 3d399ffcc8
2 changed files with 79 additions and 51 deletions

View file

@ -30,10 +30,10 @@ double GcvCalibrateCamera_(VecPoint3f objPts, VecPoint2f imgPts,
objPtsArr.push_back(objPts); objPtsArr.push_back(objPts);
imgPtsArr.push_back(imgPts); imgPtsArr.push_back(imgPts);
std::cout << "objPts " << std::endl << objPtsArr[0] << std::endl; /* std::cout << "objPts " << std::endl << objPtsArr[0] << std::endl; */
std::cout << "imgPts " << std::endl << imgPtsArr[0] << std::endl; /* std::cout << "imgPts " << std::endl << imgPtsArr[0] << std::endl; */
std::cout << "imgSize " << std::endl << imgSize << std::endl; /* std::cout << "imgSize " << std::endl << imgSize << std::endl; */
std::cout << "Before CamMat " << std::endl << cameraMatrix << std::endl; /* std::cout << "Before CamMat " << std::endl << cameraMatrix << std::endl; */
rtn = cv::calibrateCamera(objPtsArr, imgPtsArr, imgSize, rtn = cv::calibrateCamera(objPtsArr, imgPtsArr, imgSize,
cameraMatrix, distCoeffs, cameraMatrix, distCoeffs,
@ -42,11 +42,11 @@ double GcvCalibrateCamera_(VecPoint3f objPts, VecPoint2f imgPts,
rvec = rvecs[0]; rvec = rvecs[0];
tvec = tvecs[0]; tvec = tvecs[0];
std::cout << "After CamMat " << std::endl << cameraMatrix << std::endl; /* std::cout << "After CamMat " << std::endl << cameraMatrix << std::endl; */
std::cout << "distCoeffs " << std::endl << distCoeffs << std::endl; /* std::cout << "distCoeffs " << std::endl << distCoeffs << std::endl; */
std::cout << "rvec " << std::endl << rvec << std::endl; /* std::cout << "rvec " << std::endl << rvec << std::endl; */
std::cout << "tvec " << std::endl << tvec << std::endl; /* std::cout << "tvec " << std::endl << tvec << std::endl; */
std::cout << "rms " << std::endl << rtn << std::endl; /* std::cout << "rms " << std::endl << rtn << std::endl; */
return rtn; return rtn;
} }

View file

@ -7,71 +7,99 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
) )
const (
DELTA float64 = 1e-5
)
func TestGcvInitCameraMatrix2D(t *testing.T) { func TestGcvInitCameraMatrix2D(t *testing.T) {
objPts := mat64.NewDense(4, 3, []float64{ objPts := mat64.NewDense(10, 3, []float64{
0, 25, 0, -1.482676, -1.419348, 1.166475,
0, -25, 0, -0.043819, -0.729445, 1.212821,
-47, 25, 0, 0.960825, 1.147328, 0.485541,
-47, -25, 0, 1.738245, 0.597865, 1.026016,
-0.430206, -1.281281, 0.870726,
-1.627323, -2.203264, -0.381758,
0.166347, -0.571246, 0.428893,
0.376266, 0.213996, -0.299131,
-0.226950, 0.942377, -0.899869,
-1.148912, 0.093725, 0.634745,
}) })
imgPts := mat64.NewDense(4, 2, []float64{ imgPts := mat64.NewDense(10, 2, []float64{
1136.4140625, 1041.89208984, -0.384281, -0.299055,
1845.33190918, 671.39581299, 0.361833, 0.087737,
302.73373413, 634.79998779, 1.370253, 1.753933,
1051.46154785, 352.76107788, 1.421390, 0.853312,
0.107177, -0.443076,
3.773328, 5.437829,
0.624914, -0.280949,
-0.825577, -0.245594,
0.631444, -0.340257,
-0.647580, 0.502113,
}) })
camMat := GcvInitCameraMatrix2D(objPts, imgPts) camMat := GcvInitCameraMatrix2D(objPts, imgPts)
assert.Equal(t, camMat.Row(nil, 0), []float64{4828.129063751587, 0, 959.5}) assert.InDeltaSlice(t, []float64{1.47219772e+03, 0.00000000e+00, 9.59500000e+02},
assert.Equal(t, camMat.Row(nil, 1), []float64{0, 4828.129063751587, 539.5}) camMat.Row(nil, 0), DELTA)
assert.Equal(t, camMat.Row(nil, 2), []float64{0, 0, 1}) assert.InDeltaSlice(t, []float64{0.00000000e+00, 1.47219772e+03, 5.39500000e+02},
camMat.Row(nil, 1), DELTA)
assert.InDeltaSlice(t, []float64{0.00000000e+00, 0.00000000e+00, 1.00000000e+00},
camMat.Row(nil, 2), DELTA)
} }
func TestGcvCalibrateCamera(t *testing.T) { func TestGcvCalibrateCamera(t *testing.T) {
objPts := mat64.NewDense(4, 3, []float64{ objPts := mat64.NewDense(10, 3, []float64{
0, 25, 0, -1.482676, -1.419348, 1.166475,
0, -25, 0, -0.043819, -0.729445, 1.212821,
-47, 25, 0, 0.960825, 1.147328, 0.485541,
-47, -25, 0, 1.738245, 0.597865, 1.026016,
-0.430206, -1.281281, 0.870726,
-1.627323, -2.203264, -0.381758,
0.166347, -0.571246, 0.428893,
0.376266, 0.213996, -0.299131,
-0.226950, 0.942377, -0.899869,
-1.148912, 0.093725, 0.634745,
}) })
imgPts := mat64.NewDense(4, 2, []float64{ imgPts := mat64.NewDense(10, 2, []float64{
1136.4140625, 1041.89208984, -0.384281, -0.299055,
1845.33190918, 671.39581299, 0.361833, 0.087737,
302.73373413, 634.79998779, 1.370253, 1.753933,
1051.46154785, 352.76107788, 1.421390, 0.853312,
0.107177, -0.443076,
3.773328, 5.437829,
0.624914, -0.280949,
-0.825577, -0.245594,
0.631444, -0.340257,
-0.647580, 0.502113,
}) })
camMat := GcvInitCameraMatrix2D(objPts, imgPts) camMat := GcvInitCameraMatrix2D(objPts, imgPts)
camMat, rvec, tvec := GcvCalibrateCamera(objPts, imgPts, camMat) camMat, rvec, tvec := GcvCalibrateCamera(objPts, imgPts, camMat)
assert.Equal(t, camMat.Row(nil, 0), []float64{5.47022369e+03, 0.00000000e+00, 9.59500000e+02}) // stackedMat := *mat64.NewDense(0, 0, nil)
assert.Equal(t, camMat.Row(nil, 1), []float64{0.00000000e+00, 5.47022369e+03, 5.39500000e+02}) // stackedMat.Augment(GcvRodrigues(rvec), tvec)
assert.Equal(t, camMat.Row(nil, 2), []float64{0.00000000e+00, 0.00000000e+00, 1.00000000e+00})
assert.Equal(t, rvec.Col(nil, 0), []float64{-0.99458984, 0.54674764, -2.69721055}) // camMat.Mul(camMat, &stackedMat)
assert.Equal(t, tvec.Col(nil, 0), []float64{-23.25417757, -12.6155423, -227.64212085})
assert.InDeltaSlice(t, []float64{-46.15296606, 0., 959.5}, camMat.Row(nil, 0), DELTA)
assert.InDeltaSlice(t, []float64{0., -46.15296606, 539.5}, camMat.Row(nil, 1), DELTA)
assert.InDeltaSlice(t, []float64{0., 0., 1.}, camMat.Row(nil, 2), DELTA)
assert.InDeltaSlice(t, []float64{-0.98405029, -0.93443411, -0.26304667}, rvec.Col(nil, 0), DELTA)
assert.InDeltaSlice(t, []float64{0.6804739, 0.47530207, -0.04833094}, tvec.Col(nil, 0), DELTA)
} }
func TestGcvRodrigues(t *testing.T) { func TestGcvRodrigues(t *testing.T) {
rvec := mat64.NewDense(3, 1, []float64{ rvec := mat64.NewDense(3, 1, []float64{
-0.99458984, -0.98405029,
0.54674764, -0.93443411,
-2.69721055, -0.26304667,
}) })
rmat := GcvRodrigues(rvec) rmat := GcvRodrigues(rvec)
assert.InDelta(t, rmat.At(0, 0), -0.74853587, 1e-6) assert.InDeltaSlice(t, []float64{0.59922526, 0.57799222, -0.55394411}, rmat.Row(nil, 0), DELTA)
assert.InDelta(t, rmat.At(0, 1), 0.07139127, 1e-6) assert.InDeltaSlice(t, []float64{0.20413818, 0.558743, 0.80382452}, rmat.Row(nil, 1), DELTA)
assert.InDelta(t, rmat.At(0, 2), 0.65923997, 1e-6) assert.InDeltaSlice(t, []float64{0.77411672, -0.5947531, 0.21682264}, rmat.Row(nil, 2), DELTA)
assert.InDelta(t, rmat.At(1, 0), -0.32247419, 1e-6)
assert.InDelta(t, rmat.At(1, 1), -0.90789575, 1e-6)
assert.InDelta(t, rmat.At(1, 2), -0.26783521, 1e-6)
assert.InDelta(t, rmat.At(2, 0), 0.57940008, 1e-6)
assert.InDelta(t, rmat.At(2, 1), -0.41307214, 1e-6)
assert.InDelta(t, rmat.At(2, 2), 0.70261437, 1e-6)
} }