##1.图像的读取和显示

###1.1图像的读取         重点是使用awt的Image类,java本身支持jepg,gif和png三种图像格式。
        关键代码如下:

public Image openImage(String is, MediaTracker tracker )
{
	Image im = null;
	//用MediaTracker跟踪图像加载
	im = Toolkit.getDefaultToolkit().getImage(is);
	tracker.addImage(im,0);

	//等待图像完成加载
	try	{ tracker.waitForID(0);	}
	catch(InterruptedException e){ e.printStackTrace();}
	return im;
}

###1.2图像的显示         代码实现如下:

//显示两幅图与第2幅图像标题
//im   -- 输入图
//istr -- 输入图标题
//om   -- 输出图
//ostr -- 输出图标题
 
public void draw(Graphics g, Image im, String istr, Image om, String ostr)
{
    g.clearRect(0, 0, 530, 350);
    g.drawImage(im, 5,   50, null);
    g.drawImage(om, 270, 50, null);
    g.drawString(istr, 120, 320);
    g.drawString(ostr, 380, 320);
}

##2.直方图的计算         直方图的计算分别用$和$表示图像的宽度和高度。设灰度值$出现的频率为$,则直方图$可用下式计算:

        代码实现:

public int[] getHist(int[] pix, int iw, int ih)
{
	int[] hist = new int[256];
    for(int i = 0; i < iw*ih; i++)
    {
        int grey = pix[i]&0xff;
        hist[grey]++;
    }
    return hist;
}

##3.灰度的线性变换

###3.1彩色图像转变为灰度图像         彩色图像转换为灰度图像的函数表达式如下: 式中,记号$表示不超过x的最大整数。利用上式求出$值后,给输出图像的R、G、B分量都赋值$,就能转变成灰度图像。
        代码实现:

//转变为灰度图像
public int[] toGray(int[] pix, int iw, int ih)
{
    ColorModel cm = ColorModel.getRGBdefault();
    int r, g, b, gray;

    for(int i = 0; i < iw*ih; i++)
    {
        r = cm.getRed(pix[i]);
        g = cm.getGreen(pix[i]);
        b = cm.getBlue(pix[i]);
        gray =(int)((r + g + b) / 3);
        pix[i] = 255 << 24|gray << 16|gray << 8|gray;
    }
    return pix;
}

###3.2图像的灰度线性变换         记$为变换的斜率,$为截距,则灰度线性变换的数学公式如下:

        代码实现:

//线性变换
public int[] linetrans(int[] pix, int iw, int ih,float p, int q)
{
	ColorModel cm = ColorModel.getRGBdefault();
    int r, g, b;
	
	for(int i = 0; i < iw*ih; i++)
    {
        r = cm.getRed(pix[i]);
        g = cm.getGreen(pix[i]);
        b = cm.getBlue(pix[i]);

        //增加图像亮度
        r  = (int)(p * r + q);
        g  = (int)(p * g + q);
        b  = (int)(p * b + q);

        if(r >= 255)   r = 255;
        if(g >= 255)   g = 255;
        if(b >= 255)   b = 255;

        pix[i] = 255 << 24|r << 16|g << 8|b;
    }
    return pix;
}