廖雪峰历时3个月打磨出价值1980的数据分析教程,终终终于免费啦!

文章目录
  1. 1. 程序
    1. 1.1. 中值滤波
    2. 1.2. 均值滤波
  2. 2. 去噪效果
    1. 2.1. 高斯噪声
    2. 2.2. 椒盐噪声
  3. 3. 源码下载
  • 均值滤波和中值滤波的内容非常基础,均值滤波相当于低通滤波,有将图像模糊化的趋势,对椒盐噪声基本无能为力。中值滤波的优点是可以很好的过滤掉椒盐噪声,缺点是易造成图像的不连续性。在下面的代码中,中值滤波主要通过冒泡算法来实现。

程序

中值滤波

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);  
        }  
}

均值滤波

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);  
        }  
}  

去噪效果

高斯噪声

椒盐噪声

源码下载


科学上网(翻墙)教程!

更多精彩内容,请扫描二维码关注公众号:轮子工厂,公众号内回复:

1.回复【图书】:获取15本新手自学编程,零基础入门经典学习教材;
2.回复【我要造轮子】:获取100多本计算机类经典书籍;
3.回复【开发工具】:获取几大主流编程语言的开发工具~
4.回复【内推】:可帮你内推到大厂工作。
文章目录
  1. 1. 程序
    1. 1.1. 中值滤波
    2. 1.2. 均值滤波
  2. 2. 去噪效果
    1. 2.1. 高斯噪声
    2. 2.2. 椒盐噪声
  3. 3. 源码下载