From 4be832f0d5223c7f231cfc5680367864e5856b3b Mon Sep 17 00:00:00 2001 From: lidapeng Date: Fri, 24 Jan 2020 15:47:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=BE=B9=E6=A1=86=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E6=95=B4=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/wlld/MatrixTools/MatrixOperation.java | 9 +++-- .../wlld/imageRecognition/border/Border.java | 33 ++++++++++++++++--- src/test/java/org/wlld/MatrixTest.java | 4 +-- 3 files changed, 35 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/wlld/MatrixTools/MatrixOperation.java b/src/main/java/org/wlld/MatrixTools/MatrixOperation.java index c72d398..3776366 100644 --- a/src/main/java/org/wlld/MatrixTools/MatrixOperation.java +++ b/src/main/java/org/wlld/MatrixTools/MatrixOperation.java @@ -23,6 +23,7 @@ public class MatrixOperation { } } + //多元线性回归 public static Matrix getLinearRegression(Matrix parameter, Matrix Out) throws Exception { //将参数矩阵转置 Matrix matrix1 = transPosition(parameter); @@ -32,7 +33,7 @@ public class MatrixOperation { Matrix matrix3 = getInverseMatrixs(matrix2); //逆矩阵乘以转置矩阵 Matrix matrix4 = mulMatrix(matrix3, matrix1); - //最后乘以输出矩阵,生成权重矩阵 + //最后乘以输出矩阵,生成权重矩阵并返回 return mulMatrix(matrix4, Out); } @@ -74,16 +75,14 @@ public class MatrixOperation { } } - public static Matrix push(Matrix matrix, double nub) throws Exception {//向一个向量里PUSH一个值 + public static Matrix push(Matrix matrix, double nub, boolean isRow) throws Exception {//向一个向量里PUSH一个值 if (matrix.getX() == 1 || matrix.getY() == 1) { Matrix myMatrix; int nubs; - boolean isRow = true; - if (matrix.getX() == 1) {//行向量 + if (isRow) {//行向量 nubs = matrix.getY() + 1; myMatrix = new Matrix(1, nubs); } else {//列向量 - isRow = false; nubs = matrix.getX() + 1; myMatrix = new Matrix(nubs, 1); } diff --git a/src/main/java/org/wlld/imageRecognition/border/Border.java b/src/main/java/org/wlld/imageRecognition/border/Border.java index 877b3fc..e872b39 100644 --- a/src/main/java/org/wlld/imageRecognition/border/Border.java +++ b/src/main/java/org/wlld/imageRecognition/border/Border.java @@ -3,7 +3,6 @@ package org.wlld.imageRecognition.border; import org.wlld.MatrixTools.Matrix; import org.wlld.MatrixTools.MatrixOperation; import org.wlld.imageRecognition.TempleConfig; -import org.wlld.test.Ma; import org.wlld.tools.ArithUtil; /** @@ -48,7 +47,15 @@ public class Border { height = maxX - minX; width = maxY - minY; BorderBody borderBody = templeConfig.getBorderBodyMap().get(id); - + if (borderBody == null) { + borderBody = new BorderBody(); + } + //拿到参数矩阵 + Matrix matrixX = borderBody.getX(); + Matrix matrixTx = borderBody.getTx(); + Matrix matrixTy = borderBody.getTy(); + Matrix matrixTw = borderBody.getTw(); + Matrix matrixTh = borderBody.getTh(); //多元线性回归的四个输出值 double tx = ArithUtil.div(minX, modelHeight); double ty = ArithUtil.div(minY, modelWidth); @@ -56,8 +63,26 @@ public class Border { double th = Math.log(ArithUtil.div(height, modelHeight)); //进行参数汇集 矩阵转化为行向量 matrix = MatrixOperation.matrixToVector(matrix, true); - //将矩阵的末尾填1 - matrix = MatrixOperation.push(matrix, 1); + //将参数矩阵的末尾填1 + matrix = MatrixOperation.push(matrix, 1, true); + if (matrixX == null) {//如果是第一次直接赋值 + matrixX = matrix; + matrixTx = new Matrix(1, 1); + matrixTy = new Matrix(1, 1); + matrixTw = new Matrix(1, 1); + matrixTh = new Matrix(1, 1); + matrixTx.setNub(0, 0, tx); + matrixTy.setNub(0, 0, ty); + matrixTw.setNub(0, 0, tw); + matrixTh.setNub(0, 0, th); + } else {//将新的参数矩阵添加到原来的末尾 + matrixX = MatrixOperation.pushVector(matrixX, matrix, true); + matrixTx = MatrixOperation.push(matrixTx, tx, false); + matrixTy = MatrixOperation.push(matrixTy, ty, false); + matrixTw = MatrixOperation.push(matrixTw, tw, false); + matrixTh = MatrixOperation.push(matrixTh, th, false); + } + } } diff --git a/src/test/java/org/wlld/MatrixTest.java b/src/test/java/org/wlld/MatrixTest.java index ff1cca1..1a52c9c 100644 --- a/src/test/java/org/wlld/MatrixTest.java +++ b/src/test/java/org/wlld/MatrixTest.java @@ -45,7 +45,7 @@ public class MatrixTest { matrix.setAll(a); matrix2.setAll(b); Matrix matrix1 = MatrixOperation.matrixToVector(matrix, true); - matrix1 = MatrixOperation.push(matrix1, 5); + matrix1 = MatrixOperation.push(matrix1, 5, true); matrix1 = MatrixOperation.pushVector(matrix1, matrix2, true); System.out.println(matrix1.getString()); } @@ -60,7 +60,7 @@ public class MatrixTest { matrix1.setAll(b); matrix1 = MatrixOperation.matrixToVector(matrix1, false); matrix = MatrixOperation.matrixToVector(matrix, false); - matrix = MatrixOperation.push(matrix, 5); + matrix = MatrixOperation.push(matrix, 5, true); matrix = MatrixOperation.pushVector(matrix, matrix1, false); System.out.println(matrix.getString()); }