欢迎来到天天文库
浏览记录
ID:37765388
大小:718.50 KB
页数:12页
时间:2019-05-30
《数字图像处理灰度化直方图均衡化灰度拉伸》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、数字图像处理与模式识别实验目的打开一幅图像,进行直方图均衡化。并将其灰度线性变化,将灰度线性拉伸。实验准备实验之前,收集数字图像处理编程的相关资料,查阅C或Java关于本实验图像处理的相关类库和编程核心。经过C和Java相关资料编程的比较,Java将图像处理的类封装的较完整,运用起来比C灵活方便。以下是相关类库和实现操作的方法:importjava.awt.image.*;importjavax.imageio.*;//相关的图像处理类库和方法封装在两个包中//Java读取图像的方法BufferedImagenewImage=Imag
2、eIO.read(newFile(filePath));intwidth=newImage.getWidth();//获得图像的像素宽度intheight=newImage.getHeight();//获得图像像素的长度//获得图像的色彩模型RGB分量ColorModelcolorModel=ColorModel.getRGBdefault();intr=colorModel.getRed(currPixArray[k]);intg=colorModel.getGreen(currPixArray[k]);intb=colorMode
3、l.getBlue(currPixArray[k]);//分别获得图像的rgb分量PixelGrabberp=newPixelGrabber(image,0,0,width,height,array,0,width);//将image图像像素值读入一位矩阵实验步骤算法实现RGB图像转灰度图由于数字图像的直方图均衡化和灰度的线性拉伸都是基于灰度图的算法实现,本框架中增加了由彩色图转灰度图的功能。简单讲述下算法思想:将存储图像的一维矩阵像素点彩色分量用ColorModel类中的getRed(),getGreen()和getBlue()方法
4、读取,按照(r*0.3+g*0.59+b*0.11)公式计算灰度值。部分关键代码如下:for(i=0;i5、55<<24)6、(r<<16)7、(g<<8)8、b;}}测试效果:原图灰度图直方图均衡化一幅数字图像存在一个灰度范围,每个像素都有不同的灰度值,因此每个灰度级别出现的概率都会有所不同。直方图的均衡化就是将每个灰度级出现的概率尽量均匀的分布在灰度范围之内(实际操作不可能完全均匀分布),达到图像增强,图像信息最多的效果。首先进行每个灰度级别(0-255)出现的在数字图像的概率,然后通过概率累计的方式将离散的概率值进行累加,得到新的灰度级别的概率进行均匀分布在灰度范围内,修改更新数字图像一维像素矩阵的的灰度值,便可达到直方图均衡化的效果。(J9、ava具体实现还应注意些小细节,代码中的注释将给出)核心代码如下:intgrayLevel;//每个像素的灰度级int[]grayArray=newint[256];//记录每个灰度级出现的像素数量int[]resPixArray=newint[width*height];//均衡化之后的新像素矩阵for(inti=0;i10、]++;}}double[]p=newdouble[256];//记录每个灰度级的出现的概率for(inti=0;i<256;i++)p[i]=(double)grayArray[i]/(width*height);p[0]=(double)grayArray[0]/(width*height);grayArray[0]=(int)(p[0]*255+0.5);for(inti=0;i<255;i++){p[i+1]+=p[i];grayArray[i+1]=(int)(p[i+1]*255+0.5);}intgray,newgray11、;for(inti=0;i
5、55<<24)
6、(r<<16)
7、(g<<8)
8、b;}}测试效果:原图灰度图直方图均衡化一幅数字图像存在一个灰度范围,每个像素都有不同的灰度值,因此每个灰度级别出现的概率都会有所不同。直方图的均衡化就是将每个灰度级出现的概率尽量均匀的分布在灰度范围之内(实际操作不可能完全均匀分布),达到图像增强,图像信息最多的效果。首先进行每个灰度级别(0-255)出现的在数字图像的概率,然后通过概率累计的方式将离散的概率值进行累加,得到新的灰度级别的概率进行均匀分布在灰度范围内,修改更新数字图像一维像素矩阵的的灰度值,便可达到直方图均衡化的效果。(J
9、ava具体实现还应注意些小细节,代码中的注释将给出)核心代码如下:intgrayLevel;//每个像素的灰度级int[]grayArray=newint[256];//记录每个灰度级出现的像素数量int[]resPixArray=newint[width*height];//均衡化之后的新像素矩阵for(inti=0;i10、]++;}}double[]p=newdouble[256];//记录每个灰度级的出现的概率for(inti=0;i<256;i++)p[i]=(double)grayArray[i]/(width*height);p[0]=(double)grayArray[0]/(width*height);grayArray[0]=(int)(p[0]*255+0.5);for(inti=0;i<255;i++){p[i+1]+=p[i];grayArray[i+1]=(int)(p[i+1]*255+0.5);}intgray,newgray11、;for(inti=0;i
10、]++;}}double[]p=newdouble[256];//记录每个灰度级的出现的概率for(inti=0;i<256;i++)p[i]=(double)grayArray[i]/(width*height);p[0]=(double)grayArray[0]/(width*height);grayArray[0]=(int)(p[0]*255+0.5);for(inti=0;i<255;i++){p[i+1]+=p[i];grayArray[i+1]=(int)(p[i+1]*255+0.5);}intgray,newgray
11、;for(inti=0;i
此文档下载收益归作者所有