中值滤波器的java实现
我正在用java实现一个中值滤波器,但是我得到的结果并不令人满意。我已经使用了一个3*3的社区。这是我的密码:中值滤波器的java实现,java,image-processing,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();
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());
}
}
用于(i=1;i如前所述,您正在使用相同的图像img进行读取和写入,因此它会影响像素计算。您也可以访问此JavaScript教程。它描述了一种基于直方图的中值提取方法,似乎适用于更大的内核大小。应该打印什么?没有输出语句。输出图像..我不太清楚。我已经提到了。我刚刚粘贴了使用的逻辑!!您在迭代时修改图像-因此更改后的像素值将用于计算更靠右和更靠下的像素。好吧!!让我换一种方式试试,谢谢!!效果很好