均值滤波

来源:互联网 发布:java 插件开发 demo 编辑:程序博客网 时间:2024/05/16 17:20

  均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标像素为中心的周围8个像素,构成一个滤波模板,即去掉目标像素本身),再用模板中的全体像素的平均值来代替原来像素值。

 public void jMean_ActionPerformed(ActionEvent e) {      
        if(flag_load){  
            //

        if(flag_load){  
            //
BufferedImage.TYPE_INT_RGB : 表示一个图像,该图像具有整数像素的 8 位 RGB 颜色
            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;  
                      

                        //  就是把四个八位二进制数

                       //拼接成一个二进制数32位

                      // 255<<24:11111111变成111111110000...(24个0)


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

    }

具体细节 看我写的灰度图 

原创粉丝点击