java图像的中值滤波器


import java.awt.*;
import java.awt.image.*;
import java.applet.*;

    public class zhongzhi extends Applet
    {
        Image img,pic;
        int wide,high;
        int p[];
        int hist[]=new int[16];
        public  void init()
        {
            try
            {
                img=getImage(getDocumentBase(),"1.jpg");
                MediaTracker mt= new MediaTracker(this);//跟踪多种媒体对象状态
                mt.addImage(img,0);//向此媒体跟踪器正在跟踪的图像列表添加一个图像
                mt.waitForID(0);//开始加载由此媒体跟踪器跟踪且具有指定标识符的所有图像。
                wide=img.getWidth(null);
                high=img.getHeight(null);
                p=new int[wide*high];
                PixelGrabber grabber=new PixelGrabber(img,0,0,wide,high,p,0,wide);
                grabber.grabPixels();
            }catch(InterruptedException e){};

            for(int y=3;y<high;y+=3)
                for(int x=3;x<wide;x+=3)
                {
                    int k=0;
                    for(int i=x;i<x+3;i++)
                        for(int j=y;j<y+3;j++)
                        {
                            int pixel=p[(j-1)*wide+i];
                            int r=0xff&(pixel>>16);
                            int g=0xff&(pixel>>8);
                            int b=0xff&(pixel);
                            hist[k++]=(int)(0.33*r+0.56*g+0.11*b);
                        }
                    for(int i=0;i<9;i++)
                        for( int j=0;j<9-i;j++)
                        {
                            if(hist[j]>hist[j+1])
                            {
                                int t=hist[j];
                                hist[j+1]=hist[j];
                                hist[j+1]=t;
                            }
                        }
                    int mid=hist[4];
                    for(int i=x;i<x+3;i++)
                        for(int j=y;j<y+3;j++)
                        {
                            p[(j-1)*wide+i]=0xff000000|mid<<16|mid<<8|mid;
                            pic=createImage(new MemoryImageSource(wide,high,p,0,wide)) ;                  //根据指定的图像生成器创建一幅图像
                        }
                }
        }

        public void paint (Graphics g)
        {
            g.drawImage(img,20,0,300,300,null);
            g.drawImage(pic,330,0,300,300,null);
        }
    }

猜你喜欢

转载自blog.csdn.net/chehec2010/article/details/80577794
今日推荐