添加边框参数整合

pull/1/head
lidapeng 5 years ago
parent c41495efde
commit 4be832f0d5

@ -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);
}

@ -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);
}
}
}

@ -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());
}

Loading…
Cancel
Save