public CvMat getN0() { n = getN(); if (surfaceTransformer == null) { return n; } // remove projective effect of the current n, // leaving only the effect of n0 camera.getFrontoParallelH(surfaceParameters.get(), n, R); cvInvert(surfaceParameters.getH(), H); cvMatMul(H, surfaceTransformer.getK2(), H); cvMatMul(H, R, H); cvMatMul(surfaceTransformer.getInvK1(), H, H); JavaCV.HtoRt(H, R, t); // compute n0, as a rotation from the z-axis cvGEMM(R, t, 1, null, 0, t, CV_GEMM_A_T); double scale = 1/t.get(2); n.put(0.0, 0.0, 1.0); cvGEMM(R, n, scale, null, 0, n, 0); return n; }
public CvMat getN() { double[] src = projectorTransformer.getReferencePoints2(); double[] dst = projectorTransformer.getReferencePoints1().clone(); dst[0] = projectorParameters.get(0); dst[2] = projectorParameters.get(1); dst[4] = projectorParameters.get(2); // get plane parameters n, but since we model the target to be // the camera, we have to inverse everything before calling // getPlaneParameters() and reframe the n it returns cvTranspose(projectorTransformer.getR(), R); cvGEMM(R, projectorTransformer.getT(), -1, null, 0, t, 0); JavaCV.getPlaneParameters(src, dst, projectorTransformer.getInvK2(), projectorTransformer.getK1(), R, t, n); double d = 1 + cvDotProduct(n, projectorTransformer.getT()); cvGEMM(R, n, 1/d, null, 0, n, 0); return n; }