/** * Converts a row major matrix into a row major block matrix. * * @param src Original DMatrixRMaj. Not modified. * @param dst Equivalent DMatrixRBlock. Modified. */ public static void convert(DMatrixRMaj src , DMatrixRBlock dst ) { ConvertDMatrixStruct.convert(src,dst); }
/** * Converts a row major block matrix into a row major matrix. * * @param src Original DMatrixRBlock.. Not modified. * @param dst Equivalent DMatrixRMaj. Modified. */ public static DMatrixRMaj convert(DMatrixRBlock src , DMatrixRMaj dst ) { return ConvertDMatrixStruct.convert(src,dst); }
public static DMatrixSparseCSC convert(DMatrixSparseTriplet src , DMatrixSparseCSC dst ) { return convert(src,dst,null); }
@Override protected void setHessian(HessianMath alg, DMatrixRMaj H) { ConvertDMatrixStruct.convert(H, ((HessianMath_DSCC)alg).hessian); } }
@Override protected void setHessian(HessianMath alg, DMatrixRMaj H) { ConvertDMatrixStruct.convert(H,((HessianLeastSquares_DSCC)alg).hessian); } }
public static DMatrixSparseCSC parse_DSCC(String s, int numColumns) { DMatrixRMaj tmp = parse_DDRM(s,numColumns); return ConvertDMatrixStruct.convert(tmp,(DMatrixSparseCSC)null, 0); }
@Override public DMatrixRMaj convertB(DMatrixSparseCSC A) { DMatrixRMaj out = new DMatrixRMaj(A.numRows,A.numCols); ConvertDMatrixStruct.convert(A,out); return out; }
@Override protected DMatrix convert(DMatrixRMaj M) { DMatrixSparseCSC out = new DMatrixSparseCSC(1,1); ConvertDMatrixStruct.convert(M,out); return out; }
@Override public DMatrixSparseCSC convertA(DMatrixRMaj A) { DMatrixSparseCSC out = new DMatrixSparseCSC(A.numRows,A.numCols,1); ConvertDMatrixStruct.convert(A,out); return out; }
@Override public void process(double[] input, DMatrixSparseCSC jacobian) { jacobian.reshape(M,N,N); function.process(input,output0); // Use a triplet initially because it is less expensive to grow DMatrixSparseTriplet tmp = new DMatrixSparseTriplet(M,N,N); for( int i = 0; i < N; i++ ) { double x = input[i]; double h = x != 0 ? differenceScale*Math.abs(x) : differenceScale; // takes in account round off error double temp = x+h; h = temp-x; input[i] = temp; function.process(input,output1); for( int j = 0; j < M; j++ ) { double value = (output1[j] - output0[j])/h; if( Math.abs(value) > zeroTolerance ) tmp.set(j,i,value); } input[i] = x; } ConvertDMatrixStruct.convert(tmp,jacobian); }
@Override public void process(double[] input, DMatrixSparseCSC jacobian) { jacobian.reshape(M,N,N); function.process(input,output0); // Use a triplet initially because it is less expensive to grow DMatrixSparseTriplet tmp = new DMatrixSparseTriplet(M,N,N); for( int i = 0; i < N; i++ ) { double x = input[i]; double h = x != 0 ? differenceScale*Math.abs(x) : differenceScale; // takes in account round off error double temp = x+h; h = temp-x; input[i] = temp; function.process(input,output1); for( int j = 0; j < M; j++ ) { double value = (output1[j] - output0[j])/h; if( Math.abs(value) > zeroTolerance ) tmp.set(j,i,value); } input[i] = x; } ConvertDMatrixStruct.convert(tmp,jacobian); }
public void computeW( Projective P , DMatrix4x4 Q , DMatrixRMaj w_i) { ConvertDMatrixStruct.convert(Q,_Q); convert(P, _P); CommonOps_DDRM.mult(_P,_Q,tmp); CommonOps_DDRM.multTransB(tmp,_P,w_i); CommonOps_DDRM.divide(w_i,w_i.get(2,2)); }
ConvertDMatrixStruct.convert(Q,_Q); nullspace.process(_Q,1,p); CommonOps_DDRM.divide(p,p.get(3));
ConvertDMatrixStruct.convert(R,Rtmp);
/** * Compuets the absolute dual quadratic from the first camera parameters and * plane at infinity * @param p plane at infinity * @param Q (Output) ABQ */ void recomputeQ( DMatrixRMaj p , DMatrix4x4 Q ) { Equation eq = new Equation(); DMatrix3x3 K = new DMatrix3x3(); encodeK(K,0,3,param.data); eq.alias(p,"p",K,"K"); eq.process("w=K*K'"); eq.process("Q=[w , -w*p;-p'*w , p'*w*p]"); DMatrixRMaj _Q = eq.lookupDDRM("Q"); CommonOps_DDRM.divide(_Q, NormOps_DDRM.normF(_Q)); ConvertDMatrixStruct.convert(_Q,Q); }
@Override protected void setHessian(HessianMath alg, DMatrixRMaj H) { int M = 3; int N = H.numCols-M; HessianSchurComplement_DSCC hm = (HessianSchurComplement_DSCC)alg; DMatrixSparseCSC SH = new DMatrixSparseCSC(1,1); ConvertDMatrixStruct.convert(H,SH); hm.A.reshape(M,M); hm.B.reshape(M,N); hm.D.reshape(N,N); CommonOps_DSCC.extract(SH,0,M,0,M,hm.A,0,0); CommonOps_DSCC.extract(SH,0,M,M,M+N,hm.B,0,0); CommonOps_DSCC.extract(SH,M,M+N,M,M+N,hm.D,0,0); }