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 {