中值滤波

中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值

中值相当于中位数

 //按钮动作的实现 中值滤波    
    public void jMedian_ActionPerformed(ActionEvent e) {      
        if(flag_load){  
        try{  
                 PixelGrabber pg = new PixelGrabber(tmp,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]); 
                    Arrays.sort(tpRed);
                   
                    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]); 
                    Arrays.sort(tpGreen);
                   
                    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]); 
                    Arrays.sort(tpBlue);
                  
                    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);  
            }  

具体细节请看 我的灰度图 和 均值滤波

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值