Advertisement
Guest User

Untitled

a guest
Jan 21st, 2019
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.78 KB | None | 0 0
  1. import java.io.File;
  2. import java.io.FileInputStream;
  3. import java.io.FileNotFoundException;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.util.Arrays;
  7.  
  8. /**
  9.  * In dieser Klasse wird ein astronomisches Pixelbild korrigiert
  10.  * @author Dino Lindlau & Emin-Can Kösem
  11.  * @version 0.1
  12.  * @since 13.01.2019
  13.  * @return Korrigiertes Pixelbild
  14.  */
  15. public final class Teil2_Aufgabe1_Pixel {
  16.    
  17.     public static void main(String[] args) {
  18.        
  19.        
  20.         String[] eingabestrings = args;
  21.         int dateimenge = eingabestrings.length;
  22.         boolean dateiexists[] = new boolean[dateimenge];
  23.         Arrays.fill(dateiexists, true);
  24.         int richtigedateien = 0;
  25.         for(int i = 0; i < dateimenge; i++) {
  26.             File dateieingabe = new File(eingabestrings[i]+".bmp");
  27.             boolean exists = dateieingabe.exists();
  28.             if (exists != true) {
  29.                 dateiexists[i] = false;
  30.             }
  31.             else if(exists == true) {
  32.                 richtigedateien++;
  33.             }
  34.         }
  35.        
  36.         // C:\Users\dino114\eclipse-workspace\Teil2_Aufgabe1_Pixel
  37.         //File userdir = new File(System.getProperty("user.dir").toString());
  38.         //File-Array mit allen bmp files, die existieren aus args
  39.         File[] files = new File[richtigedateien];
  40.         for(int i = 0, n = 0; i < dateimenge; i++) {
  41.             File dateieingabe = new File(eingabestrings[i]+".bmp");
  42.             boolean exists = dateieingabe.exists();
  43.             if (exists != true) {
  44.                 System.out.println("Die Datei " + dateieingabe.toString() + " existiert nicht");
  45.                 dateiexists[i] = false;
  46.             }
  47.             else if(exists == true) {
  48.                 files[n] = new File(eingabestrings[i]+".bmp");
  49.                 n++;
  50.             }
  51.         }
  52.        
  53.  
  54.         //Files für weisse und schwarze Bilder
  55.         try {
  56.             File dark = new File("user.dir\\dark.bmp");
  57.             }
  58.         catch (FileNotFoundException e) {
  59.             System.out.println("FEhler");
  60.         }
  61.         File white = new File("user.dir\\white.bmp");
  62.         File[] korrigiert = new File[files.length];
  63.         for (int i = 0; i < korrigiert.length; i++) {
  64.             korrigiert[i] = new File(files[i].toString().replaceFirst("[.][^.]+$", "") + "korr.bmp");
  65.         }
  66.  
  67.        
  68.         for (int x = 0; x < files.length; x++) {
  69.             //ByteArray mit den Daten des Bildes
  70.             byte[] imageinput = readData(files[x].getName());
  71.             //ByteArray für die korrigiertenBytes
  72.             byte[] imagecorr = new byte[(int)files[x].length()];
  73.             //ByteArray für die ersten 1078 Bytes
  74.             byte[] firstbytes = new byte[1078];
  75.             for (int i = 0; i <= 1077; i++) {
  76.                 firstbytes[i] = imageinput[i];
  77.             }
  78.             //ByteArray für die letzen zwei Bytes
  79.             byte[] lastbytes = new byte[2];
  80.             for (int i = 16078, c = 0; i <= 16079; i++) {
  81.                 lastbytes[c] = imageinput[i];
  82.                 c++;
  83.             }
  84.             //ByteArray fuer weisses und schwarzes Bild
  85.             byte[] whiteimagesigned = readData(white.getName());
  86.             byte[] darkimagesigned = readData(dark.getName());
  87.            
  88.             //int arrays für unsigned byte werde da java keine unsigned datentypen hat via bitmaske
  89.            
  90.             int[] whiteimageunsigned = new int[whiteimagesigned.length];
  91.             int[] darkimageunsigned = new int[darkimagesigned.length];
  92.             int[] imageinputunsigned = new int[imageinput.length];
  93.             //umwandeln der werte
  94.             for (int i = 0; i < whiteimageunsigned.length; i++) {
  95.                
  96.                 if(whiteimagesigned[i] >= 0  && whiteimagesigned[i] <= 127) {
  97.                     whiteimageunsigned[i] = whiteimagesigned[i];
  98.                 }
  99.                 else {
  100.                     whiteimageunsigned[i] = whiteimagesigned[i] + 256;
  101.                 }
  102.                
  103.                 if(darkimagesigned[i] >= 0  && darkimagesigned[i] <= 127) {
  104.                     darkimageunsigned[i] = darkimagesigned[i];
  105.                 }
  106.                 else {
  107.                     darkimageunsigned[i] = darkimagesigned[i] +256;
  108.                 }
  109.                
  110.             }
  111.             //andere for schleife wegen späterer start
  112.             for (int i = 1078, n = 0, h = 0; h < 150;) {
  113.                 for (int b = 0; b < 100; b++) {
  114.                     imageinputunsigned[n] = imageinput[i] & 0xff;  
  115.                     i++;
  116.                     n++;
  117.                 }
  118.                 h++;
  119.             }
  120.  
  121.             //Pixelmatrix für alle imageinput, weisses bild und schwarzes Bild
  122.             double[][] pixelmatriximageinput = new double[150][100];
  123.             double[][] pixelmatrixdark = new double[150][100];
  124.             double[][] pixelmatrixwhite = new double[150][100];
  125.             //Speichern der Werte in pixelmatrixdark
  126.             for (int i = 1078, h = 0; h < 150;) {
  127.                 for (int b = 0; b < 100; b++) {
  128.                     pixelmatrixdark[h][b] = darkimageunsigned[i];  
  129.                     i++;
  130.                 }
  131.                 h++;
  132.             }
  133.            
  134.            
  135.             //Speichern der Werte in Pixelmatrixwhite
  136.             for (int i = 1078, h = 0; h < 150;) {
  137.                 for (int b = 0; b < 100; b++) {
  138.                     pixelmatrixwhite[h][b] = whiteimageunsigned[i];  
  139.                     i++;
  140.                 }
  141.                 h++;
  142.             }
  143.  
  144.             //Speichern der Werte für Pixelmatriximageinput
  145.             for (int i = 1078, h = 0; h < 150;) {
  146.                 for (int b = 0; b < 100; b++) {
  147.                     pixelmatriximageinput[h][b] = imageinputunsigned[i];  
  148.                     i++;
  149.                 }
  150.                 h++;
  151.             }
  152.    
  153.            
  154.            
  155.             //Summe der Werte aller Pixel des Weissbildes
  156.             int summe = 0;
  157.             for (int h = 0; h < 150; h++) {
  158.                 for (int b = 0; b < 100; b++) {
  159.                     summe += pixelmatrixwhite[h][b];
  160.                 }
  161.             }      
  162.             //Graustufenmittelwert fuer die Rechnung
  163.             double graustufenmittelwert = summe/15000;
  164.             //System.out.println(graustufenmittelwert);
  165.            
  166.            
  167.             //Korrektur der Pixel
  168.             //das Dunkelbild vom astronomischen Rohbild pixelweise abziehen,
  169.             //das so korrigierte Bild pixelweise durch das Weißbild dividieren und
  170.             //das so korrigierte Bild pixelweise mit dem Graustufenmittelwert des Weißbildes multiplizieren
  171.               for (int h = 0; h < 150; h++) {
  172.                    for (int b = 0; b < 100; b++) {
  173.                     pixelmatriximageinput[h][b] -= pixelmatrixdark[h][b];
  174.                     pixelmatriximageinput[h][b] /= pixelmatrixwhite[h][b];
  175.                      pixelmatriximageinput[h][b] *= graustufenmittelwert;
  176.                      pixelmatriximageinput[h][b] = Math.round(pixelmatriximageinput[h][b]);
  177.                    }
  178.               }
  179.              
  180.              
  181.             //Speichern der first bytes in korrektur
  182.             for (int i = 0; i < 1078; i++) {
  183.             imagecorr[i] = firstbytes[i];
  184.             }
  185.             //Speichern der pixel in korrektur
  186.             for (int i = 1078, h = 0; h < 150;) {
  187.                 for (int b = 0; b < 100; b++) {
  188.                     if(pixelmatriximageinput[h][b] > 127)
  189.                     imagecorr[i]=(byte) (pixelmatriximageinput[h][b] - 256);  
  190.                     else {
  191.                         imagecorr[i] = (byte) pixelmatriximageinput[h][b];
  192.                     }
  193.                    
  194.                     i++;
  195.                 }
  196.                 h++;
  197.             }
  198.             //Speichern der letzen beiden bytes in korrektur
  199.             for (int i = 16077; i < 10679; i++) {
  200.                 imagecorr[i] = lastbytes[i];
  201.                 }
  202.              
  203.            
  204.          writeData(imagecorr, korrigiert[x].getName());
  205.          System.out.println("Die Datei " + files[x].getName() + " wurde korrigiert und abgespeichert in " + korrigiert[x]);
  206.            
  207.         }
  208.        
  209.        
  210.        
  211.  
  212.  } //End of main
  213. /**
  214.  *
  215.  * @param filename: bekommt den Namen der zu lesenden Datei
  216.  * @return gibt ein byte[] mit allen bytes zurück
  217.  */
  218.  static byte[] readData(String filename) {
  219.  
  220.   File file = new File(filename);
  221.   FileInputStream fis = null;
  222.   byte[] data = null;
  223.   try {
  224.    fis = new FileInputStream(file);
  225.    data = new byte[(int) file.length()];
  226.    fis.read(data);
  227.   }
  228.   catch (FileNotFoundException e) {
  229.    e.printStackTrace();
  230.   }
  231.   catch (IOException e) {
  232.    e.printStackTrace();
  233.   }
  234.   finally {
  235.    try {
  236.     if (fis != null) fis.close();
  237.    } catch (IOException e) {}
  238.   }
  239.   return data;
  240.  }
  241. /**
  242.  *
  243.  * @param data: das Array der zu schreibenden bytes
  244.  * @param fileName: braucht den Namen der zu schreibenden Datei
  245.  * @return gibt als boolean zurück, ob es geklappt hat
  246.  */
  247.  static boolean writeData(byte[] data, String fileName) {
  248.      File file = new File(fileName);
  249.  
  250.      FileOutputStream fos = null;
  251.      try {
  252.          fos = new FileOutputStream(file);
  253.          fos.write(data);
  254.          fos.flush();
  255.          return true;
  256.      } catch (FileNotFoundException e) {
  257.          System.err.println(file + " doesn't exist!");
  258.      } catch (IOException e) {
  259.          System.err.println("Problems writing data to " + file);
  260.      } finally {
  261.          try {
  262.              if(fos != null) fos.close();
  263.          }catch(IOException e){}
  264.      }
  265.      return false;
  266.  }
  267.  
  268.  
  269. } //End of Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement