均值滤波和中值滤波的内容非常基础,均值滤波相当于低通滤波,有将图像模糊化的趋势,对椒盐噪声基本无能为力。中值滤波的优点是可以很好的过滤掉椒盐噪声,缺点是易造成图像的不连续性。在下面的代码中,中值滤波主要通过冒泡算法来实现。
含有椒盐噪声的lena彩色图像:
均值滤波的效果如下,可以看出,椒盐噪声被处理成了小的气泡,同时图像变模糊:
中值滤波的效果如下,可以看到,几乎完全去除了椒盐噪声。
含有椒盐噪声的lena彩色图像:
均值滤波的效果如下,可以看出,椒盐噪声被处理成了小的气泡,同时图像变模糊:
中值滤波的效果如下,可以看到,几乎完全去除了椒盐噪声。
package p01; import java.awt.*; import java.awt.event.*; import java.awt.image.*; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.*; public class colorfilter extends Frame{ Image im, tmp; int i, iw, ih; int[] pixels; boolean flag_load = false; public colorfilter(){ this.setTitle("彩色图像均值中值滤波3*3"); Panel pdown; Button load, mean, median, save, quit; addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); pdown = new Panel(); pdown.setBackground(Color.lightGray); //定义按钮 load = new Button("装载图像"); mean = new Button("均值滤波3*3"); median = new Button("中值滤波3*3"); save = new Button("保存"); quit = new Button("退出"); this.add(pdown, BorderLayout.SOUTH); //添加按钮 pdown.add(load); pdown.add(mean); pdown.add(median); pdown.add(save); pdown.add(quit); //按钮的动作程序 装载图像 load.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ try { jLoad_ActionPerformed(e); } catch (IOException e1) { e1.printStackTrace(); } } }); //按钮的动作程序 均值滤波 mean.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ jMean_ActionPerformed(e); } }); //按钮的动作程序 中值滤波 median.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ jMedian_ActionPerformed(e); } }); //按钮的动作程序 保存 save.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ try { jSave_ActionPerformed(e); } catch (IOException e1) { e1.printStackTrace(); } } }); //按钮的动作程序 退出 quit.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ jQuit_ActionPerformed(e); } }); } //按钮动作的实现 加载图像 public void jLoad_ActionPerformed(ActionEvent e) throws IOException{ File inputFile = new File("E:\\f2\\sc\\lena_zaosheng08.jpg"); BufferedImage input = ImageIO.read(inputFile); iw = input.getWidth(this); ih = input.getHeight(this); pixels = new int[iw*ih]; im = input; tmp = input; flag_load = true; repaint(); } //按钮动作的实现 均值滤波 public void jMean_ActionPerformed(ActionEvent e) { if(flag_load){ try{ PixelGrabber pg = new PixelGrabber(im,0,0,iw,ih,pixels,0,iw); pg.grabPixels(); }catch(InterruptedException e3){ e3.printStackTrace(); } BufferedImage grayImage = new BufferedImage(iw, ih, BufferedImage.TYPE_INT_RGB); ColorModel cm = ColorModel.getRGBdefault(); for(int i=1;i<ih-1;i++){ for(int j=1;j<iw-1;j++){ int red1 = cm.getRed(pixels[(i-1)*iw+j-1]); int red2 = cm.getRed(pixels[(i-1)*iw+j]); int red3 = cm.getRed(pixels[(i-1)*iw+j+1]); int red4 = cm.getRed(pixels[i*iw+j-1]); int red6 = cm.getRed(pixels[i*iw+j+1]); int red7 = cm.getRed(pixels[(i+1)*iw+j-1]); int red8 = cm.getRed(pixels[(i+1)*iw+j]); int red9 = cm.getRed(pixels[(i+1)*iw+j+1]); int meanRed = (red1+red2+red3+red4+red6+red7+red8+red9)/8; int green1 = cm.getGreen(pixels[(i-1)*iw+j-1]); int green2 = cm.getGreen(pixels[(i-1)*iw+j]); int green3 = cm.getGreen(pixels[(i-1)*iw+j+1]); int green4 = cm.getGreen(pixels[i*iw+j-1]); int green6 = cm.getGreen(pixels[i*iw+j+1]); int green7 = cm.getGreen(pixels[(i+1)*iw+j-1]); int green8 = cm.getGreen(pixels[(i+1)*iw+j]); int green9 = cm.getGreen(pixels[(i+1)*iw+j+1]); int meanGreen = (green1+green2+green3+green4+green6+green7+green8+green9)/8; int blue1 = cm.getBlue(pixels[(i-1)*iw+j-1]); int blue2 = cm.getBlue(pixels[(i-1)*iw+j]); int blue3 = cm.getBlue(pixels[(i-1)*iw+j+1]); int blue4 = cm.getBlue(pixels[i*iw+j-1]); int blue6 = cm.getBlue(pixels[i*iw+j+1]); int blue7 = cm.getBlue(pixels[(i+1)*iw+j-1]); int blue8 = cm.getBlue(pixels[(i+1)*iw+j]); int blue9 = cm.getBlue(pixels[(i+1)*iw+j+1]); int meanBlue = (blue1+blue2+blue3+blue4+blue6+blue7+blue8+blue9)/8; int rgb = 255<<24|meanRed<<16|meanGreen<<8|meanBlue; grayImage.setRGB(j, i, rgb); } } tmp = grayImage; repaint(); }else{ JOptionPane.showMessageDialog(null, "先点击“装载图像”,3Q!","提示:", JOptionPane.WARNING_MESSAGE); } } //按钮动作的实现 中值滤波 public void jMedian_ActionPerformed(ActionEvent e) { if(flag_load){ try{ PixelGrabber pg = new PixelGrabber(im,0,0,iw,ih,pixels,0,iw); pg.grabPixels(); }catch(InterruptedException e3){ e3.printStackTrace(); } BufferedImage grayImage = new BufferedImage(iw, ih, BufferedImage.TYPE_INT_RGB); ColorModel cm = ColorModel.getRGBdefault(); int[] tpRed = new int[9]; int[] tpGreen = new int[9]; int[] tpBlue = new int[9]; for(int i=1;i<ih-1;i++){ for(int j=1;j<iw-1;j++){ tpRed[0] = cm.getRed(pixels[(i-1)*iw+j-1]); tpRed[1] = cm.getRed(pixels[(i-1)*iw+j]); tpRed[2] = cm.getRed(pixels[(i-1)*iw+j+1]); tpRed[3] = cm.getRed(pixels[i*iw+j-1]); tpRed[4] = cm.getRed(pixels[i*iw+j]); tpRed[5] = cm.getRed(pixels[i*iw+j+1]); tpRed[6] = cm.getRed(pixels[(i+1)*iw+j-1]); tpRed[7] = cm.getRed(pixels[(i+1)*iw+j]); tpRed[8] = cm.getRed(pixels[(i+1)*iw+j+1]); for(int rj=0; rj<8; rj++){ for(int ri=0; ri<8-rj; ri++){ if(tpRed[ri]>tpRed[ri+1]){ int Red_Temp = tpRed[ri]; tpRed[ri] = tpRed[ri+1]; tpRed[ri+1] = Red_Temp; } } } int medianRed = tpRed[4]; tpGreen[0] = cm.getGreen(pixels[(i-1)*iw+j-1]); tpGreen[1] = cm.getGreen(pixels[(i-1)*iw+j]); tpGreen[2] = cm.getGreen(pixels[(i-1)*iw+j+1]); tpGreen[3] = cm.getGreen(pixels[i*iw+j-1]); tpGreen[4] = cm.getGreen(pixels[i*iw+j]); tpGreen[5] = cm.getGreen(pixels[i*iw+j+1]); tpGreen[6] = cm.getGreen(pixels[(i+1)*iw+j-1]); tpGreen[7] = cm.getGreen(pixels[(i+1)*iw+j]); tpGreen[8] = cm.getGreen(pixels[(i+1)*iw+j+1]); for(int rj=0; rj<8; rj++){ for(int ri=0; ri<8-rj; ri++){ if(tpGreen[ri]>tpGreen[ri+1]){ int Green_Temp = tpGreen[ri]; tpGreen[ri] = tpGreen[ri+1]; tpGreen[ri+1] = Green_Temp; } } } int medianGreen = tpGreen[4]; tpBlue[0] = cm.getBlue(pixels[(i-1)*iw+j-1]); tpBlue[1] = cm.getBlue(pixels[(i-1)*iw+j]); tpBlue[2] = cm.getBlue(pixels[(i-1)*iw+j+1]); tpBlue[3] = cm.getBlue(pixels[i*iw+j-1]); tpBlue[4] = cm.getBlue(pixels[i*iw+j]); tpBlue[5] = cm.getBlue(pixels[i*iw+j+1]); tpBlue[6] = cm.getBlue(pixels[(i+1)*iw+j-1]); tpBlue[7] = cm.getBlue(pixels[(i+1)*iw+j]); tpBlue[8] = cm.getBlue(pixels[(i+1)*iw+j+1]); for(int rj=0; rj<8; rj++){ for(int ri=0; ri<8-rj; ri++){ if(tpBlue[ri]>tpBlue[ri+1]){ int Blue_Temp = tpBlue[ri]; tpBlue[ri] = tpBlue[ri+1]; tpBlue[ri+1] = Blue_Temp; } } } int medianBlue = tpBlue[4]; int rgb = 255<<24|medianRed<<16|medianGreen<<8|medianBlue; grayImage.setRGB(j, i, rgb); } } tmp = grayImage; repaint(); }else{ JOptionPane.showMessageDialog(null, "先点击“装载图像”,3Q!","提示:", JOptionPane.WARNING_MESSAGE); } } //按钮动作的实现 save public void jSave_ActionPerformed(ActionEvent e) throws IOException{ if(flag_load){ BufferedImage bi = new BufferedImage(tmp.getWidth(null),tmp.getHeight(null), BufferedImage.TYPE_INT_RGB); Graphics g = bi.getGraphics(); g.drawImage(tmp,0, 0,null); g.dispose(); File save_path=new File("E:\\f2\\sc\\save.jpg"); ImageIO.write(bi, "JPG", save_path); }else{ JOptionPane.showMessageDialog(null, "先点击“装载图像”,3Q!","提示:", JOptionPane.WARNING_MESSAGE); } } //按钮动作的实现 退出 public void jQuit_ActionPerformed(ActionEvent e){ System.exit(0); } //绘图函数 public void paint(Graphics g){ if(flag_load){ g.drawImage(tmp,50,50,this); }else{} } public static void main(String[] args) { colorfilter ti = new colorfilter(); ti.setSize(1000,860); ti.setVisible(true); } }
相关推荐
在MATLAB中,我们可以利用内置函数实现均值滤波和中值滤波。这两种滤波方法各有特点,广泛应用于不同场景。下面我们将详细介绍这两种滤波方法以及它们在MATLAB中的实现。 **1. 均值滤波** 均值滤波是一种线性滤波...
本文件包提供了两种基本的滤波方法的MATLAB实现:均值滤波和中值滤波。这两种滤波器在图像处理中扮演着重要的角色,各有其独特优势和应用场景。 1. **均值滤波**: 均值滤波是一种线性滤波方法,它通过在图像上...
用于对图像的均值滤波或中值滤波处理比较的MATLAB代码
在给定的压缩包文件中,重点展示了两种基本的滤波方法:均值滤波和中值滤波,这些都是使用Matlab编程环境实现的。Matlab作为强大的科学计算工具,提供了丰富的图像处理函数和便利的编程接口,使得这些滤波算法的实现...
在给定的标题“均值滤波_均值滤波_中值滤波_”和描述“matlab实现均值滤波,中值滤波,同时操作”中,我们关注的焦点是两种基本的滤波方法:均值滤波和中值滤波。MATLAB作为一种强大的数值计算和编程环境,被广泛...
均值滤波和中值滤波是两种基本的滤波方法,各有其特点和应用场景。以下是对这两种滤波方法的详细介绍。 **1. 均值滤波** 均值滤波是最简单的线性滤波器,它通过计算像素邻域内所有像素的平均值来替换中心像素的值...
均值滤波和中值滤波是两种常用的图像去噪算法,这两种算法都可以在MATLAB中实现。 均值滤波 均值滤波是一种简单的图像去噪算法,其思想是将图像分割成小块,然后对每个小块计算其灰度均值,最后将这些均值组合起来...
在本文中,我们将深入探讨基于VC++实现的均值滤波和中值滤波程序,以及如何使用PHOTOSHOP创建美观的MFC界面。这些技术在数字图像处理领域至关重要,帮助去除噪声并改善图像质量。 均值滤波是一种常用的线性滤波方法...
"均值滤波和中值滤波" 均值滤波和中值滤波是图像处理中常用的滤波方法,用于去除图像中的噪声,恢复原始图像,提高图像质量。下面对均值滤波和中值滤波进行详细的知识点介绍。 均值滤波 均值滤波是典型的线性滤波...
自己选择标准图像,对比验证均值和中值滤波的效果,通过SNR\PSNR\SSIM三个参数以图表形式给出对比结果。
本课程设计是基于一维信号被噪声信号污染后,分别经过均值滤波和中值滤波处理后,提取出原始信号,并且观看不同M值时滤波后波形的比较。均值滤波和中值滤波在数字信号处理中都是非常重要的滤波器,具有广泛的应用。
均值滤波和中值滤波的内容非常基础,均值滤波相当于低通滤波,有将图像模糊化的趋势,对椒盐噪声基本无能为力。中值滤波的优点是可以很好的过滤掉椒盐噪声,缺点是易造成图像的不连续性。
在MATLAB中,我们可以利用内置函数或者自定义脚本来实现高斯滤波、中值滤波和均值滤波。这里我们将深入探讨这三个概念以及如何在MATLAB中实现它们。 1. 高斯滤波: 高斯滤波是一种线性平滑滤波,适用于消除高斯噪声...
利用DnCNN模型-基于深度卷积神经网络的图像去噪算法(实现了四种传统的图像去噪算法(均值滤波、中值滤波、非局部均值滤波等)本资源中的源码都是经过本地编译过可运行的,评审分达到95分以上。资源项目的难度比较...
MatLab 自编的 均值滤波、中值滤波、高斯滤波 图像处理函数 MatLab 是一个功能强大的数值...实验结果表明,自编的均值滤波、中值滤波、高斯滤波函数可以有效地去除噪声和模糊图像,并且与系统预定义函数的结果相似。
从实验结果可以看到,均值滤波和中值滤波都可以有效地去除噪声,但中值滤波对椒盐噪声的去除效果更好。 结论 本文介绍了均值滤波和中值滤波这两种常见的图像去噪技术,并使用Matlab语言实现了相关的去噪处理。实验...
用高斯滤波、均值滤波、中值滤波,双边滤波滤波进行去噪处理,这四种滤波是在添加高斯噪声的基础上,分别得到信噪比,通过对比信噪比值,最终得到那种方式处理效果最好。并且源码可以在不同的卷积核滤波器大小、添加...
本文主要讨论了两种常见的滤波技术——均值滤波和中值滤波,以及自适应中值滤波的应用。均值滤波是一种线性滤波方法,通过计算图像中目标像素周围像素的平均值来替代原像素值,从而实现噪声的平滑效果。这种滤波方式...
本文将深入探讨两种常见的噪声滤波技术:中值滤波(Median Filtering)和均值滤波(Average Filtering),并比较它们在不同噪声环境下的去噪效果。 中值滤波是一种非线性滤波方法,其基本思想是用窗口内像素值的...
去噪算法基于MATLAB的传统图像去噪算法(均值滤波、中值滤波、非局部均值滤波NLM、三维块匹配滤波BM3D)源代码+文档说明,代码注释拉满,满分大作业资源,新手也可看懂,期末大作业、课程设计、高分必看,下载下来,...