From 1ab38fc6d8f18413a61ca054962c0bfe255d2017 Mon Sep 17 00:00:00 2001
From: lidapeng <794757862@qq.com>
Date: Thu, 6 Aug 2020 16:50:28 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=9B=BE=E5=83=8F=E7=BC=A9?=
=?UTF-8?q?=E6=94=BEbug?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 2 +-
.../wlld/imageRecognition/Convolution.java | 8 +-
.../org/wlld/imageRecognition/RGBNorm.java | 8 +-
.../segmentation/Watershed.java | 89 ++-----------------
src/test/java/coverTest/FoodTest.java | 30 +++----
5 files changed, 29 insertions(+), 108 deletions(-)
diff --git a/pom.xml b/pom.xml
index 40bb24a..babead1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
com.wlld
easyAi
- 1.0.3
+ 1.1.1
easyAi
diff --git a/src/main/java/org/wlld/imageRecognition/Convolution.java b/src/main/java/org/wlld/imageRecognition/Convolution.java
index 3a9ed5c..1c64628 100644
--- a/src/main/java/org/wlld/imageRecognition/Convolution.java
+++ b/src/main/java/org/wlld/imageRecognition/Convolution.java
@@ -365,11 +365,11 @@ public class Convolution extends Frequency {
int x = xn / size;//求导后矩阵的行数
int y = yn / size;//求导后矩阵的列数
Matrix myMatrix = new Matrix(x, y);//迟化后的矩阵
- for (int i = 0; i < xn - size; i += size) {
- for (int j = 0; j < yn - size; j += size) {
+ for (int i = 0; i <= xn - size; i += size) {
+ for (int j = 0; j <= yn - size; j += size) {
Matrix matrix1 = matrix.getSonOfMatrix(i, j, size, size);
- double maxNub = 0;
- int n = size * size;
+ double maxNub = 0.0;
+ double n = size * size;
double sigma = 0;
for (int t = 0; t < matrix1.getX(); t++) {
for (int k = 0; k < matrix1.getY(); k++) {
diff --git a/src/main/java/org/wlld/imageRecognition/RGBNorm.java b/src/main/java/org/wlld/imageRecognition/RGBNorm.java
index 0beaf1c..f67d74e 100644
--- a/src/main/java/org/wlld/imageRecognition/RGBNorm.java
+++ b/src/main/java/org/wlld/imageRecognition/RGBNorm.java
@@ -15,6 +15,10 @@ public class RGBNorm {
private List rgbs = new ArrayList<>();
private RgbRegression rgbRegression;
+ public List getRgbs() {
+ return rgbs;
+ }
+
public RgbRegression getRgbRegression() {
return rgbRegression;
}
@@ -31,10 +35,6 @@ public class RGBNorm {
rgbUp = rgb;
}
- public List getRgbs() {
- return rgbs;
- }
-
public void clear() {
rgbAll = new double[3];
nub = 0;
diff --git a/src/main/java/org/wlld/imageRecognition/segmentation/Watershed.java b/src/main/java/org/wlld/imageRecognition/segmentation/Watershed.java
index 32a3fb5..aa49826 100644
--- a/src/main/java/org/wlld/imageRecognition/segmentation/Watershed.java
+++ b/src/main/java/org/wlld/imageRecognition/segmentation/Watershed.java
@@ -262,6 +262,7 @@ public class Watershed {
int y = matrix.getY();
for (int i = 0; i < x; i++) {
for (int j = 0; j < y; j++) {
+
if (rainfallMap.getNumber(i, j) == 0) {//进行降雨
fall(i, j);
}
@@ -276,86 +277,14 @@ public class Watershed {
regionBodies.add(regionBody);
}
}
-// for (RegionBody regionBody : regionBodies) {
-// int minX = regionBody.getMinX();
-// int maxX = regionBody.getMaxX();
-// int minY = regionBody.getMinY();
-// int maxY = regionBody.getMaxY();
-// System.out.println("minX==" + minX + ",minY==" + minY + ",maxX==" + maxX + ",maxY==" + maxY);
-// }
- return iou(regionBodies);
- //return regionBodies;
- }
-
- private List iou(List regionBodies) {
- List list = new ArrayList<>();
- double maxMinX, minMaxX, maxMinY, minMaxY;
- for (int i = 0; i < regionBodies.size(); i++) {
- if (!list.contains(i)) {
- RegionBody regionBody = regionBodies.get(i);
- int minX1 = regionBody.getMinX();
- int minY1 = regionBody.getMinY();
- int maxX1 = regionBody.getMaxX();
- int maxY1 = regionBody.getMaxY();
- double s1 = (maxX1 - minX1) * (maxY1 - minY1);
- for (int j = 0; j < regionBodies.size(); j++) {
- if (j != i && !list.contains(j)) {
- RegionBody body = regionBodies.get(j);
- int minX2 = body.getMinX();
- int minY2 = body.getMinY();
- int maxX2 = body.getMaxX();
- int maxY2 = body.getMaxY();
- double s2 = (maxX2 - minX2) * (maxY2 - minY2);
- double s = s1 + s2;
- if (maxX2 > maxX1) {
- maxMinX = maxX1;
- } else {
- maxMinX = maxX2;
- }
- if (minX2 > minX1) {
- minMaxX = minX2;
- } else {
- minMaxX = minX1;
- }
- if (maxY2 > maxY1) {
- maxMinY = maxY1;
- } else {
- maxMinY = maxY2;
- }
- if (minY2 > minY1) {
- minMaxY = minY2;
- } else {
- minMaxY = minY1;
- }
- double intersectX = ArithUtil.sub(maxMinX, minMaxX);//相交X
- double intersectY = ArithUtil.sub(maxMinY, minMaxY);//相交Y
- if (intersectX < 0) {
- intersectX = 0;
- }
- if (intersectY < 0) {
- intersectY = 0;
- }
- double intersectS = ArithUtil.mul(intersectX, intersectY);//相交面积
- double mergeS = ArithUtil.sub(s, intersectS);//相并面积
- double iou = ArithUtil.div(intersectS, mergeS);
- if (iou > maxIou) {
- if (s1 < s2) {//s1 是i ,大的
- list.add(j);
- } else {
- list.add(i);
- }
- }
- }
- }
- }
- }
- List regionBodies2 = new ArrayList<>();
- for (int i = 0; i < regionBodies.size(); i++) {
- if (!list.contains(i)) {
- regionBodies2.add(regionBodies.get(i));
- }
+ for (RegionBody regionBody : regionBodies) {
+ int minX = regionBody.getMinX();
+ int maxX = regionBody.getMaxX();
+ int minY = regionBody.getMinY();
+ int maxY = regionBody.getMaxY();
+ System.out.println("minX==" + minX + ",minY==" + minY + ",maxX==" + maxX + ",maxY==" + maxY);
}
- return regionBodies2;
+ return regionBodies;
}
private boolean check(int minX, int minY, int maxX, int maxY) {
@@ -490,10 +419,10 @@ public class Watershed {
}
}
}
+ //System.out.println(regionMap.getString());
pixFilter();//痕迹过滤
createMerge();//提取候选区
merge();//合并候选区
- //System.out.println(regionMap.getString());
}
private int getMinIndex(double[] array, double mySelf) {//获取最小值
diff --git a/src/test/java/coverTest/FoodTest.java b/src/test/java/coverTest/FoodTest.java
index 533b6e0..4826cd6 100644
--- a/src/test/java/coverTest/FoodTest.java
+++ b/src/test/java/coverTest/FoodTest.java
@@ -79,9 +79,9 @@ public class FoodTest {
Food food = templeConfig.getFood();
//
cutting.setMaxRain(360);//切割阈值
- cutting.setTh(0.8);
+ cutting.setTh(0.3);
cutting.setRegionNub(200);
- cutting.setMaxIou(1.0);
+ cutting.setMaxIou(2.0);
//knn参数
templeConfig.setKnnNub(1);
//池化比例
@@ -90,9 +90,11 @@ public class FoodTest {
templeConfig.setFeatureNub(3);//聚类特征数量
//菜品识别实体类
food.setShrink(20);//缩紧像素
- food.setTimes(2);//聚类数据增强
+ food.setTimes(1);//聚类数据增强
food.setRowMark(0.1);//0.12
food.setColumnMark(0.1);//0.25
+ food.setRegressionNub(20000);
+ food.setTrayTh(0.08);
templeConfig.setClassifier(Classifier.KNN);
templeConfig.init(StudyPattern.Cover_Pattern, true, 400, 400, 3);
if (modelParameter != null) {
@@ -109,29 +111,19 @@ public class FoodTest {
Specifications specifications = new Specifications();
specifications.setMinWidth(300);
specifications.setMinHeight(300);
- specifications.setMaxWidth(900);
- specifications.setMaxHeight(900);
+ specifications.setMaxWidth(1000);
+ specifications.setMaxHeight(1000);
specificationsList.add(specifications);
ThreeChannelMatrix threeChannelMatrix = picture.getThreeMatrix("/Users/lidapeng/Desktop/myDocument/d.jpg");
operation.setTray(threeChannelMatrix);
- for (int i = 1; i <= 10; i++) {
- ThreeChannelMatrix threeChannelMatrix1 = picture.getThreeMatrix("/Users/lidapeng/Desktop/foodModel/a/a" + i + ".jpg");
- ThreeChannelMatrix threeChannelMatrix2 = picture.getThreeMatrix("/Users/lidapeng/Desktop/foodModel/b/b" + i + ".jpg");
- ThreeChannelMatrix threeChannelMatrix3 = picture.getThreeMatrix("/Users/lidapeng/Desktop/foodModel/c/c" + i + ".jpg");
- ThreeChannelMatrix threeChannelMatrix4 = picture.getThreeMatrix("/Users/lidapeng/Desktop/foodModel/d/d" + i + ".jpg");
- ThreeChannelMatrix threeChannelMatrix5 = picture.getThreeMatrix("/Users/lidapeng/Desktop/foodModel/e/e" + i + ".jpg");
- ThreeChannelMatrix threeChannelMatrix6 = picture.getThreeMatrix("/Users/lidapeng/Desktop/foodModel/f/f" + i + ".jpg");
+ for (int i = 1; i <= 1; i++) {
+ ThreeChannelMatrix threeChannelMatrix1 = picture.getThreeMatrix("/Users/lidapeng/Desktop/myDocument/m.jpg");
operation.colorStudy(threeChannelMatrix1, 1, specificationsList);
- operation.colorStudy(threeChannelMatrix2, 2, specificationsList);
- operation.colorStudy(threeChannelMatrix3, 3, specificationsList);
- operation.colorStudy(threeChannelMatrix4, 4, specificationsList);
- operation.colorStudy(threeChannelMatrix5, 5, specificationsList);
- operation.colorStudy(threeChannelMatrix6, 6, specificationsList);
- System.out.println("=======================================" + i);
+ // System.out.println("=======================================" + i);
}
// minX==301,minY==430,maxX==854,maxY==920
// minX==497,minY==1090,maxX==994,maxY==1520
- test2(templeConfig);
+ // test2(templeConfig);
}
public static void study() throws Exception {