使用java的中位数过滤器实现

时间:2015-08-16 05:33:25

标签: java image-processing

我正在使用java实现中值过滤器,但我得到的输出并不令人满意。我已经使用了一个3 * 3的社区。这是我的代码:

for(i=1;i<height-1;i++)
    {
       for(j=1;j<width-1;j++)
       {
            Color c=new Color(img.getRGB(j,i));
            red=c.getRed();
            green=c.getGreen();
            blue=c.getBlue();
            x=j;
            y=i;
            x1=x-1;
            y1=y;
            x2=x+1;
            y2=y;
            x3=x;
            y3=y-1;
            x4=x;
            y4=y+1;
            x5=x+1;
            y5=y+1;
            x6=x-1;
            y6=y-1;
            x7=x-1;
            y7=y+1;
            x8=x+1;
            y8=y-1; 
            Color c1=new Color(img.getRGB(x1,y1));
            red1=c1.getRed();
            green1=c1.getGreen();
            blue1=c1.getBlue();  
            Color c2=new Color(img.getRGB(x2,y2));
            red2=c2.getRed();
            green2=c2.getGreen();
            blue2=c2.getBlue();
            Color c3=new Color(img.getRGB(x3,y3));
            red3=c3.getRed();
            green3=c3.getGreen();
            blue3=c3.getBlue();
            Color c4=new Color(img.getRGB(x4,y4));
            red4=c4.getRed();
            green4=c4.getGreen();
            blue4=c4.getBlue();
            Color c5=new Color(img.getRGB(x5,y5));
            red5=c5.getRed();
            green5=c5.getGreen();
            blue5=c5.getBlue();
            Color c6=new Color(img.getRGB(x6,y6));
            red6=c6.getRed();
            green6=c6.getGreen();
            blue6=c6.getBlue();
            Color c7=new Color(img.getRGB(x7,y7));
            red7=c7.getRed();
            green7=c7.getGreen();
            blue7=c7.getBlue();
            Color c8=new Color(img.getRGB(x8,y8));
            red8=c8.getRed();
            green8=c8.getGreen();
            blue8=c8.getBlue();
            a[0]=red1;
            a[1]=red2;
            a[2]=red3;
            a[3]=red4;
            a[4]=red5;
            a[5]=red6;
            a[6]=red7;
            a[7]=red8;
            a=bubbleSort(a);
            redf=a[2];
            a[0]=green1;
            a[1]=green2;
            a[2]=green3;
            a[3]=green4;
            a[4]=green5;
            a[5]=green6;
            a[6]=green7;
            a[7]=green8;
            a=bubbleSort(a);
            greenf=a[2];
            a[0]=blue1;
            a[1]=blue2;
            a[2]=blue3;
            a[3]=blue4;
            a[4]=blue5;
            a[5]=blue6;
            a[6]=blue7;
            a[7]=blue8;
            a=bubbleSort(a);
            bluef=a[2];
            Color nc=new Color(redf,greenf,bluef);
            img.setRGB(x,y,nc.getRGB());
       }
   }

外环从1到高度-1。它没有打印

1 个答案:

答案 0 :(得分:0)

如前所述,您使用相同的图像 img 进行读取和写入,因此会影响像素计算。您也可以访问此JavaScript教程http://fiveko.com/tutorials/dip/median。它描述了一种基于直方图的中值提取方法,并且似乎有望用于更大的内核大小。