diff --git a/src/main/java/org/wlld/imageRecognition/modelEntity/DeepMappingBody.java b/src/main/java/org/wlld/imageRecognition/modelEntity/DeepMappingBody.java index b91c3de..a1c2550 100644 --- a/src/main/java/org/wlld/imageRecognition/modelEntity/DeepMappingBody.java +++ b/src/main/java/org/wlld/imageRecognition/modelEntity/DeepMappingBody.java @@ -1,11 +1,13 @@ package org.wlld.imageRecognition.modelEntity; +import org.wlld.MatrixTools.Matrix; import org.wlld.imageRecognition.TempleConfig; import org.wlld.imageRecognition.border.Knn; import org.wlld.imageRecognition.segmentation.DimensionMappingStudy; -import java.util.HashMap; -import java.util.Map; + +import java.util.List; +import java.util.Set; /** * @param @@ -16,11 +18,24 @@ import java.util.Map; public class DeepMappingBody { private DimensionMappingStudy dimensionAll; private TempleConfig templeConfig; - private Map mappingMap = new HashMap<>(); + private List mappingList; public DeepMappingBody(TempleConfig templeConfig) throws Exception { this.templeConfig = templeConfig; - dimensionAll = new DimensionMappingStudy(templeConfig); - dimensionAll.start(); + dimensionAll = new DimensionMappingStudy(templeConfig, true); + mappingList = dimensionAll.start(); + } + + public int getType(Matrix feature) throws Exception { + int type = dimensionAll.getType(feature); + for (KeyMapping keyMapping : mappingList) { + Set region = keyMapping.getKeys(); + if (region.contains(type)) { + DimensionMappingStudy mapping = keyMapping.getDimensionMapping(); + type = mapping.getType(feature); + break; + } + } + return type; } } diff --git a/src/main/java/org/wlld/imageRecognition/modelEntity/KeyMapping.java b/src/main/java/org/wlld/imageRecognition/modelEntity/KeyMapping.java new file mode 100644 index 0000000..b3c1e19 --- /dev/null +++ b/src/main/java/org/wlld/imageRecognition/modelEntity/KeyMapping.java @@ -0,0 +1,32 @@ +package org.wlld.imageRecognition.modelEntity; + +import org.wlld.imageRecognition.segmentation.DimensionMappingStudy; + +import java.util.Set; + +/** + * @param + * @DATA + * @Author LiDaPeng + * @Description + */ +public class KeyMapping { + private Set keys; + private DimensionMappingStudy dimensionMapping; + + public Set getKeys() { + return keys; + } + + public void setKeys(Set keys) { + this.keys = keys; + } + + public DimensionMappingStudy getDimensionMapping() { + return dimensionMapping; + } + + public void setDimensionMapping(DimensionMappingStudy dimensionMapping) { + this.dimensionMapping = dimensionMapping; + } +} diff --git a/src/main/java/org/wlld/imageRecognition/segmentation/DimensionMappingStudy.java b/src/main/java/org/wlld/imageRecognition/segmentation/DimensionMappingStudy.java index 637a70a..e814cf2 100644 --- a/src/main/java/org/wlld/imageRecognition/segmentation/DimensionMappingStudy.java +++ b/src/main/java/org/wlld/imageRecognition/segmentation/DimensionMappingStudy.java @@ -3,6 +3,7 @@ package org.wlld.imageRecognition.segmentation; import org.wlld.MatrixTools.Matrix; import org.wlld.imageRecognition.TempleConfig; import org.wlld.imageRecognition.border.Knn; +import org.wlld.imageRecognition.modelEntity.KeyMapping; import org.wlld.pso.PSO; import java.util.*; @@ -19,10 +20,12 @@ public class DimensionMappingStudy { private Knn myKnn = new Knn(1); private double[] mappingSigma;//映射层 - public DimensionMappingStudy(TempleConfig templeConfig) throws Exception { + public DimensionMappingStudy(TempleConfig templeConfig, boolean isClone) throws Exception { this.templeConfig = templeConfig; //深度克隆 - myKnn.setFeatureMap(cloneFeature(templeConfig.getKnn().getFeatureMap())); + if (isClone) { + myKnn.setFeatureMap(cloneFeature(templeConfig.getKnn().getFeatureMap())); + } } public Knn getMyKnn() { @@ -101,9 +104,9 @@ public class DimensionMappingStudy { return minSub; } - public void selfTest(int nub) throws Exception {//对模型数据进行自检测 - Map> myFeatureMap = myKnn.getFeatureMap();//未映射的克隆的 - Map> featureMap = templeConfig.getKnn().getFeatureMap(); + public List selfTest(int nub) throws Exception {//对模型数据进行自检测 + Map> myFeatureMap = templeConfig.getKnn().getFeatureMap();//未映射的克隆的 + Map> featureMap = myKnn.getFeatureMap(); MinTypeSort minTypeSort = new MinTypeSort(); Map> minMap = new HashMap<>();//保存与该类别最相似的类别,及距离值 for (Map.Entry> entry : featureMap.entrySet()) { @@ -137,13 +140,22 @@ public class DimensionMappingStudy { cups.add(cup); } List> setList = getTypeSet(cups); + List mappingList = new ArrayList<>(); for (Set set : setList) { - DimensionMappingStudy dimensionMappingStudy = new DimensionMappingStudy(templeConfig); + KeyMapping keyMapping = new KeyMapping(); + DimensionMappingStudy dimension = new DimensionMappingStudy(templeConfig, false); + keyMapping.setDimensionMapping(dimension); + keyMapping.setKeys(set); + Knn knn = dimension.getMyKnn(); for (int type : set) { List features = myFeatureMap.get(type); - + for (Matrix feature : features) { + knn.insertMatrix(feature, type); + } } + dimension.mappingStart(); } + return mappingList; } public List> getTypeSet(List t) { @@ -211,9 +223,12 @@ public class DimensionMappingStudy { return t1; } + public int getType(Matrix feature) throws Exception { + return myKnn.getType(feature); + } public void mappingStart() throws Exception { - Map> featureMap = templeConfig.getKnn().getFeatureMap(); + Map> featureMap = myKnn.getFeatureMap(); FeatureMapping featureMapping = new FeatureMapping(featureMap); int dimensionNub = templeConfig.getFeatureNub() * 3 * 2;//PSO维度 //创建粒子群 @@ -236,9 +251,9 @@ public class DimensionMappingStudy { featureMapping(featureMap, mappingSigma, templeConfig); } - public void start() throws Exception { + public List start() throws Exception { mappingStart(); - selfTest(3); + return selfTest(3); } private void featureMapping(Map> featureMap, double[] mapping diff --git a/src/test/java/coverTest/FoodTest.java b/src/test/java/coverTest/FoodTest.java index 285963c..ad5bda5 100644 --- a/src/test/java/coverTest/FoodTest.java +++ b/src/test/java/coverTest/FoodTest.java @@ -19,20 +19,7 @@ import java.util.*; public class FoodTest { public static void main(String[] args) throws Exception { - //test(); - int[] a = new int[]{1, 4, 5, 7, 31}; - int[] b = new int[]{4, 6, 7, 8, 21,}; - int[] c = new int[]{12, 42, 54, 9}; - int[] d = new int[]{63, 54, 99}; - int[] e = new int[]{991, 123, 456}; - - List t = new ArrayList<>(); - t.add(a); - t.add(b); - t.add(c); - t.add(d); - t.add(e); - ab(t); + test(); } public static void ab(List t) { @@ -235,7 +222,7 @@ public class FoodTest { operation.colorStudy(threeChannelMatrix23, 23, specificationsList, name); operation.colorStudy(threeChannelMatrix24, 24, specificationsList, name); } - DimensionMappingStudy dimensionMappingStudy = new DimensionMappingStudy(templeConfig); + DimensionMappingStudy dimensionMappingStudy = new DimensionMappingStudy(templeConfig, true); dimensionMappingStudy.start();//完成映射 //dimensionMappingStudy.selfTest(6);//检查 //System.out.println("========================");