@Override public String toString(){ String out = "[ \n"; for(int i = 0; i < 2; i ++ ){ out+="\t" + (this.getVectors().get(i, 0)) + ";" + "\n"; } out += "] \n"; out += "[ \n"; for(int i = 0; i < 2; i ++ ){ out+="\t" + Arrays.toString(this.getValues().getArray()[i]) + ";" + "\n" ; } out += "] \n"; return out; }
/** * Construct with Eigen values and vectors. * @param val values * @param vec vectors */ public EigenValueVectorPair(Matrix val, Matrix vec) { this.setValues(val); this.setVectors(vec); }
final Matrix eval = meig.getValues(); final double eval1 = Math.abs(eval.get(0, 0)); final double eval2 = Math.abs(eval.get(1, 1));
return new EigenValueVectorPair(e.getD(), e.getV()); final EigenValueVectorPair ret = new EigenValueVectorPair(val, vec); return ret;
final Matrix eval = meig.getValues(); final double eval1 = Math.abs(eval.get(0, 0)); final double eval2 = Math.abs(eval.get(1, 1));
if (m.getColumnDimension() != 2 || m.getRowDimension() != 2) { final EigenvalueDecomposition e = m.eig(); return new EigenValueVectorPair(e.getD(), e.getV()); return new EigenValueVectorPair(e.getD(), e.getV()); final EigenValueVectorPair ret = new EigenValueVectorPair(val, vec); return ret;
float calcSecondMomentSqrt(AbstractStructureTensorIPD ipd, Pixel p, Matrix Mk) { Matrix M, V, eigVal, Vinv; M = calcSecondMomentMatrix(ipd, p.x, p.y); /* * * M = V * D * V.inv() V has eigenvectors as columns D is a diagonal * Matrix with eigenvalues as elements V.inv() is the inverse of V */ // EigenvalueDecomposition meig = M.eig(); final EigenValueVectorPair meig = MatrixUtils.symmetricEig2x2(M); eigVal = meig.getValues(); V = meig.getVectors(); // V = V.transpose(); Vinv = V.inverse(); final double eval1 = Math.sqrt(eigVal.get(0, 0)); eigVal.set(0, 0, eval1); final double eval2 = Math.sqrt(eigVal.get(1, 1)); eigVal.set(1, 1, eval2); // square root of M Mk.setMatrix(0, 1, 0, 1, V.times(eigVal).times(Vinv)); // return q isotropic measure return (float) (Math.min(eval1, eval2) / Math.max(eval1, eval2)); }
float calcSecondMomentSqrt(AbstractStructureTensorIPD ipd, Pixel p, Matrix Mk) { Matrix M, V, eigVal, Vinv; M = calcSecondMomentMatrix(ipd, p.x, p.y); /* * * M = V * D * V.inv() V has eigenvectors as columns D is a diagonal * Matrix with eigenvalues as elements V.inv() is the inverse of V */ // EigenvalueDecomposition meig = M.eig(); final EigenValueVectorPair meig = MatrixUtils.symmetricEig2x2(M); eigVal = meig.getValues(); V = meig.getVectors(); // V = V.transpose(); Vinv = V.inverse(); final double eval1 = Math.sqrt(eigVal.get(0, 0)); eigVal.set(0, 0, eval1); final double eval2 = Math.sqrt(eigVal.get(1, 1)); eigVal.set(1, 1, eval2); // square root of M Mk.setMatrix(0, 1, 0, 1, V.times(eigVal).times(Vinv)); // return q isotropic measure return (float) (Math.min(eval1, eval2) / Math.max(eval1, eval2)); }
uVal = ueig.getValues(); uV = ueig.getVectors();
uVal = ueig.getValues(); uV = ueig.getVectors();