Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class zajecia5 {
- public void noise(Picture picture, int lvl, double probability){
- Random rand = new Random();
- int level=Math.abs(lvl);
- for(int i = 0; i<picture.getWidth(); i++){
- for(int k = 0; k<picture.getHeight(); k++){
- Color c = picture.getColor(i, k);
- int a = rand.nextInt(level);
- int r = c.getRed()+(int)Math.floor((probability*a));if(r>255)r=255;
- int g = c.getGreen()+(int)Math.floor((probability*a));if(g>255)g=255;
- int b = c.getBlue()+(int)Math.floor((probability*a));if(b>255)b=255;
- picture.setColor(i, k, new Color(r, g, b));
- }}
- System.out.println(level);
- }
- public void peppersalt(double probability, Picture picture){
- double amount = probability;
- double low = amount/2;
- double high = 1 - low;
- double tmp;
- for(int i = 0; i<picture.getWidth(); i++){
- for(int k = 0; k<picture.getHeight(); k++){
- Color c = picture.getColor(i, k);
- int r = c.getRed();
- int g = c.getGreen();
- int b = c.getBlue();
- picture.setColor(i, k, new Color(r, g, b));
- if ((tmp=Math.random()) <= low)
- picture.setColor(i, k, new Color(0, 0, 0));
- else if (tmp >= high)
- picture.setColor(i, k, new Color(255, 255, 255));
- }}
- }
- public void normal_dist(Picture picture, int avg, int stddev, double probability){
- // 1/stddev*Math.sqrt(2*Math.PI)*Math.exp((Math.pow((x-avg), 2)/Math.pow((2*stddev),2);
- for(int i = 0; i<picture.getWidth(); i++){
- for(int k = 0; k<picture.getHeight(); k++){
- Color c = picture.getColor(i, k);
- int r = (int)(Math.floor(probability*(1/stddev*Math.sqrt(2*Math.PI)*Math.exp((Math.pow((c.getRed()-avg), 2)/Math.pow((2*stddev),2)))))); if(r <= 0) r=1; if(r >255) r = 255;
- int g = (int)(Math.floor(probability*(1/stddev*Math.sqrt(2*Math.PI)*Math.exp((Math.pow((c.getGreen()-avg), 2)/Math.pow((2*stddev),2)))))); if(g <= 0) g=1; if(g >255) g = 255;
- int b = (int)(Math.floor(probability*(1/stddev*Math.sqrt(2*Math.PI)*Math.exp((Math.pow((c.getBlue()-avg), 2)/Math.pow((2*stddev),2))))));if(b <= 0) b=1; if(b >255) b = 255;
- //
- // int r = c.getRed()+(int)(1/stddev*Math.sqrt(2*Math.PI)*Math.exp((Math.pow((c.getRed()-avg), 2)/Math.pow((2*stddev),2)))); if(r>255)r=255;
- // int g = c.getGreen()+(int)(1/stddev*Math.sqrt(2*Math.PI)*Math.exp((Math.pow((c.getGreen()-avg), 2)/Math.pow((2*stddev),2)))); if(g>255)g=255;
- // int b = c.getBlue()+Math.floor(probability*(1/stddev*Math.sqrt(2*Math.PI)*Math.exp((Math.pow((c.getBlue()-avg), 2)/Math.pow((2*stddev),2)))))(int); if(b>255)b=255;
- picture.setColor(i, k, new Color(r, g, b));
- }}
- }
- //Zadanie 4 (3 punkt)
- // Proszę wykonać filtrację (Filtry średniej ruchomej) obrazów zaszumionych powyższymi (trzema) sposobami (tylko odcienie szarości).
- public void avgFilter(Picture picture){
- // 1/stddev*Math.sqrt(2*Math.PI)*Math.exp((Math.pow((x-avg), 2)/Math.pow((2*stddev),2);
- for(int i = 0; i<picture.getWidth(); i++){
- for(int k = 0; k<picture.getHeight(); k++){
- int maxw=picture.getWidth()-1;
- int maxh=picture.getHeight()-1;
- Color c1 = picture.getColor(i-1, k-1);if(i<0)i=0;
- Color c = picture.getColor(i, k);
- Color c2 = picture.getColor(i+1, k+1); if(i>maxw)i=maxw;
- int r1=c1.getRed();
- int r = c.getRed();
- int r2=c2.getRed();
- int avgr=(r1+r2)/2;
- int g1=c1.getGreen();
- int g = c.getGreen();
- int g2=c2.getGreen();
- int avgg=(g1+g2)/2;
- int b1=c1.getBlue();
- int b = c.getBlue();
- int b2=c2.getBlue();
- int avgb=(b1+b2)/2;
- Color newC= new Color(avgr, avgg, avgb);
- picture.setColor(i,k, newC);
- if (i!=maxh && k!=maxh){
- }
- }}
- }
- static int nrows, ncols;
- static int in_img[][], out_img[][];
- public void medianFilter(Picture picture){{
- int out_img[][];
- out_img= new int [picture.getWidth()][picture.getHeight()];
- for (int i=0; i<picture.getWidth(); i++){
- for (int k=0; k<picture.getHeight(); k++){
- Color c = picture.getColor(i,k);
- int newcolor = out_img[i][k] = median(i, k, picture);
- picture.setColor(i,k, new Color(newcolor, newcolor, newcolor));
- }
- }
- }}
- public int median(int i, int k, Picture picture) {
- int in_img[][];
- in_img = new int [picture.getWidth()][picture.getHeight()];
- int m, n, count, t[], tmp;
- t = new int[9];
- for (m=i-1, count=0; m<=i+1; m++)
- for (n=k-1; n<=k+1; n++)
- if (m>=0 && m<picture.getWidth() && n>=0 && n<picture.getHeight())
- t[count++] = in_img[m][n];
- // Bubble sort
- for (m=0; m<count-1; m++)
- for (n=m+1; n<count; n++)
- if (t[m] < t[n]) {
- tmp = t[m];
- t[m] = t[n];
- t[n] = tmp;
- }
- return t[count/2];
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement