实验三 直方图和图像的均衡化
- 格式:doc
- 大小:270.50 KB
- 文档页数:6
遥感图像增强实验报告1. 实验目的和内容实验目的:(1)遥感图像的空间域增强:通过直接改变图像中的单个像元及相邻像元的灰度值来增强图像,是图像增强技术的基本组成部分,包括点运算和邻域运算。
(2)遥感图像的频率域增强:通过对频率域的调整对遥感图像进行平滑和锐化,平滑主要是保留图像的低频部分抑制高频部分,锐化则保留图像的高频部分而削弱低频部分。
(3)遥感图像的彩色增强:将黑白图像转换成彩色图像,使地物的差别易于分辨,突出图像的有用信息,从而提高对图像的解译和分析能力。
实验内容:(1)遥感图像的空间域增强:点运算—直方图均衡化、灰度拉伸、任意拉伸,邻域运算—图像平滑、图像锐化。
(2)遥感图像的频率域增强:定义FFT,反向FFT,再进行对比。
(3)遥感图像的彩色增强:多波段影像—彩色合成、单波段影像—伪彩色增强、色彩空间变换、遥感数据融合。
2. 图像处理方法和流程A.遥感图像的空间域增强1.直方图均衡化(1)在主窗口中打开can_tmr.img文件。
(2)以gray形式显示一个波段。
(3)Display窗口>enhance>equalization2.灰度拉伸(1)Display窗口>enhance>interactive stretching(2)弹出的对话框>stretch_type>linear(3)在STRETCH对应的两个文本框中输入需要拉伸的范围,然后单击对话框上的APPLY按钮,图像显示为线性拉伸后的效果。
3.任意拉伸(1)弹出的对话框>stretch_type>Arbitary,在output histogram中单击绘制直方图,右键结束(2)点击apply,结果如图所示4.图像平滑(1)均值平滑,在主窗口中打开can_tmr.img文件。
主窗口>enhance>filter>smooth[3*3]。
结果如图所示(2)中值平滑,在主窗口中打开can_tmr.img文件。
多媒体技术实验报告项目名称: bmp文件直方图均衡
提交文档学生姓名:
提交文档学生学号:
教师评阅成绩:
教师评阅意见:
......................... .........................
1.提交报告时间: 2013年 11月16日
2.实验题目: bmp文件直方图均衡
3.实验要求:
1)读入给定BMP格式图像,
2)求输入图像的直方图, 并以文本文件形式输出
3)完成直方图均衡,
4)将直方图均衡后图像以BMP格式输出
5)计算均衡后图像的直方图, 并以文本文件形式输出
6)观察比较均衡前后图像及直方图的不同
4.实验环境: windows 7 操作系统、vc6.0
5.算法描述:
●程序流程图
●测试程序说明
1.用户需将欲测试文件放在该程序目录下
2.启动程序并输入bmp文件名即可,在该目录下的”resource”文件夹下可以看到运
行后的bmp图像以及在bmp图像均衡前后的直方图输出。
6.源程序清单:
●添加必要的注释
7.运行结果:
测试数据选择
测试结果分析
直方图均衡化前的直方图
直方图均衡化后的脂肪图
8.实验运行情况分析(包括算法、运行结果、运行环境等问题的总体讨论)。
●收获
掌握了bmp文件的一些基本特性以及其存储结构, 此外还掌握了直方图均衡的作用与实现。
●特色
●操作简单, 效果良好
●不足
当测试的bmp图片数据很大时, 可能存在内存溢出的现象。
图像增强—灰度变换及直方图均衡化一、实验目的1、了解图像增强的目的及意义,加深对图像增强的感性认识,巩固所学理论知识。
2、掌握直接灰度变换的图像增强方法。
3、掌握灰度直方图的概念及其计算方法;4、掌握直方图均衡化的计算过程;二、实验原理及知识点1、图像增强是指按特定的需要突出一幅图像中的某些信息,同时,消弱或去除某些不需要的信息的处理方法。
其主要目的是处理后的图像对某些特定的应用比原来的图像更加有效。
图像增强可以在空间域中执行,也可以在变换域中执行。
2、空间域指的是图像平面本身,在空间域内处理图像是直接对图像的像素进行处理。
空间域处理方法分为两种:灰度级变换、空间滤波。
空间域技术直接对像素进行操作,其表达式为g(x,y)=T[f(x,y)]其中f(x,y)为输入图像,g(x,y)为输出图像,T是对图像f进行处理的操作符,定义在点(x,y)的指定邻域内。
定义点(x,y)的空间邻近区域的主要方法是,使用中心位于(x,y)的正方形或长方形区域。
此区域的中心从原点(如左上角)开始逐像素点移动,在移动的同时,该区域会包含不同的邻域。
T应用于每个位置(x,y),以便在该位置得到输出图像g。
在计算(x,y)处的g值时,只使用该领域的像素。
2、灰度变换T的最简单形式是使用领域大小为1×1,此时,(x,y)处的g值仅由f在该点处的亮度决定,T也变为一个灰度变换函数。
由于灰度变换函数仅取决于亮度的值,而与(x,y)无关,所以亮度函数通常可写做如下所示的简单形式:s=T(r)其中,r表示图像f中相应点(x,y)的亮度,s表示图像g中相应点(x,y)的亮度。
灰度拉伸又叫对比度拉伸是最基本的一种灰度变换,使用简单的分段线性变换函数,可以提高灰度的动态范围,适用于低对比度图像的处理,增强对比度。
3、直方图是多种空间城处理技术的基础。
直方图操作能有效地用于图像增强。
除了提供有用的图像统计资料外,直方图固有的信息在其他图像处理应用中也是非常有用的,如图像压缩与分割。
医学图像处理实验报告实验名称:直方图均衡化实验姓名:gao jun qiang 学号:20105405班级:生医1001指导教师:……2013年6月5日一、 实验目的1、编程实现下列功能:读出存储的黑白灰度图象并显示,显示灰度直方图,对图象进行直方图均衡化处理,显示处理后图象及直方图,画出灰度变换曲线,并存储处理后图象。
二、 实验原理直方图均衡化处理的中心思想是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。
直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。
直方图均衡化是一种自动调节图象对比度质量的算法,使用的方法是灰度级变换:s = T(r) 。
它的基本思想是通过灰度级r 的概率密度函数p(rk ),求出灰度级变换T(r).灰度直方图的计算十分简单,依据定义在离散形式下有下面的公式成立:()1,1,0,-==L k n n k p k Λ (1) 公式中:k n 为图像中出现k s 级灰度的像素数,n 是图像像素总数,而n nk 即为频数。
计算累积直方图各项:()1,1,0,00-===∑∑==L k i p n n t k i ki i k Λ (2) 取整扩展:]5.0)1int[(+-=k k t L t (3)映射对应关系 :k t k ⇒三、实验代码及结果直方图均衡化实验代码:clc;close all;clear all;Imag = imread('lena.tiff');figure()imshow(Imag),title('原图像');ImagGray = rgb2gray(Imag);figure()imshow(ImagGray),title('灰度图像');[r,c] = size(ImagGray);%统计灰度直方图GrayPixNum = zeros(1,255);for i = 1:rfor j = 1:cGrayPixNum(1,ImagGray(i,j)) = GrayPixNum(1,ImagGray(i,j))+1;endend%对灰度直方图进行归一化GrayPixPro = GrayPixNum./(r*c);figure()plot(GrayPixPro),title('图像直方图');%-----------------------------------------------------------% -----------------------直方图均衡化------------------------%-----------------------------------------------------------%直方图累加GrayAdd = zeros(1,255);GrayAdd(1,1) = GrayPixPro(1,1);for i = 2:255GrayAdd(1,i) = GrayAdd(1,i-1)+GrayPixPro(1,i);endNewGray = round(GrayAdd.*254.+0.5);NewGrayPro = zeros(1,255);for i = 1:255GrayTemp = NewGray(1,i);NewGrayPro(1,GrayTemp) = NewGrayPro(1,GrayTemp)+GrayPixPro(1,i); endfigure()plot(NewGrayPro.*(r*c)),title('均衡化直方图');%有均衡化直方图和映射关系得到均衡化的图像NewImag = zeros(r,c);for i =1:rfor j = 1:cNewImag(i,j) = NewGray(1,ImagGray(i,j));endendNewImag = uint8(NewImag);figure()imshow(NewImag),title('均衡化的图像');figure()plot(NewGray),title('灰度变换曲线');实验结果:图1 原灰度图像图2 原图像的灰度直方图图3 经过直方图均衡化后的灰度图片图4 均衡化后的直方图图5 灰度变化曲线三、实验思考从上述实验结果可以看出,经过直方图均衡化后的图片的对比度更高,且边缘效果更高。
直⽅图均衡化原理与实现直⽅图均衡化(Histogram Equalization) ⼜称直⽅图平坦化,实质上是对图像进⾏⾮线性拉伸,重新分配图像象元值,使⼀定灰度范围内象元值的数量⼤致相等。
这样,原来直⽅图中间的峰顶部分对⽐度得到增强,⽽两侧的⾕底部分对⽐度降低,输出图像的直⽅图是⼀个较平的分段直⽅图:如果输出数据分段值较⼩的话,会产⽣粗略分类的视觉效果。
直⽅图是表⽰数字图像中每⼀灰度出现频率的统计关系。
直⽅图能给出图像灰度范围、每个灰度的频度和灰度的分布、整幅图像的平均明暗和对⽐度等概貌性描述。
灰度直⽅图是灰度级的函数, 反映的是图像中具有该灰度级像素的个数, 其横坐标是灰度级r, 纵坐标是该灰度级出现的频率( 即像素的个数) pr( r) , 整个坐标系描述的是图像灰度级的分布情况, 由此可以看出图像的灰度分布特性, 即若⼤部分像素集中在低灰度区域, 图像呈现暗的特性; 若像素集中在⾼灰度区域, 图像呈现亮的特性。
图1所⽰就是直⽅图均衡化, 即将随机分布的图像直⽅图修改成均匀分布的直⽅图。
基本思想是对原始图像的像素灰度做某种映射变换, 使变换后图像灰度的概率密度呈均匀分布。
这就意味着图像灰度的动态范围得到了增加, 提⾼了图像的对⽐度。
图1 直⽅图均衡化通过这种技术可以清晰地在直⽅图上看到图像亮度的分布情况, 并可按照需要对图像亮度调整。
另外,这种⽅法是可逆的, 如果已知均衡化函数, 就可以恢复原始直⽅图。
设变量r 代表图像中像素灰度级。
对灰度级进⾏归⼀化处理, 则0≤r≤1, 其中r= 0表⽰⿊, r= 1表⽰⽩。
对于⼀幅给定的图像来说, 每个像素值在[ 0,1] 的灰度级是随机的。
⽤概率密度函数来表⽰图像灰度级的分布。
为了有利于数字图像处理, 引⼊离散形式。
在离散形式下, ⽤代表离散灰度级, ⽤代表 , 并且下式成⽴:其中, 0≤≤1, k=0, 1, 2, …, n-1。
式中为图像中出现这种灰度的像素数, n是图像中的像素总数, ⽽就是概率论中的频数。
图像增强算法(直⽅图均衡化、拉普拉斯、Log、伽马变换)⼀、图像增强算法原理图像增强算法常见于对图像的亮度、对⽐度、饱和度、⾊调等进⾏调节,增加其清晰度,减少噪点等。
图像增强往往经过多个算法的组合,完成上述功能,⽐如图像去燥等同于低通滤波器,增加清晰度则为⾼通滤波器,当然增强⼀副图像是为最后获取图像有⽤信息服务为主。
⼀般的算法流程可为:图像去燥、增加清晰度(对⽐度)、灰度化或者获取图像边缘特征或者对图像进⾏卷积、⼆值化等,上述四个步骤往往可以通过不同的步骤进⾏实现,后续将针对此⽅⾯内容进⾏专题实验,列举其应⽤场景和处理特点。
本⽂章是⼀篇综合性⽂章,算是⼀篇抛砖引⽟的⽂章,有均衡化、提⾼对⽐度、降低对⽐度的算法。
1.1 基于直⽅图均衡化的图像增强图像对⽐度增强的⽅法可以分为两种:直接对⽐度增强⽅法,间接对⽐度增强⽅法。
直⽅图拉伸和直⽅图均衡化是常见的间接对⽐度增强⽅法。
直⽅图拉伸是利⽤对⽐度拉伸对直⽅图进⾏调整,扩⼤前景和背景灰度的差别,这种⽅法可以通过线性和⾮线性的⽅法来实现,其中ps中就是利⽤此⽅法提⾼对⽐度;直⽅图均衡化则是利⽤累积函数对灰度值进⾏调整,实现对⽐度的增强。
直⽅图均衡化处理原理:将原始图像的灰度图从⽐较集中的某个灰度区间均匀分布在整个灰度空间中,实现对图像的⾮线性拉伸,重新分配图像像素值。
算法应⽤场景:1、算法的本质是重新分布图像的像素值,增加了许多局部的对⽐度,整体的对⽐度没有进⾏太⼤改变,所以应⽤图像为图像有⽤数据的对⽐度相近是,例如:X光图像,可以将曝光过度或曝光不⾜照⽚进⾏更好的显⽰,或者是背景及前景太亮或太暗的图像⾮常有⽤。
2、算法当然也有缺点,具体表现为:变换后的图像灰度级减少,某些细节减少;某些图像有⾼峰值,则处理后对⽐度不⾃然的过分增强。
算法实现特点:1、均衡化过程:直⽅图均衡化保证在图像像素映射过程中原来的⼤⼩关系保持不变,即较亮的区域依旧较亮,较暗的依旧较暗,只是对⽐度增加,不能明暗颠倒;保证像素映射函数的值域在0和255之间。
数字图像处理作业(第三次)直方图处理第一题第二题(例3.6)1. 问题:1)编写函数Y=MyHisteq(X), 对灰度图象X进行直方图均衡化,得到均衡化后的图像Y,假设X的数据类型为uint8。
2)利用自己编写的直方图均衡化函数,重现例3.6中的实验,即对图3.16中的图像进行直方图均衡化。
2.程序:(1) 函数程序:function Y = MyHisteq(X)%对灰度图象X进行直方图均衡化,得到均衡化后的图像Y[m,n]=size(X);A=zeros(1,256);for k=0:255A(k+1)=length(find(X==k))/(m*n);endS1=zeros(1,256);for i=1:256for j=1:iS1(i)=A(j)+S1(i); %算SkendendS2=round(S1*256);for i=1:256B(i)=sum(A(find(S2==i)));endfigure,bar(0:255,B,'b');title('均衡化后的直方图');xlabel('灰度'),ylabel('出现概率')Y=X;for i=0:255Y(find(X==i))=S2(i+1);endend(2)主程序:X=imread('Fig0316(1)(top_left).tif');figure,imshow(X);Y=MyHisteq(X);figure,imshow(Y);3. 实验结果:第三题(例3.12)1. 问题:编写程序,重现例3.12中的实验,产生图3.27。
2.程序:X=imread('Fig0327(a)(tungsten_original).tif');figure,imshow(X);Y=histeq(X);figure,imshow(Y);E=4.0;k0=0.4;k1=0.02;k2=0.4;[m,n]=size(X);X1=X;Mg=sum(X1(:))/(m*n);Vg=sum(sum((X1-Mg).^2))/(m*n);for i=2:m-1for j=2:n-1X2=X1(i-1:i+1,j-1:j+1);Ms=sum(X2(:))/9;Vs=sum(sum((X2-Ms).^2))/9;if(Ms<=k0*Mg&&k1*Vg<=Vs&&Vs<=k2*Vg)X1(i,j)=E*X1(i,j);endendendfigure,imshow(X1);3. 实验结果:放大了约130倍的钨丝的SME图像:全局直方图均衡的结果:使用局部直方图统计增强后的图像:1. 问题:用自己编写编程实现中值滤波,用96页例3.14的图测试。
图像直⽅图的均衡化处理图的均衡化图像直⽅图的均衡化处理⼀,技术要求1.1,利⽤matlab提供的函数处理 (2)1.2,利⽤matlab⾃⾏编辑代码处理 (3)⼆,基本原理 (3)2.1,直⽅图的均衡化 (3)2.2,直⽅图的标准化 (3)三,建⽴模型描述 ......................................................................... 3~43.1,利⽤matlab提供的函数处理 (4)3.2,利⽤matlab⾃⾏编辑代码 (4)四,源程序代码 ............................................................................. 5~64.1,绘制图像直⽅图的代码 (5)4.2,绘制图像均衡化后直⽅图的代码 (5)4.3,显⽰均衡化后图像的代码 (6)五,调试过程及结论 ..................................................................... 6~85.1,在编辑窗⼝键⼊绘制直⽅图的源代码得到的输出结果为图2 (6)5.2,利⽤matlab函数绘制的图像直⽅图标准化的输出结果如图3..75.3,直⽅图均衡化输出结果如图4所⽰。
(8)六,⼼得体会 (9)七,参考⽂献 (9)图像直⽅图的均衡化处理⼀,技术要求1.1,利⽤matlab提供的函数处理利⽤matlab提供的函数画出⼀幅图像的直⽅图,对其进⾏均衡化和标准化处理,并⽐较均衡化(标准化)后图像和原图像的区别。
1.2,利⽤matlab⾃⾏编辑代码处理利⽤matlab⾃⾏编辑代码,实现⼀幅图像的直⽅图显⽰和均衡化的处理,同样⽐较处理前后两幅图像的区别,了解图像均衡化的效果和实际运⽤。
⼆,基本原理直⽅图是多种空域处理技术的基础。
它能有效的⽤于图像增强。
图像处理基础(8):图像的灰度直⽅图、直⽅图均衡化、直⽅图规定化(匹配)本⽂主要介绍了灰度直⽅图相关的处理,包括以下⼏个⽅⾯的内容:利⽤OpenCV 计算图像的灰度直⽅图,并绘制直⽅图曲线直⽅图均衡化的原理及实现直⽅图规定化(匹配)的原理及实现图像的灰度直⽅图⼀幅图像由不同灰度值的像素组成,图像中灰度的分布情况是该图像的⼀个重要特征。
图像的灰度直⽅图就描述了图像中灰度分布情况,能够很直观的展⽰出图像中各个灰度级所占的多少。
图像的灰度直⽅图是灰度级的函数,描述的是图像中具有该灰度级的像素的个数:其中,横坐标是灰度级,纵坐标是该灰度级出现的频率。
不过通常会将纵坐标归⼀化到[0,1]区间内,也就是将灰度级出现的频率(像素个数)除以图像中像素的总数。
灰度直⽅图的计算公式如下:p (r k )=n kMN其中,r k 是像素的灰度级,n k 是具有灰度r k 的像素的个数,MN 是图像中总的像素个数。
OpenCV 灰度直⽅图的计算直⽅图的计算是很简单的,⽆⾮是遍历图像的像素,统计每个灰度级的个数。
在OpenCV 中封装了直⽅图的计算函数calcHist ,为了更为通⽤该函数的参数有些复杂,其声明如下:void calcHist( const Mat* images, int nimages,const int* channels, InputArray mask,OutputArray hist, int dims, const int* histSize,const float** ranges, bool uniform = true, bool accumulate = false );该函数能够同时计算多个图像,多个通道,不同灰度范围的灰度直⽅图.其参数如下:images ,输⼊图像的数组,这些图像要有相同⼤⼤⼩,相同的深度(CV_8U CV_16U CV_32F ).nimages ,输⼊图像的个数channels ,要计算直⽅图的通道个数。
数字图像处理)实验报告
实验名称实验三直方图和图像的均衡化
实验时间
专业班级学号姓名
成绩教师评语:
一、实验目的
1、深入理解直方图的概念,学习VC++对话框中图形绘制的基本方法及步骤。
2、掌握直方图均衡化的原理。
掌握直方图均衡化实现图像增强。
二、实验内容
1、在VC6.0环境下,生成MFC应用程序框架。
2、在已生成的应用程序中,加BMP位图读取与显示的代码,从已有文件中读取bmp格式文件并在视图中显示。
3、在生成的MFC应用程序框架下建立对应的消息响应函数,实现图像直方图的显示和利用对话框显示图像的直方图。
4、学习实验指导书中给出的图像均衡化的代码,并添加消息响应函数实现功能。
三、实验原理具体操作步骤及结果截图
利用对话框实现图像的直方图显示:
1、在点运算的主菜单中添加一名为直方图的菜单资源,命名资源ID 为IDM_ZFT 。
2、利用类向导添加相应消息响应函数。
3、展开Resource选项中Dialog项,右键单击该项,选择Insert Dialog
项,添加一对话框资源,并命名为IDD_ZFT_DIALOG。
4、编辑对话框资源,添加一PICTURE控件,两个button控件,并分别设置相应的ID号(一个为ID_OK,一个为ID_CANCEL)并加入相应的消息响应函数。
5、在ID_OK的消息响应函数中加入直方图的绘制代码。
6、编译运行。
直方图代码:
long w,h;
long i,j;
w=m_DibHead->biWidth;
h=m_DibHead->biHeight;
long count[256];
memset(count,0,256);
long max=0;
for(i=0;i<h;i++)
for(j=0;j<w;j++)
{
count[*(m_Image+i*w+j)]++;
}
for(i=0;i<256;i++)
if(max<count[i])
max=count[i];
Cmydialog mydlg;
mydlg.data=count;
mydlg.m_max=max;
mydlg.DoModal();
截图:
直接利用消息响应函数实现直方图:
实现图像的均衡化:
1、在资源编辑器中添加一菜单项,给定一ID号。
用于表示直方图增
强的选项。
2、利用类向导添加相应的消息响映函数。
在函数体中加入下述代码。
if(m_DibHead->biBitCount!=8)
{
MessageBox("当前版本仅支持256色位图的操作!","系统提示!",MB_ICONINFORMATION|MB_OK);
return;
}
zftjh(m_Image,m_DibHead->biWidth,m_DibHead->biHeight);
Invalidate();
其中函数zftjh的实现代码如下:
zftjh(unsigned char *lpDib,long lWidth,long lHeight)
{
unsigned char *lpsrc;
long lresult(0);
long i,j;
unsigned char bMap[256];
long lCount[256];
for(i=0;i<256;i++)
lCount[i]=0;
for(i=0;i<lHeight;i++)
for(j=0;j<lWidth;j++)
{
lpsrc=lpDib+i*lWidth+j;
lCount[*lpsrc]++;
}
for(i=0;i<256;i++)
{
lresult=0;
for(j=0;j<=i;j++)
lresult+=lCount[j];
bMap[i]=(lresult*255)/lHeight/lWidth;
}
for(i=0;i<lHeight;i++)
for(j=0;j<lWidth;j++)
{
lpsrc=lpDib+i*lWidth+j;
*lpsrc=bMap[*lpsrc];
}
}
3、编译、运行。
查看结果。
未均衡化:
均衡化:
四、实验总结
经过本次的上机实验,我一方面加深了对VC++的使用,另一方面从对话框实现画直方图也让我认识到了VC++里面的资源都是通过一定的函数指向来联系的,所以这就要求我们拥有较高的函数基础和资源本身性质的了解性,这样使用起来才会更加得心应手。
特别的是在编写代码的时候需要注意函数的定义、初始化和一些不可缺的小细节。
五、思考题
1、写出在对话框中绘图的基本步骤。
答:首先,在menu中添加一项对话框画直方图的菜单资源,并添加消息响应函数;然后,插入一个dialog选项并命名,之后编辑对话框资源,创建一个新的以对话框名字添加的类,打开ok和cancel按钮对其进行属性和代码的编辑,注意期间进行成员函数的添加,否则会出现未定义,最后分别在ID_OK和最开始的消息响应函数下添加代码即可实现对话框画直方图的功能。
2、试说明为什么直方图均衡能实现图像的增强。
答:因为直方图均衡化是通过对在图像中像素个数多的灰度级进行展宽,而对像素个数少的灰度级进行缩减从而实现图像的增强,有效的实现了亮度的增强。