diff --git a/LinearRegressionTool/libs/opencv-2413.jar b/LinearRegressionTool/libs/opencv-2413.jar new file mode 100644 index 0000000..e5015ac Binary files /dev/null and b/LinearRegressionTool/libs/opencv-2413.jar differ diff --git a/LinearRegressionTool/libs/x64/opencv_java2413.dll b/LinearRegressionTool/libs/x64/opencv_java2413.dll new file mode 100644 index 0000000..7366960 Binary files /dev/null and b/LinearRegressionTool/libs/x64/opencv_java2413.dll differ diff --git a/LinearRegressionTool/src/main/java/App.java b/LinearRegressionTool/src/main/java/App.java index 5017f06..ff5755b 100644 --- a/LinearRegressionTool/src/main/java/App.java +++ b/LinearRegressionTool/src/main/java/App.java @@ -1,9 +1,12 @@ import model.LineModel; +import org.opencv.core.Core; import presenter.Presenter; +import presenter.evaluation.PictureProcessor; import view.MainFrame; import javax.swing.*; import java.awt.*; +import java.lang.reflect.InvocationTargetException; /** * Implementierung verschiedener Algorithmen zur Berechnung von Ausgleichsgeraden. @@ -14,6 +17,8 @@ import java.awt.*; */ public class App { + static {System.loadLibrary(Core.NATIVE_LIBRARY_NAME);} + private static void setUIFont(javax.swing.plaf.FontUIResource f) { java.util.Enumeration keys = UIManager.getDefaults().keys(); while (keys.hasMoreElements()) { @@ -47,13 +52,16 @@ public class App { public static void main(String[] args) { + final Presenter presenter = new Presenter(new LineModel(), null); + SwingUtilities.invokeLater(() -> { JFrame.setDefaultLookAndFeelDecorated(true); MainFrame view = new MainFrame(); setLookAndFeel(view); setUIFont(new javax.swing.plaf.FontUIResource(new Font("Verdana", Font.PLAIN, 12))); - view.setPresenter(new Presenter(new LineModel(), view)); + view.setPresenter(presenter); view.setActionListeners(); + presenter.setView(view); }); } diff --git a/LinearRegressionTool/src/main/java/presenter/AbstractPresenter.java b/LinearRegressionTool/src/main/java/presenter/AbstractPresenter.java index 0582db9..f9c594d 100644 --- a/LinearRegressionTool/src/main/java/presenter/AbstractPresenter.java +++ b/LinearRegressionTool/src/main/java/presenter/AbstractPresenter.java @@ -5,6 +5,7 @@ import model.Line; import model.LineModel; import presenter.algorithms.util.IntersectionCounter; import presenter.evaluation.EvaluateAlgorithms; +import presenter.evaluation.PictureProcessor; import view.MainFrame; import javax.swing.*; @@ -133,6 +134,24 @@ public abstract class AbstractPresenter implements Observer { setup(); }); } + + if (result[0] == "import-picture") { + //100% erreicht + SwingUtilities.invokeLater(() -> { + getView().enableFunctionality(); + }); + setup(); + Thread t = new Thread(() -> { + calculateIntersections(); + }); + t.start(); + try { + t.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + } } public void setup() { diff --git a/LinearRegressionTool/src/main/java/presenter/Presenter.java b/LinearRegressionTool/src/main/java/presenter/Presenter.java index f429b55..9916fad 100644 --- a/LinearRegressionTool/src/main/java/presenter/Presenter.java +++ b/LinearRegressionTool/src/main/java/presenter/Presenter.java @@ -5,6 +5,7 @@ import presenter.algorithms.advanced.LeastMedianOfSquaresEstimator; import presenter.algorithms.advanced.RepeatedMedianEstimator; import presenter.algorithms.advanced.TheilSenEstimator; import presenter.evaluation.EvaluateAlgorithms; +import presenter.evaluation.PictureProcessor; import presenter.generator.DatasetGenerator; import presenter.io.DataExporter; import presenter.io.DataImporter; @@ -29,6 +30,7 @@ public class Presenter extends AbstractPresenter{ private Thread rmThread; private Thread lmsThread; private Thread importThread; + private Thread importPictureThread; private Thread exportThread; private Thread exportResultThread; private Thread generatorThread; @@ -129,6 +131,25 @@ public class Presenter extends AbstractPresenter{ } } + public void startPictureDataImport(File file){ + if (importPictureThread == null || !importPictureThread.isAlive()) { + importPictureThread = new Thread(() -> { + PictureProcessor pictureProcessor = new PictureProcessor(this, file); + pictureProcessor.addObserver(this); + pictureProcessor.run(); + }); + importPictureThread.start(); + try { + importPictureThread.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + + + } + public void startExport(File file) { if (exportThread == null || !exportThread.isAlive()) { exportThread = new Thread(() -> { diff --git a/LinearRegressionTool/src/main/java/presenter/evaluation/PictureProcessor.java b/LinearRegressionTool/src/main/java/presenter/evaluation/PictureProcessor.java new file mode 100644 index 0000000..a3e8b46 --- /dev/null +++ b/LinearRegressionTool/src/main/java/presenter/evaluation/PictureProcessor.java @@ -0,0 +1,106 @@ +package presenter.evaluation; +import model.Line; +import org.opencv.core.Core; +import org.opencv.core.CvType; +import org.opencv.core.Mat; +import org.opencv.core.Size; +import org.opencv.highgui.*; +import org.opencv.imgproc.Imgproc; +import presenter.Presenter; +import presenter.algorithms.advanced.LeastMedianOfSquaresEstimator; + +import javax.imageio.ImageIO; +import javax.swing.*; +import javax.swing.filechooser.FileFilter; +import javax.swing.filechooser.FileNameExtensionFilter; +import javax.swing.filechooser.FileSystemView; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.awt.image.DataBufferByte; +import java.io.File; +import java.lang.reflect.InvocationTargetException; +import java.util.LinkedList; +import java.util.Observable; +import java.util.Observer; + +/** + * Implementierung verschiedener Algorithmen zur Berechnung von Ausgleichsgeraden. + * + * @Author: Armin Wolf + * @Email: a_wolf28@uni-muenster.de + * @Date: 17.09.2017. + */ +public class PictureProcessor extends Observable{ + + private Mat image; + private Mat threshold; + private Presenter presenter; + private File file; + + public PictureProcessor(Presenter presenter, File file) { + this.file = file; + this.presenter = presenter; + } + + public void run(){ + String msg = ""; + msg = SwingUtilities.isEventDispatchThread() ? "EDT" : "nicht EDT"; + System.out.println(msg); + + System.out.println("Welcome to OpenCV " + Core.VERSION); + + image = Highgui.imread(file.getAbsolutePath()); + threshold = process(image); + createInputData(threshold); + } + + private Mat process(Mat image){ + threshold = new Mat(image.width(), image.height(), CvType.CV_8UC1); + Mat source = new Mat(image.width(), image.height(), CvType.CV_8UC1); + Imgproc.cvtColor(image, source, Imgproc.COLOR_BGR2GRAY); + Imgproc.adaptiveThreshold(source, threshold,255, Imgproc.ADAPTIVE_THRESH_MEAN_C, + Imgproc.THRESH_BINARY_INV, 11,2); + return threshold; + } + + + private BufferedImage toBufferedImage(Mat m) { + int type = BufferedImage.TYPE_BYTE_GRAY; + if (m.channels() > 1) { + type = BufferedImage.TYPE_3BYTE_BGR; + } + int bufferSize = m.channels() * m.cols() * m.rows(); + byte[] b = new byte[bufferSize]; + m.get(0, 0, b); // get all the pixels + BufferedImage image = new BufferedImage(m.cols(), m.rows(), type); + final byte[] targetPixels = ((DataBufferByte) image.getRaster().getDataBuffer()).getData(); + System.arraycopy(b, 0, targetPixels, 0, b.length); + return image; + + } + + private void createInputData(Mat image){ + Thread t = new Thread(() -> { + int id = 0; + for (int i=0;i { + File file = null; + JFileChooser chooser = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory()); + chooser.setPreferredSize(new Dimension(800, 700)); + chooser.setFileFilter(new FileNameExtensionFilter("Bilder", "tiff", "png","jpg","jpeg")); + + chooser.setMultiSelectionEnabled(false); + chooser.setFileSelectionMode(JFileChooser.FILES_ONLY); + + + if (chooser.showOpenDialog(component) == JFileChooser.APPROVE_OPTION) { + //System.out.println ("Datei "+chooser.getSelectedFile()+ " ausgewählt."); + file = chooser.getSelectedFile(); + final File input = file; + Thread t = new Thread(() -> presenter.startPictureDataImport(input)); + t.start(); + } + }); + } +} diff --git a/LinearRegressionTool/src/main/resources/Thumbs.db b/LinearRegressionTool/src/main/resources/Thumbs.db index bac6b2c..d345648 100644 Binary files a/LinearRegressionTool/src/main/resources/Thumbs.db and b/LinearRegressionTool/src/main/resources/Thumbs.db differ diff --git a/LinearRegressionTool/src/main/resources/shannon-kelley-108053.jpg b/LinearRegressionTool/src/main/resources/shannon-kelley-108053.jpg new file mode 100644 index 0000000..2438687 Binary files /dev/null and b/LinearRegressionTool/src/main/resources/shannon-kelley-108053.jpg differ