@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; }
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)); }
uV = ueig.getVectors();
uV = ueig.getVectors();