diff --git a/LinearRegressionTool/src/main/resources/libs/opencv-2413.jar b/LinearRegressionTool/libs/opencv-2413.jar
similarity index 100%
rename from LinearRegressionTool/src/main/resources/libs/opencv-2413.jar
rename to LinearRegressionTool/libs/opencv-2413.jar
diff --git a/LinearRegressionTool/src/main/resources/libs/x64/opencv_java2413.dll b/LinearRegressionTool/libs/x64/opencv_java2413.dll
similarity index 100%
rename from LinearRegressionTool/src/main/resources/libs/x64/opencv_java2413.dll
rename to LinearRegressionTool/libs/x64/opencv_java2413.dll
diff --git a/LinearRegressionTool/masterarbeit.properties b/LinearRegressionTool/masterarbeit.properties
new file mode 100644
index 0000000..9d07d80
--- /dev/null
+++ b/LinearRegressionTool/masterarbeit.properties
@@ -0,0 +1,4 @@
+path.variable.kotlin_bundled=C\:\\Program Files\\JetBrains\\IntelliJ IDEA 2017.2.3\\plugins\\Kotlin\\kotlinc
+path.variable.maven_repository=C\:\\Users\\Armin\\.m2\\repository
+jdk.home.1.8=C\:/Program Files/Java/jdk1.8.0_121
+javac2.instrumentation.includeJavaRuntime=false
\ No newline at end of file
diff --git a/LinearRegressionTool/masterarbeit.xml b/LinearRegressionTool/masterarbeit.xml
new file mode 100644
index 0000000..26e5d8a
--- /dev/null
+++ b/LinearRegressionTool/masterarbeit.xml
@@ -0,0 +1,182 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/LinearRegressionTool/module_masterarbeit.xml b/LinearRegressionTool/module_masterarbeit.xml
new file mode 100644
index 0000000..f1b6927
--- /dev/null
+++ b/LinearRegressionTool/module_masterarbeit.xml
@@ -0,0 +1,177 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/LinearRegressionTool/pom.xml b/LinearRegressionTool/pom.xml
index 3653ea1..fe09dd8 100644
--- a/LinearRegressionTool/pom.xml
+++ b/LinearRegressionTool/pom.xml
@@ -102,7 +102,9 @@
org
opencv
2.4.13
- ${project.basedir}/src/main/resources/libs/opencv-2413.jar
+ system
+ ${project.basedir}/libs/opencv-2413.jar
+ native-all
@@ -111,16 +113,17 @@
2.4.13
system
dll
- ${project.basedir}/src/main/resources/libs/x64/opencv_java2413.dll
+ ${project.basedir}/libs/x64/opencv_java2413.dll
native-all
-
+
- org.apache.commons
+ commons-io
commons-io
- 1.3.2
+ 2.5
+
\ No newline at end of file
diff --git a/LinearRegressionTool/src/main/java/App.java b/LinearRegressionTool/src/main/java/App.java
index 03ce55b..b8027bd 100644
--- a/LinearRegressionTool/src/main/java/App.java
+++ b/LinearRegressionTool/src/main/java/App.java
@@ -7,10 +7,7 @@ import view.MainFrame;
import javax.swing.*;
import java.awt.*;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.InputStream;
-import java.io.OutputStream;
+import java.io.*;
/**
* Implementierung verschiedener Algorithmen zur Berechnung von Ausgleichsgeraden.
@@ -21,23 +18,13 @@ import java.io.OutputStream;
*/
public class App {
-
-
private static void loadLibrary() {
try {
InputStream in = null;
File fileOut = null;
- String osName = System.getProperty("os.name");
- int bitness = Integer.parseInt(System.getProperty("sun.arch.data.model"));
- if(bitness == 32){
- in = App.class.getResourceAsStream("/libs/x86/opencv_java2413.dll");
- fileOut = File.createTempFile("tmp", ".dll");
- }
- else if (bitness == 64){
- in = App.class.getResourceAsStream("/libs/x64/opencv_java2413.dll");
- fileOut = File.createTempFile("tmp", ".dll");
- }
+ in = App.class.getResourceAsStream("/libs/x64/opencv_java2413.dll");
+ fileOut = File.createTempFile("tmp", ".dll");
OutputStream out = new FileOutputStream(fileOut);
IOUtils.copy(in, out);
@@ -81,7 +68,11 @@ public class App {
}
public static void main(String[] args) {
- loadLibrary();
+ //loadLibrary();
+
+ System.out.println("Welcome to OpenCV " + Core.VERSION);
+ System.out.println(System.getProperty("java.library.path"));
+ System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
final Presenter presenter = new Presenter(new LineModel(), null);
diff --git a/LinearRegressionTool/src/main/java/presenter/algorithms/advanced/TheilSenEstimator.java b/LinearRegressionTool/src/main/java/presenter/algorithms/advanced/TheilSenEstimator.java
index 5728251..6875809 100644
--- a/LinearRegressionTool/src/main/java/presenter/algorithms/advanced/TheilSenEstimator.java
+++ b/LinearRegressionTool/src/main/java/presenter/algorithms/advanced/TheilSenEstimator.java
@@ -5,9 +5,7 @@ import model.Line;
import model.Point;
import presenter.Presenter;
import presenter.algorithms.Algorithm;
-import presenter.algorithms.util.BinomialCoeffizient;
-import presenter.algorithms.util.FastElementSelector;
-import presenter.algorithms.util.RandomSampler;
+import presenter.algorithms.util.*;
import java.util.*;
@@ -58,7 +56,8 @@ public class TheilSenEstimator extends Observable implements Algorithm {
this.yCoordinates = new ArrayList<>();
this.xCoordinates = new ArrayList<>();
this.N = BinomialCoeffizient.run(n, 2);
- this.k = Integer.valueOf((int) (N * 0.5)) - 1;
+ //this.k = Integer.valueOf((int) (N * 0.5)) - 1;
+ this.k = (int) (N / 2);
}
public TheilSenEstimator(LinkedList setOfLines, ArrayList setOfIntersections) {
@@ -120,8 +119,8 @@ public class TheilSenEstimator extends Observable implements Algorithm {
//Double kthElement = FastElementSelector.randomizedSelect(xCoordinates, k);
//Boolean cond1 = (kthElement > aVariant) && (kthElement <= bVariant);
- int lowerCount = getIntervalSize(NEGATIV_INF, aVariant, setOfIntersections);
- int higherCount = getIntervalSize(NEGATIV_INF, bVariant, setOfIntersections);
+ int lowerCount = getIntervalSize(NEGATIV_INF, aVariant);
+ int higherCount = getIntervalSize(NEGATIV_INF, bVariant);
Boolean conda = k > lowerCount;
Boolean condb = k <= higherCount;
@@ -142,20 +141,18 @@ public class TheilSenEstimator extends Observable implements Algorithm {
* @param b obere Grenze des Intrvals
* @return Anzahl der Schnittpunkte im Interval [a,b)
*/
- public int getIntervalSize(double a, double b, ArrayList set) {
- int counter = 0;
- for (Point x : set) {
- if (x.getX() >= a && x.getX() < b) {
- counter++;
- }
- }
- return counter;
+ public int getIntervalSize(double a, double b) {
+ IntersectionCounter ic = new IntersectionCounter();
+ return ic.run(setOfLines, new Interval(a,b));
}
/**
* Berechne wieviele von den Schnittpunkten in dem Interval zwischen a
und b
* enthalten sind.
*
+ * Inspiriert durch:
+ * https://stackoverflow.com/questions/136474/best-way-to-pick-a-random-subset-from-a-collection
+ *
* @param a untere Grenze des Intervals
* @param b obere Grenze des Intrvals
* @return Anzahl der Schnittpunkte im Interval (a,b)
diff --git a/LinearRegressionTool/src/main/java/presenter/algorithms/util/RandomSampler.java b/LinearRegressionTool/src/main/java/presenter/algorithms/util/RandomSampler.java
index 0eade1f..c56fe9e 100644
--- a/LinearRegressionTool/src/main/java/presenter/algorithms/util/RandomSampler.java
+++ b/LinearRegressionTool/src/main/java/presenter/algorithms/util/RandomSampler.java
@@ -4,6 +4,8 @@ import model.Line;
import model.Point;
import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;
/**
@@ -43,14 +45,27 @@ public class RandomSampler {
public static ArrayList run(ArrayList set, Double r) {
ArrayList sampledLines = new ArrayList<>();
- Integer indexOfEnd = set.size();
+// Integer indexOfEnd = set.size()-1;
+//
+// for (int i = 0; i < r; i++) {
+// sampledLines.add(set.get(ThreadLocalRandom.current().nextInt(0, indexOfEnd)).getX());
+// }
- for (int i = 0; i < r; i++) {
- Double px = set.get(ThreadLocalRandom.current().nextInt(0, indexOfEnd)).getX();
- if (!sampledLines.contains(px))
- sampledLines.add(px);
+// return sampledLines;
+
+ for (Point p : set){
+ sampledLines.add(p.getX());
}
- return sampledLines;
+ Random rand = new Random();
+ int inputSize = sampledLines.size();
+ for (int i = 0; i < r; i++)
+ {
+ int indexToSwap = i + rand.nextInt(inputSize - i);
+ Double temp = sampledLines.get(i);
+ sampledLines.set(i, sampledLines.get(indexToSwap));
+ sampledLines.set(indexToSwap, temp);
+ }
+ return new ArrayList<>(sampledLines.subList(0, r.intValue()));
}
}
diff --git a/LinearRegressionTool/src/main/java/presenter/evaluation/PictureProcessor.java b/LinearRegressionTool/src/main/java/presenter/evaluation/PictureProcessor.java
index c896cab..9543880 100644
--- a/LinearRegressionTool/src/main/java/presenter/evaluation/PictureProcessor.java
+++ b/LinearRegressionTool/src/main/java/presenter/evaluation/PictureProcessor.java
@@ -44,9 +44,12 @@ public class PictureProcessor extends Observable {
private Mat process(Mat image) {
Mat threshold = new Mat(image.width(), image.height(), CvType.CV_8UC1);
Mat source = new Mat(image.width(), image.height(), CvType.CV_8UC1);
+ Highgui.imwrite(file.getAbsolutePath().substring(0,file.getAbsolutePath().lastIndexOf("."))+"-orig.png", image);
Imgproc.cvtColor(image, source, Imgproc.COLOR_BGR2GRAY);
+ Highgui.imwrite(file.getAbsolutePath().substring(0,file.getAbsolutePath().lastIndexOf("."))+"-Greyscale.png", source);
Imgproc.GaussianBlur(source, threshold, new Size(3, 3), 0, 0);
Imgproc.Canny(threshold, source, 300, 600, 5, true);
+ Highgui.imwrite(file.getAbsolutePath().substring(0,file.getAbsolutePath().lastIndexOf("."))+"-Canny.png", source);
//Konturen berechnen und filtern
contours = new ArrayList<>();
Imgproc.findContours(source, contours, new Mat(), Imgproc.RETR_TREE, Imgproc.CHAIN_APPROX_SIMPLE, new Point(0, 0));
@@ -59,6 +62,7 @@ public class PictureProcessor extends Observable {
Imgproc.drawContours(viscont, contours, i, new Scalar(255, 0, 0), 1);
}
}
+ Highgui.imwrite(file.getAbsolutePath().substring(0,file.getAbsolutePath().lastIndexOf("."))+"-Contour.png", viscont);
Mat resized = new Mat();
Imgproc.resize(viscont, resized, new Size(560, 560));
SwingUtilities.invokeLater(() -> {
@@ -70,7 +74,7 @@ public class PictureProcessor extends Observable {
dialog.add(label);
dialog.setVisible(true);
});
- return source;
+ return viscont;
}
diff --git a/LinearRegressionTool/src/main/java/presenter/io/EvalResultLatexExport.java b/LinearRegressionTool/src/main/java/presenter/io/EvalResultLatexExport.java
index 6f54be7..5816cbf 100644
--- a/LinearRegressionTool/src/main/java/presenter/io/EvalResultLatexExport.java
+++ b/LinearRegressionTool/src/main/java/presenter/io/EvalResultLatexExport.java
@@ -39,14 +39,14 @@ public class EvalResultLatexExport {
private String createOutputData() {
String split = "&";
StringBuilder doc = new StringBuilder();
- doc.append("\\begin{tabular}{l|*{3}{r}}" + "\r\n");
+ doc.append("\\begin{tabular}{|l|r|r|r|}" + "\\hline\r\n");
for (int i = 0; i < model.getColumnCount(); i++) {
if (model.getValueAt(0, i).toString() != "" || model.getRowCount() > 5)
doc.append("\\textsc{" + model.getColumnName(i) + "}" + split);
}
doc.deleteCharAt(doc.lastIndexOf(split));
- doc.append("\\\\\\hline\\hline" + "\r\n");
+ doc.append("\\\\\\hline" + "\r\n");
for (int i = 0; i < model.getRowCount() - 1; i++) {
for (int j = 0; j < model.getColumnCount(); j++) {
@@ -62,7 +62,7 @@ public class EvalResultLatexExport {
if (model.getValueAt(i, 0) != "") {
doc.deleteCharAt(doc.lastIndexOf(split));
}
- doc.append("\\\\" + "\r\n");
+ doc.append("\\\\\\hline" + "\r\n");
}
doc.append("\\end{tabular}");
return doc.toString();