Advertisement
Guest User

Untitled

a guest
Apr 28th, 2016
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.21 KB | None | 0 0
  1. import ij.IJ;
  2. import ij.ImageJ;
  3. import ij.ImagePlus;
  4. import ij.gui.GenericDialog;
  5. import ij.plugin.filter.PlugInFilter;
  6. import ij.process.ImageProcessor;
  7. import java.util.*;
  8.  
  9.  
  10. public class Process_Pixels implements PlugInFilter {
  11.  
  12.     public ImagePlus imp;
  13.     public double radiusd;
  14.     public int radius;
  15.     public boolean dialogCanceled = false;
  16.  
  17.     @Override
  18.     public int setup(String arg, ImagePlus imp) {
  19.         this.imp = imp;
  20.         return DOES_ALL;
  21.     }
  22.  
  23.     @Override
  24.     public void run(ImageProcessor ip) {
  25.         doDialog();
  26.         if (dialogCanceled) return;
  27.         int height = ip.getHeight();
  28.         int width = ip.getWidth();
  29.  
  30.         List<Integer> rMedianZeroList = new ArrayList<Integer>();
  31.         List<Integer> rMedianOneList = new ArrayList<Integer>();
  32.         List<Integer> rMedianTwoList = new ArrayList<Integer>();
  33.         List<Integer> rMedianThreeList = new ArrayList<Integer>();
  34.         List<Integer> rMedianFourList = new ArrayList<Integer>();
  35.  
  36.         List<Integer> gMedianZeroList = new ArrayList<Integer>();
  37.         List<Integer> gMedianOneList = new ArrayList<Integer>();
  38.         List<Integer> gMedianTwoList = new ArrayList<Integer>();
  39.         List<Integer> gMedianThreeList = new ArrayList<Integer>();
  40.         List<Integer> gMedianFourList = new ArrayList<Integer>();
  41.  
  42.         List<Integer> bMedianZeroList = new ArrayList<Integer>();
  43.         List<Integer> bMedianOneList = new ArrayList<Integer>();
  44.         List<Integer> bMedianTwoList = new ArrayList<Integer>();
  45.         List<Integer> bMedianThreeList = new ArrayList<Integer>();
  46.         List<Integer> bMedianFourList = new ArrayList<Integer>();
  47.  
  48.         int maxR, maxG, maxB;
  49.         int minR, minG, minB;
  50.         int posX, posY;
  51.  
  52.         int[] RGB = new int[3];
  53.         int[] mRGB = new int[3];
  54.         ImageProcessor copy = ip.duplicate();
  55.         radius = (int) radiusd;
  56.         int k = ((radius*2)+1)/2;
  57.  
  58.         // Pętla odpowiadające do chodzenia po obrazie
  59.         for(int x = 0; x < width; x ++){
  60.             for(int y = 0; y < height; y++){
  61.                 // Czyszczenie list median
  62.                 rMedianZeroList.clear();
  63.                 gMedianZeroList.clear();
  64.                 bMedianZeroList.clear();
  65.                 rMedianOneList.clear();
  66.                 gMedianOneList.clear();
  67.                 bMedianOneList.clear();
  68.                 rMedianTwoList.clear();
  69.                 gMedianTwoList.clear();
  70.                 bMedianTwoList.clear();
  71.                 rMedianThreeList.clear();
  72.                 gMedianThreeList.clear();
  73.                 bMedianThreeList.clear();
  74.                 rMedianFourList.clear();
  75.                 gMedianFourList.clear();
  76.                 bMedianFourList.clear();
  77.  
  78.                 copy.getPixel(x, y, mRGB);  // AKTUALNY PIKSEL
  79.  
  80.                 // Wypełnienie list median
  81.                 posX = radius * (-1);
  82.                 for(int xx = 0; xx < (radius*2)+1; xx++){
  83.                     posY = radius * (-1);
  84.                     for(int yy = 0; yy < (radius*2)+1; yy++){
  85.                         if(x+posX >= 0 && y+posY>=0 && x+posX <= width && y+posY <= height) { // Jeżeli piksel macierzy sąsiedztwa znajduje się na obrazie
  86.                             copy.getPixel((x + posX), (y + posY), RGB);
  87.                             // Median Zero
  88.                             rMedianZeroList.add(RGB[0]);
  89.                             gMedianZeroList.add(RGB[1]);
  90.                             bMedianZeroList.add(RGB[2]);
  91.                             // Median One
  92.                             if (xx == k) {
  93.                                 rMedianOneList.add(RGB[0]);
  94.                                 gMedianOneList.add(RGB[1]);
  95.                                 bMedianOneList.add(RGB[2]);
  96.                             }
  97.                             // Median Two
  98.                             if (yy == k) {
  99.                                 rMedianTwoList.add(RGB[0]);
  100.                                 gMedianTwoList.add(RGB[1]);
  101.                                 bMedianTwoList.add(RGB[2]);
  102.                             }
  103.                             // Median Three
  104.                             if (xx == yy) {
  105.                                 rMedianThreeList.add(RGB[0]);
  106.                                 gMedianThreeList.add(RGB[1]);
  107.                                 bMedianThreeList.add(RGB[2]);
  108.                             }
  109.                             // Median Four
  110.                             if ((radius * 2) - xx == yy) {
  111.                                 rMedianFourList.add(RGB[0]);
  112.                                 gMedianFourList.add(RGB[1]);
  113.                                 bMedianFourList.add(RGB[2]);
  114.                             }
  115.                         }
  116.                         posY++;
  117.                     }
  118.                     posX++;
  119.                 }
  120.  
  121.                 // Obliczenie MIN / MAX
  122.                 maxR = Math.max(median(rMedianOneList), Math.max(median(rMedianTwoList), Math.max(median(rMedianThreeList), median(rMedianThreeList))));
  123.                 minR = Math.min(median(rMedianOneList), Math.max(median(rMedianTwoList), Math.max(median(rMedianThreeList), median(rMedianThreeList))));
  124.                 maxG = Math.max(median(gMedianOneList), Math.max(median(gMedianTwoList), Math.max(median(gMedianThreeList), median(gMedianThreeList))));
  125.                 minG = Math.min(median(gMedianOneList), Math.max(median(gMedianTwoList), Math.max(median(gMedianThreeList), median(gMedianThreeList))));
  126.                 maxB = Math.max(median(bMedianOneList), Math.max(median(bMedianTwoList), Math.max(median(bMedianThreeList), median(bMedianThreeList))));
  127.                 minB = Math.min(median(bMedianOneList), Math.max(median(bMedianTwoList), Math.max(median(bMedianThreeList), median(bMedianThreeList))));
  128.  
  129.                 // Ostateczny wybór wartości
  130.                 if(Math.abs(maxR - median(rMedianZeroList)) >= Math.abs(median(rMedianZeroList) - minR)){
  131.                     RGB[0] = maxR;
  132.                 }else{
  133.                     RGB[0] = minR;
  134.                 }
  135.  
  136.                 if(Math.abs(maxG - median(gMedianZeroList)) >= Math.abs(median(gMedianZeroList) - minG)){
  137.                     RGB[1] = maxG;
  138.                 }else{
  139.                     RGB[1] = minG;
  140.                 }
  141.  
  142.                 if(Math.abs(maxB - median(gMedianZeroList)) >= Math.abs(median(gMedianZeroList) - minB)){
  143.                     RGB[2] = maxB;
  144.                 }else{
  145.                     RGB[2] = minB;
  146.                 }
  147.  
  148.                 // Wstawienie zmienionego piksela do obrazu
  149.                 ip.putPixel(x, y, RGB);
  150.             }
  151.         }
  152.     }
  153.  
  154.     public void doDialog() {
  155.         GenericDialog gd = new GenericDialog("Lab 5");
  156.         gd.addNumericField("Podaj wartość promienia: ", 0, 0);
  157.         gd.showDialog();
  158.         radiusd = gd.getNextNumber();
  159.     }
  160.  
  161.     public Integer median(List<Integer> values){
  162.         Collections.sort(values);
  163.         if(values.size() % 2 ==  1) {
  164.             return values.get((values.size())/2);
  165.         }else{
  166.             int upper = values.get((values.size())/2);
  167.             int lower = values.get((values.size()/2)-1);
  168.             return (upper+lower)/2;
  169.         }
  170.     }
  171.     public static void main(String[] args) {
  172.         // set the plugins.dir property to make the plugin appear in the Plugins menu
  173.         Class<?> clazz = Process_Pixels.class;
  174.         String url = clazz.getResource("/" + clazz.getName().replace('.', '/') + ".class").toString();
  175.         String pluginsDir = url.substring("file:".length(), url.length() - clazz.getName().length() - ".class".length());
  176.         System.setProperty("plugins.dir", pluginsDir);
  177.  
  178.         // start ImageJ
  179.         new ImageJ();
  180.  
  181.         // open the Lena sample
  182.         ImagePlus image = IJ.openImage("http://imagej.nih.gov/ij/images/lena-std.tif");
  183.         image.show();
  184.  
  185.         // run the plugin
  186.         IJ.runPlugIn(clazz.getName(), "");
  187.         System.out.print("Koniec");
  188.     }
  189. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement