直方图均衡化实验报告
数字图像处理实验报告直方图均衡化
数字图像处理实验报告直⽅图均衡化课程设计课程名称数字图像处理题⽬名称直⽅图均衡化学⽣学院信息⼯程学院专业班级 08级电信2班学号 3208002664 学⽣姓名陈慕仪指导教师曹江中2011年7 ⽉ 1 ⽇设计题⽬:直⽅图均衡化1、直⽅图的理论基础:(1)直⽅图概念:灰度直⽅图表⽰图像中每种灰度出现的频率。
(2)直⽅图的作⽤:反映⼀幅图像的灰度分布特性(3)直⽅图的计算:式中:n k 为图像中出现r k 级灰度的像素数,n 是图像像素总数,⽽n k /n 即为频数。
2、设计⽬的:产⽣⼀幅灰度级分布具有均匀概率密度的图像,扩展像素取值的动态范围,达到了图象增强的⽬的。
3、直⽅图均衡化的效果:1)变换后直⽅图趋向平坦,灰级减少,灰度合并。
2)原始象含有象素数多的⼏个灰级间隔被拉⼤了,压缩的只是象素数少的⼏个灰度级,实际视觉能够接收的信息量⼤⼤地增强了,增加了图象的反差。
同时,也增加了图象的可视粒度。
4、离散情况下的直⽅图均衡化的算法:A 、列出原始图像的灰度级B 、统计各灰度级的像素数⽬C 、计算原始图像直⽅图各灰度级的频数D 、计算累积分布函数F 、应⽤以下公式计算映射后的输出图像的灰度级,P为输出图像灰度级的个数,其中INT 为取整符号:G 、⽤的映射关系修改原始图像的灰度级,从⽽获得直⽅图近似为均匀分布的输出图像。
3、源程序代码// cqxhistView.cpp : implementation of the CCqxhistView class #include "stdafx.h" #include "cqxhist.h"#include "cqxhistDoc.h" #include "cqxhistView.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__; #endif///////////////////////////////////////////////////////////////////////////// // CCqxhistViewIMPLEMENT_DYNCREATE(CCqxhistView, CView)BEGIN_MESSAGE_MAP(CCqxhistView, CView)1,,1,0,-=L j f j 1,,1,0,-=L j n j 1,,1,0,/)(-==L j n n f P j j f 1,,,1,0,)()(0-==∑=L k j f P f C k j jf]5.0)()[(min min max ++-=g f C g g INT g i nn r p kk =)(1,,2,1,010-=≤≤l k r k//{{AFX_MSG_MAP(CCqxhistView)ON_COMMAND(ID_OPEN_IMAGE, OnOpenImage)ON_COMMAND(ID_HIST_IMAGE, OnHistImage)//}}AFX_MSG_MAP// Standard printing commandsON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)END_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////// // CCqxhistView construction/destruction CCqxhistView::CCqxhistView(){// TODO: add construction code here}CCqxhistView::~CCqxhistView(){}BOOL CCqxhistView::PreCreateWindow(CREATESTRUCT& cs){// TODO: Modify the Window class or styles here by modifying// the CREATESTRUCT csreturn CView::PreCreateWindow(cs);}///////////////////////////////////////////////////////////////////////////// // CCqxhistView drawingvoid CCqxhistView::OnDraw(CDC* pDC){CCqxhistDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereif(m_dib.m_bLoaded==true) //判断是否加载图像{//获取图像宽和⾼int nw=m_dib.GetDIBWidth();int nh=m_dib.GetDIBHeight();// 显⽰图像(具体的参数见CDIB类的该函数说明)m_dib.ShowDIB(pDC,10,10,nw,nh,m_dib.m_pDIBData,m_dib.m_pBMI);m_dib.ShowDIB(pDC,400,10,nw,nh,m_dib.m_pDumpDIBData,m_dib.m_pBMI); } if(m_bHist==true){//绘制原图像的直⽅图CString str;int nh=m_dib.GetDIBHeight();int i;// 画坐标轴// 绘制坐标轴pDC->MoveTo(410,nh+20); //(410,nh+20 )是直⽅图的左上⾓坐标// 垂直轴pDC->LineTo(410,nh+200);//(410,nh+200 )是直⽅图的左下⾓坐标// ⽔平轴pDC->LineTo(710,nh+200);//(710,nh+200 )是直⽅图的右下⾓坐标// 写X轴刻度值str.Format("0");pDC->TextOut(410, nh+200+10, str);str.Format("50");pDC->TextOut(460, nh+200+10, str); str.Format("100");pDC->TextOut(510, nh+200+10, str); str.Format("150");pDC->TextOut(560, nh+200+10, str); str.Format("200");pDC->TextOut(610, nh+200+10, str); str.Format("255");pDC->TextOut(665, nh+200+10, str); // 绘制X轴刻度for ( i = 0; i < 256; i += 25){if ((i & 1) == 0){// 10的倍数pDC->MoveTo(i + 10, nh+200-2); pDC->LineTo(i + 10, nh+200+2);}else{// 10的倍数pDC->MoveTo(i + 10, nh+200-2); pDC->LineTo(i + 10, nh+200+2);}}// 绘制X轴箭头pDC->MoveTo(705,nh+200-5); pDC->LineTo(710,nh+200);pDC->LineTo(705,nh+200+5);// 绘制y轴箭头pDC->MoveTo(410,nh+20);pDC->LineTo(405,nh+20+5);pDC->MoveTo(410,nh+20);pDC->LineTo(415,nh+20+5);int max=0;for(i=0;i<256;i++)if(m_yuan[i]>max)max=m_yuan[i];for(i=0;i<256;i++){pDC->MoveTo(410+i,nh+200);pDC->LineTo(410+i,nh+200-(m_yuan[i]*160/max));}}if(m_bHist==true){//绘画直⽅图CString str;int nh=m_dib.GetDIBHeight();int i;// 画坐标轴// 绘制坐标轴pDC->MoveTo(10,nh+20); //(10,nh+20 )是直⽅图的左上⾓坐标// 垂直轴pDC->LineTo(10,nh+200);//(10,nh+200 )是直⽅图的左下⾓坐标// ⽔平轴pDC->LineTo(310,nh+200);//(310,nh+200 )是直⽅图的右下⾓坐标// 写X轴刻度值str.Format("0");pDC->TextOut(10, nh+200+10, str);str.Format("50");pDC->TextOut(60, nh+200+10, str);str.Format("100");pDC->TextOut(110, nh+200+10, str);str.Format("150");pDC->TextOut(160, nh+200+10, str);str.Format("200");pDC->TextOut(210, nh+200+10, str);str.Format("255");pDC->TextOut(265, nh+200+10, str);// 绘制X轴刻度for ( i = 0; i < 256; i += 25){if ((i & 1) == 0){// 10的倍数pDC->MoveTo(i + 10, nh+200-2);pDC->LineTo(i + 10, nh+200+2);}else{// 10的倍数pDC->MoveTo(i + 10, nh+200-2);pDC->LineTo(i + 10, nh+200+2);}}// 绘制X轴箭头pDC->MoveTo(305,nh+200-5);pDC->LineTo(310,nh+200);pDC->LineTo(305,nh+200+5);// 绘制y轴箭头pDC->MoveTo(10,nh+20);pDC->LineTo(5,nh+20+5);pDC->MoveTo(10,nh+20);pDC->LineTo(15,nh+20+5);int max=0;for(i=0;i<256;i++)if(m_hist[i]>max)max=m_hist[i];for(i=0;i<256;i++){pDC->MoveTo(10+i,nh+200);pDC->LineTo(10+i,nh+200-(m_hist[i]*160/max));}}}///////////////////////////////////////////////////////////////////////////// // CCqxhistView printing BOOL CCqxhistView::OnPreparePrinting(CPrintInfo* pInfo){// default preparationreturn DoPreparePrinting(pInfo);}void CCqxhistView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/){// TODO: add extra initialization before printing}void CCqxhistView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/){// TODO: add cleanup after printing}///////////////////////////////////////////////////////////////////////////// // CCqxhistView diagnostics#ifdef _DEBUGvoid CCqxhistView::AssertValid() const{CView::AssertValid();}void CCqxhistView::Dump(CDumpContext& dc) const{CView::Dump(dc);}CCqxhistDoc* CCqxhistView::GetDocument() // non-debug version is inline{ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CCqxhistDoc)));return (CCqxhistDoc*)m_pDocument;}#endif //_DEBUG///////////////////////////////////////////////////////////////////////////// // CCqxhistView message handlersvoid CCqxhistView::OnOpenImage(){// TODO: Add your command handler code here// TODO: Add your command handler code herestatic char szFilter[]="BMP⽂件(*.bmp)|*.bmp||"; //定义过滤⽂件的类型 CFileDialog dlg(TRUE,"bmp",NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilter);//定义⽂件对话框对象 CString filename;int ret=dlg.DoModal(); //运⾏打开⽂件对⽅框if(ret==IDOK){filename=dlg.GetFileName(); //获取所选择图像的路径 m_dib.LoadFromFile(filename); //加载图像if(!m_dib.m_bLoaded) //判断是否加载图像成功{AfxMessageBox("图像打不开");return;}for(int i=0;i<256;i++) //初始化直⽅图数组{ m_hist[i]=0;m_yuan[i]=0;}m_bHist=false;}{int nw=m_dib.GetDIBWidth();int nh=m_dib.GetDIBHeight();for(int j=0;jfor(int i=0;i{BYTE temp=m_dib.m_pdata[j*nw+i];m_yuan[temp]++;}}Invalidate(1); //刷新屏幕}void CCqxhistView::OnHistImage(){// TODO: Add your command handler code here//功能:实现直⽅图均衡化////////////////////////////判断图像是否打开,没打开,则弹出提⽰框并退出函数if(!m_dib.m_bLoaded){AfxMessageBox("图像还打开,请先打开图像!");return;}//获取图像宽和⾼int nw=m_dib.GetDIBWidth();int nh=m_dib.GetDIBHeight();int i,j,k;int count[256]={0};//定义⼀个数组,⽤于存放灰度级个数float p[256];//定义⼀个数组,⽤于存放灰度级出现频率//对图像进⾏直⽅图均衡化处理for(i=0;ifor(j=0;j{k=m_dib.m_pdata[i*nw+j];//计算灰度级个数count[k]++;}for(k=0;k<256;k++)p[k]=count[k]/(nw*nh*1.0f);float c[256]={0};float sum=0.0;int ngray[256];//新的灰度级for(k=0;k<256;k++)//计算累积频率{sum+=p[k];c[k]=sum;ngray[k]=(int)(255.0*c[k]+0.5);}for(i=0;ifor(j=0;j{k=m_dib.m_pdata[i*nw+j];m_dib.m_pdata[i*nw+j]=ngray[k];}{int nw=m_dib.GetDIBWidth();int nh=m_dib.GetDIBHeight();for(int j=0;jfor(int i=0;i{BYTE temp=m_dib.m_pdata[j*nw+i];m_hist[temp]++;}}//将修改的m_pdata的数据赋值给m_pDIBData,以显⽰修改的结果m_dib.UpdateData();m_bHist=true;//将修改的m_pdata的数据赋值给m_pDIBData,以显⽰修改的结果 m_dib.UpdateData(); //刷新屏幕Invalidate();}4、实验结果C++编程结果:。
实验三 直方图均衡化及空域滤波增强
实验三直方图均衡化及空域滤波一、实验目的1.掌握灰度直方图的概念及直力图均衡化过程;2.掌握空域滤波的基本原理及方法;3.掌握用MATLAB语言进行图像的空域滤波的方法。
二、实验原理1、直方图均衡化图像增强是指按特定的需要突出一幅图像中的某些信息,同时,消弱或去除某些不需要的信息的处理方法。
其主要目的是处理后的图像对某些特定的应用比原来的图像更加有效。
图像增强技术主要有直方图修改处理、图像平滑化处理、图像尖锐化处理和彩色处理技术等。
本实验以直方图均衡化增强图像对比度的方法为主要内容,其他方法同学们可以在课后自行联系。
直方图是多种空间城处理技术的基础。
直方图操作能有效地用于图像增强。
除了提供有用的图像统计资料外,直方图固有的信息在其他图像处理应用中也是非常有用的,如图像压缩与分割。
直方图在软件中易于计算,也适用于商用硬件设备,因此,它们成为了实时图像处理的一个流行工具。
直方图是图像的最基本的统计特征,它反映的是图像的灰度值的分布情况。
直方图均衡化的目的是使图像在整个灰度值动态变化范围内的分布均匀化,改善图像的亮度分布状态,增强图像的视觉效果。
灰度直方图是图像预处理中涉及最广泛的基本概念之一。
图像的直方图事实上就是图像的亮度分布的概率密度函数,是一幅图像的所有象素集合的最基本的统计规律。
直方图反映了图像的明暗分布规律,可以通过图像变换进行直方图调整,获得较好的视觉效果。
直方图均衡化是通过灰度变换将一幅图像转换为另一幅具有均衡直方图,即在每个灰度级上都具有相同的象素点数的过程。
下面给出直方图均衡化增强图像对比度的MATLAB程序:I=imread('pout.tif'); % 读入原图像J=histeq(I); %对原图像进行直方图均衡化处理%对直方图均衡化后图像进行屏幕控制;作一幅子图,并排两幅图的第1幅subplot(2,2,1);imshow(I); %显示原图像title('原图像'); %给原图像加标题名subplot(2,2,2);imshow(J);title('直方图均衡化后的图像') ;subplot(2,2,3);imhist(I,64); %将原图像直方图显示为64级灰度title('原图像直方图') ; %给原图像直方图加标题名subplot(2,2,4);imhist(J,64) ; %将均衡化后图像的直方图显示为64级灰度title('均衡变换后的直方图') ; %给均衡化后图像直方图加标题名处理后的图像直方图分布更均匀了,图像在每个灰度级上都有像素点。
直方图均衡化实验报告
多媒体技术实验报告项目名称: 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图片数据很大时, 可能存在内存溢出的现象。
直方图均衡化算法实现实验报告
南京信息工程大学实验(实习)报告
实验(实习)名称直方图均衡化算法实现实验(实习)日期得分指导教师专业年级班次姓名学号
一、实验目的:
理解直方图均衡化算法的原理,掌握算法的实现
二、实验内容:
在Matlab中编程实现直方图均衡化算法。
三、实验要求:
1. 读入一幅图像()
提示:使用imread
2. 直方图均衡化
算法处理过程请参看第四章ppt
3. 显示处理前和处理后的灰度图像
提示:subplot,imshow
4. 撰写实验报告并附上所用程序和结果。
三.实验步骤:
在matlab命令窗口执行:
>> f=imread('');
>> g=histeq(f);
>> subplot(1,2,1);
>> imshow(f);
>> subplot(1,2,2);
>> imshow(g);
运行结果(截图)
同一个图像窗口左右显示处理前后的图像。
数字图像处理实验报告直方图均衡化
数字图像处理实验报告实验名称:直方图均衡化姓名:班级:学号:专业:电子信息工程(2+2)指导教师:陈华华实验日期:2012年5月24日直方图均衡化图像对比度增强的方法可以分成两类:一类是直接对比度增强方法;另一类是间接对比度增强方法。
直方图均衡化是最常见的间接对比度增强方法。
直方图均衡化则通过使用累积函数对灰度值进行“调整”以实现对比度的增强。
直方图均衡化处理的“中心思想”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。
直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。
直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布。
缺点:1)变换后图像的灰度级减少,某些细节消失;2)某些图像,如直方图有高峰,经处理后对比度不自然的过分增强。
直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法。
这种方法通常用来增加许多图像的局部对比度,尤其是当图像的有用数据的对比度相当接近的时候。
通过这种方法,亮度可以更好地在直方图上分布。
这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。
直方图均衡化的基本思想是把原始图的直方图变换为均匀分布的形式,这样就增加了象素灰度值的动态范围从而可达到增强图像整体对比度的效果。
设原始图像在(x,y)处的灰度为f,而改变后的图像为g,则对图像增强的方法可表述为将在(x,y)处的灰度f映射为g。
在灰度直方图均衡化处理中对图像的映射函数可定义为:g = EQ (f),这个映射函数EQ(f)必须满足两个条件(其中L为图像的灰度级数):(1)EQ(f)在0≤f≤L-1范围内是一个单值单增函数。
这是为了保证增强处理没有打乱原始图像的灰度排列次序,原图各灰度级在变换后仍保持从黑到白(或从白到黑)的排列。
(2)对于0≤f≤L-1有0≤g≤L-1,这个条件保证了变换前后灰度值动态范围的一致性。
直方图均衡化和匹配报告
直方图均衡化和匹配报告一.实验目的:加强直方图均衡化和直方图匹配的图像增强技术的认识和了解; 学会用Matlab 中的下列函数对输入图像进行上述2类运算; 感受各种不同的直方图图像增强处理方法对最终图像效果的影响; 二.实验内容:1.熟悉Matlab 文件中有关Imhist 和histeq 函数的使用说明,充分理解其使用方法并能运用它们完成实验内容。
2.将mountain.jpg 图像文件读入Matlab ,对其作直方图均衡化。
显示运算前后该图像的直方图,处理后的图像。
3.对mountain.jpg 图像做直方图匹配运算,显示运算前后该图像的直方图,处理后的图像和灰度变换函数。
直方图反映灰度等级的分布情况,本实验指定的直方图如下:1400×rr ≤5 7000-310×r 5<r ≤20 900-5×r 20<r ≤180 -1440+8×r 180<r ≤225 3060-12×r225<r ≤2554.利用mountain.jpg 图像的直方图(imhist 函数可生成),编写直方图均衡化函数,显示灰度变换函数。
三.实验结果与分析:1.图像均衡化处理前后的直方图和图像对比原图像 均衡化后的图像n =原图像直方图均衡化后的直方图由处理后的图像可以看出,图像的灰度值减少,图像对比度明显增强,但是导致很多地方的细节模糊,看不清楚;而且有些地方过分增强,严重干扰清晰度。
2.直方图匹配处理前后图像对比原图像处理后图像原图像直方图直方图匹配运算后的直方图直方图匹配运算函数采用直方图匹配运算后,发现效果明显比直接均衡化的效果好的多,将一些重要的细节突出来了,对比度明显增强,但是有些地方色彩过于暗淡,灰度值过高,影响了图像的美观,但用于进行图像对比分析还是比较实用的。
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 灰度变化曲线三、实验思考从上述实验结果可以看出,经过直方图均衡化后的图片的对比度更高,且边缘效果更高。
matlab 直方图均衡实验报告
基于直方图的灰度级修正班级:电子信息科学与技术0901班姓名:学号:设计时间: 2012年5月24日一 设计课题:基于直方图的灰度级修正二 设计内容及要求:实验原理: 1.直方图均衡化处理技术是用累积分布函数作变换函数的直方图修正方法;2.用累积分布函数作为变换函数可产生一幅灰度级分布具有均匀概率密度的图像。
均衡步骤:1、统计原始图像的直方图,求出)(k r r P ;2、用累积分布函数作变换∑==kj j r k r P s 0)( ,求变换后的新灰度;3、用新灰度代替旧灰度,求出)(k s s P ,这一步是近似的,力求合理,同时把灰度相等的或相近的合在一起。
设计要求:1. 利用fopen 等函数打开*.dat 文件,采用for 循环统计图像里各灰度级的个数,并用换图函数表示出来。
2. 将打开的图像,采用直方图均衡对原始图像进行灰度级转换,并绘出其灰度直方图。
三 程序设计及其说明:本程序采用matlab GUI 绘图来实现,操作界面、菜单内容如下:图1 操作界面图2 菜单内容程序特色:1.原始图像灰度直方图统计算法一for l=0:255for i=1:rowif fid(i,1)==lh(l+1)=h(l+1)+1;endendend2. 原始图像灰度直方图统计算法二for i=1:rowh(fid(i)+1)=h(fid(i)+1)+1;end由主要代码部分可以看出:算法二算法复杂度很小,这是利用fopen打开文件的特色来决定的,它读入数组时是m行1列。
四实验结果及分析:灰度直方图统计:原始图像与均衡后图像灰度直方图(以LENA女孩图像为例)不同亮度图像直方图均衡效果显示1. LENA 图像 (1)正常图5 LENA 正常 原始及均衡后图像显示(2)高亮度图3 原始图像直方图图4 图像均衡后直方图图6 LENA高光原始及均衡后图像显示(3)偏暗图7 LENA偏暗原始及均衡后图像显示2.couple图像(1)正常图8 couple正常原始及均衡后图像显示图9 couple高亮原始及均衡后图像显示(3)偏暗图10 couple偏暗原始及均衡后图像显示3.NBA图像(1)正常图11 NBA正常原始及均衡后图像显示(3)偏暗图13 NBA偏暗原始及均衡后图像显示不同亮度的原始图像与均衡后图像灰度直方图1. LENA图像(1)正常(2)高亮度(3)偏暗图16 原始图像直方图图17 图像均衡后直方图图14 原始图像直方图图15 图像均衡后直方图2. couple 图像 (1)正常(2)高亮度图20 原始图像直方图图21 图像均衡后直方图图18 原始图像直方图图19 图像均衡后直方图(3)偏暗3. NBA 图像 (1)正常图24 原始图像直方图图25 图像均衡后直方图图22 原始图像直方图图23 图像均衡后直方图(2)高亮度(3)偏暗图28 原始图像直方图图29 图像均衡后直方图图26 原始图像直方图图27 图像均衡后直方图结果分析:通过几个图像显示结果可以看出:直方图均衡结果使图像亮度有所提高,所以它对比较暗的图像显示的更加清晰,而太亮的图像或曝光过度的图像,经过直方图均衡,效果不是很好,但是轮廓勾画的会明显些。
数字图像处理实验一-直方图均衡化
实验一数字图像处理编程实习(设计性实验)一、实验名称:数字图像处理编程实验一之灰度直方图统计与均衡化。
二、实验目的和要求:本设计性实验专为印刷工程专业的《数字图像处理》课程设计。
熟悉Matlab与Visual C++编程环境,实现对输入图像进行灰度直方图均衡化处理。
通过本实验教学环节,可以使学生对图像文件格式、图像文件的读写、图像处理程序的基本结构、处理方式和编程基本方法有进一步的认识,获得对图像处理原理和编程方法的进一步认识。
实验的基本要求是:利用Matlab或Visual C++编程环境编制图像处理程序,对一幅灰度图像进行灰度直方图统计与均衡化处理。
三、实验基本内容:1.图像处理程序用户界面设计;2.灰度直方图统计与均衡化;四、实验设备及环境:1.计算机;2.Matlab与Visual C++编程环境。
五、实验原理:1、数字图像直方图均衡化处理原理:A)图像直方图统计:根据图像的灰度等级统计该灰度等级的象素个数;B)图像直方图均衡化:直方图均衡化是将原图像通过某种变换,得到一幅灰度直方图为均匀分布的新图像的方法。
具体为:1)统计图像直方图;2)计算归一化的累计直方图;3)计算均衡后的直方图sk=int[(N-1)tk+0.5];4)根据均衡后的直方图将图像的每一个像素都映射到新的直方图上;六、实验具体要求:1.用户界面设计:用户界面可以自由设计,但应包括如下物件:窗体、菜单或命令按钮、图像显示框。
程序功能:图像像素行列数输入、打开图像、图像灰度直方图统计、图像灰度直方图均衡化、图像存储、退出。
七、对程序和实验报告的要求:1.将编制完成的Matlab或Visual C++程序作为附件交给实习老师;2.实验报告:所要求具有下列内容:图像处理程序编制的总体方案;程序用户界面的设计思路;图像处理算法;遇到的问题和解决过程;结果分析。
八、附件:附:实习示例程序:%《数字图像处理》课程实习%图像文件直方图统计显示实验程序by 武汉大学印刷与包装系易尧华I=imread('C:\Documents and Settings\hapxqpy\桌面\test-yy.bmp'); %将图像文件testimage.bmp的数据读入并赋值给变量I;figure(1); %新建用于图像显示的窗口;imshow(I); %在窗口中显示图像;figure(2); %新建用于图像直方图的窗口;imhist(I); %在窗口中显示图像直方图;J=histeq(I); %图像直方图均衡化处理;figure(3); %新建用于图像直方图的窗口;imshow(J); %在窗口中显示均衡化后的图像;figure(4); %新建用于显示均衡化后的图像直方图;imhist(J); %在窗口中显示均衡化后图像直方图;。
直方图均衡化实验报告
直方图均衡化实验报告直方图均衡化实验报告引言:直方图均衡化是一种常用的图像处理技术,它可以增强图像的对比度和细节,使得图像更加清晰明亮。
本实验旨在通过实际操作验证直方图均衡化的效果,并探讨其在不同场景下的应用。
实验步骤:1. 图像获取与预处理:选择一张高对比度的彩色图像作为实验对象,通过图像处理软件将其转换为灰度图像。
确保图像的亮度范围适中,避免过亮或过暗的情况。
2. 直方图均衡化算法:实现直方图均衡化算法的代码,可以使用Python等编程语言。
算法的核心思想是将原始图像的像素值映射到新的像素值,使得新图像的直方图均匀分布在整个灰度范围内。
3. 实验结果展示:将经过直方图均衡化处理后的图像与原始图像进行对比展示。
通过观察图像的对比度、亮度和细节等方面的变化,评估直方图均衡化算法的效果。
实验结果与分析:经过直方图均衡化处理后,图像的对比度明显增强,细节更加清晰可见。
原本过亮或过暗的区域得到了适当的修正,使得整个图像的亮度分布更加均匀。
同时,图像中的细节也得到了突出,使得观察者能够更好地识别和分析图像中的内容。
在实际应用中,直方图均衡化可以用于图像增强、目标检测、图像匹配等领域。
例如,在安防监控系统中,直方图均衡化可以提高图像的对比度,使得目标物体更加明显,有利于目标检测和识别。
在医学图像处理中,直方图均衡化可以增强图像的细节,有助于医生对病灶的判断和诊断。
然而,直方图均衡化也存在一些局限性。
首先,直方图均衡化是一种全局操作,对整个图像进行处理,可能会导致某些局部细节的损失。
其次,直方图均衡化对于亮度变化较大的图像效果较差,可能会导致过度亮化或过度暗化的问题。
因此,在实际应用中,需要根据具体情况选择合适的图像处理方法。
结论:通过本次实验,我们验证了直方图均衡化在图像处理中的有效性。
直方图均衡化可以增强图像的对比度和细节,使得图像更加清晰明亮。
然而,直方图均衡化也存在一些局限性,需要根据具体情况选择合适的图像处理方法。
直方图均衡化和直方图规定化-实验报告
一、实验目的掌握直方图均衡化和直方图规定化的图像增强方法掌握图像平滑滤波和锐化滤波的模板计算方法二、实验内容:1. 使用IPT中imhist,histeq函数进行直方图的均衡化和规定化,并显示结果2. 编写myhisteq函数实现直方图均衡化,与1中结果进行对比3. 给读取的图像叠加椒盐噪音(imnoise),分别使用均值滤波和中值滤波进行去噪,并对比图像处理的结果(使用IPT函数)4. 自定义3*3模板矩阵F,编写myfilter函数实现模板和图像的卷积运算,设计模板矩阵,实现图像的平滑和锐化。
三、实验代码及结果(1) 直方图的均衡化和规定化clc;clear;I= imread('H:\image\jpg\flower.jpg');I= rgb2gray(I) ; %将图像转换为灰度图像J= histeq( I) ; %对I 进行直方图均衡化figure,subplot( 2,2,1) ,imshow(I) ,title('原始图像') ;subplot (2,2,2), imshow(J), title('直方图均衡化后的图像');subplot( 2,2,3) ,imhist(I, 64), title( '原始的直方图');subplot( 2,2,4) ,imhist(J,64) ,title(' 均衡化后的直方图');clc;clear;I= imread('H:\image\jpg\flower.jpg');I= rgb2gray(I) ; %将图像转换为灰度图像h=0:255;h=1-h/255;J= histeq( I,h) ;figure,subplot( 2,3,1) ,imshow(I) ,title('原图像') ; subplot( 2,3,2) ,imhist(I, 64), title( '原图像的直方图'); subplot (2,3,3), stem(h), title('目标直方图');subplot( 2,3,4) ,imshow(I, 64), title( '规定化后的图像'); subplot( 2,3,5) ,imhist(J,64) ,title(' 规定化后的直方图');二、myhisteq函数实现直方图均衡化I = imread('j:\image\jpg\flower.jpg');I = rgb2gray(I);[height,width] = size(I);figuresubplot(2,2,1)imshow(I)%显示原始图像title('原图像');subplot(2,2,2)imhist(I)%显示原始图像直方图title('原图像直方图');%进行像素灰度统计;s = zeros(1,256);%统计各灰度数目,共256个灰度级for i = 1:heightfor j = 1: widths(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一endend%计算灰度分布密度p = zeros(1,256);for i = 1:256p(i) = s(i) / (height * width * 1.0);end%计算累计直方图分布c = zeros(1,256);c(1) = p(1);for i = 2:256c(i) = c(i - 1) + p(i);end%累计分布取整,将其数值归一化为1~256c = uint8(255 .* c + 0.5);%对图像进行均衡化for i = 1:heightfor j = 1: widthI(i,j) = c(I(i,j)+1);endendsubplot(2,2,3)imshow(I)%显示均衡化后的图像title('均衡化后图像');subplot(2,2,4)imhist(I)%显显示均衡化后的图像的直方图title('均衡化后图像的直方图');三、使用均值滤波和中值滤波进行去噪I= imread('j:\image\jpg\flower.jpg');I= rgb2gray(I) ; %将图像转换为灰度图像I1 = imnoise(I,'salt & pepper',0.02);%0.02是噪声强度,其值越大噪声越多h=fspecial('average',5);J1=filter2(h,I1,'valid');J2= imfilter(I1,h,'full');figure,subplot(3,3,1),imshow(I1);title('原始椒盐噪声图像图1');subplot(3,3,2),imshow(uint8(J1));title('filter2均值滤波图2');subplot(3,3,3),imshow(J2);title('imfilter均值滤波图3');J3 = medfilt2(I1,[5,5]);subplot(3,3,4),imshow(J3),title('中值滤波效果图4');G1= histeq(I1);subplot(3,3,5),imhist(G1,64),title('原图均衡化后的直方图');G2= histeq(J1);subplot(3,3,6),imhist(uint8(G2),64),title('图2均衡化后直方图'); G3= histeq(J2);subplot(3,3,7),imhist(G3,64),title('图3均衡化后直方图');G4= histeq(J3);subplot(3,3,8),imhist(G4,64),title('图4均衡化后直方图');问题:对于filter2均值滤波均衡化直方图不显示,不知道原因。
直方图均衡实验报告
数字图像处理实验报告实验二图像直方图均衡姓名:*******学号:*********专业:************一.实验目的学习并掌握图像直方图均衡的基本理论,并通过分析均衡前后的图像验证课堂教学内容,总结直方图均衡的特点。
二.实验内容对图像 img2 进行直方图均衡(img2为X光片图像)1.对比均衡前后图像的直方图及特点,①图形显示其直方图以及灰度映射关系②计算以下参数:概率非零灰度数,概率非零灰度中最大概率、最小概率、最大最小概率之比。
③统计图像中概率大于平均概率的灰度级数;④计算非零概率的平均值和方差⑤您认为哪些参数能够表现图像直方图分布的均匀程度?试提取相关参数进行测试。
2.找一到两幅图像重复上述实验。
3.通过实验结果对比,能得出什么结论?三、实验报告要求1.源程序(C或Matlab):(1).画直方图的Matlab程序filname='E:\课件\大三下\图像处理\实验二\1.bmp'; //打开文件A=imread(filname); //读取文件信息imhist(A); //画出图像文件的直方图(2)C程序#include<stdio.h>#include<windows.h>#include<string.h>#include<math.h>BITMAPFILEHEADER bfh;BITMAPINFOHEADER bih;typedef struct PP{unsigned char GRAY;}PIXEL;////画出灰度映射关系图////void draw(double s[]){FILE *fout,*fin;int i,j;PIXEL p[256][256];BITMAPFILEHEADER m_bfh;BITMAPINFOHEADER m_bih;RGBQUAD colorPanel[256];fin=fopen("1.bmp","rb");fread(&m_bfh,1,sizeof(BITMAPFILEHEADER),fin);fread(&m_bih,1,sizeof(BITMAPINFOHEADER),fin);fread(colorPanel,256,sizeof(RGBQUAD),fin);fclose(fin);fout=fopen("Gray mapping relationship.bmp","wb");m_bih.biWidth=256;m_bih.biHeight=256;m_bih.biSizeImage=256*256;m_bfh.bfSize=m_bfh.bfOffBits+m_bih.biSizeImage;for(i=0;i<256;i++)for(j=0;j<256;j++) p[i][j].GRAY=255;for(i=0;i<256;i++){j=(int)s[i];p[i][j].GRAY=0;}fwrite(&m_bfh,1,sizeof(BITMAPFILEHEADER),fout);fwrite(&m_bih,1,sizeof(BITMAPINFOHEADER),fout);fwrite(colorPanel,256,sizeof(RGBQUAD),fout);fwrite(p,256*256,1,fout);fclose(fout);}////统计概率非零灰度数子函数 ///double nonzero(double p[])int i;double sum=0;for(i=0;i<256;i++)if(p[i]!=0) sum=sum+1;printf("概率非零灰度数:%.2f\n",sum);return sum;}////找到最大概率子函数////double lmax(double p[]){int i;double max;for(i=0;i<256;i++) //对max初始化if(p[i]!=0){max=p[i];break;}for(i=0;i<256;i++)if(p[i]!=0&&p[i]>max) max=p[i]; //找出概率非零最大值printf("概率非零最大值:%lf\n",max);return max;}////找到最小概率子函数////double lmin(double p[]){int i;double min;for(i=0;i<256;i++) //对min初始化if(p[i]!=0){min=p[i];break;}for(i=0;i<256;i++)if(p[i]!=0&&p[i]<min) min=p[i]; //找出概率非零最小值printf("概率非零最小值:%lf\n",min);return min;}////求最大最小概率之比子函数////double rate(double max,double min){double r;r=max/min;printf("最大最小概率之比:%lf\n",r);return r;}////统计图像中概率大于平均概率的灰度级数子函数 //// double lager(double p[]){int i;double sum=0;for(i=0;i<256;i++)if(p[i]>1.0/256) sum=sum+1;printf("图像中概率大于平均概率的灰度级数:%lf\n",sum);return sum;}////求非零概率的平均值的子函数////double average(double sum){double aver;aver=1.0/sum;printf("非零概率的平均值:%lf\n",aver);return aver;}////求非零概率的方差的子函数////double variance(double sum,double p[],double aver){int i;double asum=0,var;for(i=0;i<256;i++)if(p[i]!=0) asum=asum+pow((p[i]-aver),2);//printf("%lf\n",asum);var=asum/sum;printf("非零概率的方差:%lf\n",var);return var;}/////主函数//////int main(){FILE *fin,*fout;RGBQUAD colorPanel[256];PIXEL **bmpData;long i,j;double num[256]={0},p[256]={0},s[256]={0};double max,min,r,sum=0,asum=0,aver,psum=0,var;fin=fopen("1.bmp","rb");fread(&bfh,1,sizeof(BITMAPFILEHEADER),fin);fread(&bih,1,sizeof(BITMAPINFOHEADER),fin);fread(colorPanel,256,sizeof(RGBQUAD),fin);bmpData=(PIXEL **)malloc(bih.biHeight*sizeof(PIXEL *));for(i=0;i<bih.biHeight;i++){bmpData[i]=(PIXEL *)malloc(bih.biWidth*sizeof(PIXEL));fread(bmpData[i],bih.biWidth,sizeof(PIXEL),fin);}fclose(fin);////对图像进行直方图均衡////for(i=0;i<bih.biHeight;i++){ //二重循环遍历图象数据for(j=0;j<bih.biWidth;j++){num[bmpData[i][j].GRAY]++; //当前灰度级象素/总象素}}for(i=0;i<256;i++)p[i]=num[i]/bih.biWidth/bih.biHeight; //计算灰度概率s[0]=p[0];for(i=1;i<256;i++){s[i]=s[i-1]+p[i]; //计算累积概率(低灰度概率加到高灰度概率上)}for(i=0;i<256;i++){ //0~1映射到0~255s[i]=s[i]*255;for(j=0;j<256;j++){if(s[i]>=j-0.5&&s[i]<j+0.5)s[i]=j;}}for(i=0;i<bih.biHeight;i++){ //对原图像进行直方图均衡for(j=0;j<bih.biWidth;j++){bmpData[i][j].GRAY=(unsignedchar)s[bmpData[i][j].GRAY];}}////计算各个参数////sum=nonzero(p); //概率非零灰度数max=lmax(p); //概率非零灰度中最大概率min=lmin(p); //概率非零灰度中最小概率r=rate(max,min); //最大最小概率之比asum=lager(p); //图像中概率大于平均概率的灰度级数aver=average(sum); //非零概率的平均值var=variance(sum,p,aver); //非零概率的方差draw(s); //画灰度映射关系曲线fout=fopen("3.bmp","wb");fwrite(&bfh,1,sizeof(BITMAPFILEHEADER),fout);fwrite(&bih,1,sizeof(BITMAPINFOHEADER),fout);fwrite(colorPanel,256,sizeof(RGBQUAD),fout);for(i=0;i<bih.biHeight;i++)fwrite(bmpData[i],bih.biWidth,sizeof(PIXEL),fout);fclose(fout);return 0;}2.程序流程图:3.实验结果图像及对应参数:(1)图一:均衡前:均衡前直方图:灰度映射:对应参数:均衡后:均衡后的直方图:对应参数:均衡前后灰度映射关系:横轴表示均衡前的灰度,纵轴表示均衡后的灰度。
实验二 直方图均衡化
福建农林大学计算机与信息学院实验报告系:专业:年级:姓名:学号:实验室号_______ 计算机号实验时间:指导教师签字:成绩:报告退发(订正、重做)实验二直方图均衡化1.实验目的和要求掌握直方图均衡化算法。
2.实验内容和原理(1)编写一个函数计算数字图像直方图;(2)通过调用直方图计算函数实现直方图均衡化;(3)对比数字图像变化前后的直方图;3.实验环境硬件:一般PC机操作系统:WindowsXP编程平台:MATLAB 或高级语言4.算法描述及实验步骤Code:X=imread(' ‘);subplot(2,2,1) ;imshow(X); title 原图b=size(X);N=b(1)*b(2);n=zeros(1,256);for(i=1:b(1))for(j=1:b(2))n(1,X(i,j)+1)=n(1,X(i,j)+1)+1;end;end;s=zeros(1,256);for(k=1:256)for(j=1:k)s(1,k)=s(1,j)+n(1,j)/N;end;end;Y=zeros(b);for(i=1:b(1))for(j=1:b(2))Y(i,j)=s(1,X(i,j)+1);end;end;Y=mat2gray(Y);subplot(2,2,2) ;imshow(Y); title 均衡化subplot(2,2,3) ;imhist(X); title 原图直方图; subplot(2,2,4) ;imhist(Y); title 均衡化后直方图; figure;Z=zeros(b);Z=histeq(X);subplot(1,2,1) ;imshow(Z); title 原图subplot(1,2,2) ;imhist(Z); title 利用函数均衡化5.调试过程6.实验结果7.总结。
数字图像处理直方图均衡实验报告
数字图像报告班级:姓名:学号:一、直方图均衡:直方图均衡化也叫做直方图平坦化,是一种常用的灰度增强算法。
目的:曾强对比度目标:均匀分度原理:假设灰度级为归一化至范围[0,1]内的连续量,并令Pr (r)表示某给定图像中的灰度级的概率密度函数(PDF),其下标用来区分输入图像和输出图像的PDF。
假设我们对输入灰度级执行如下变换,得到(处理后的)输出灰度级s:S=T(r)=∫0r Pr(w)dw式中w 是积分的哑变量。
可以看出,输出灰度级的概率密度函数是均匀的,即a.当0≤s≤1 时,Ps(s)=1b.当s 为其他时,Ps(s)=0换言之,前述变换生成一幅图像,该图像的灰度级较为均衡化,且覆盖了整个范围[0,1]。
灰度级均衡化处理的最终结果是一幅扩展了动态范围的图像,它具有较高的对比度。
该变换函数只不过是一个累积分布函数(CDF)。
二、直方图均衡程序:clc主程序:picture=input('please input the filename:','s');fid=fopen(picture);dat=fread(fid);d=dat';B=reshape(d,256,256);h=length(d);newname=input('输入新的文件名:','s');zhi(h,newname,B,d);子程序:function y=zhi(h,newname,B,d)figure(1);imshow(uint8(B'));N=zeros(1,256);for i=0:255for j=1:hif i==d(j)N(i+1)=N(i+1)+1;endendendi=0:255;p=N/h;figure(2)stem(i,p,'.')title('原始直方图')m=zeros(1,256);for k=1:256if k==1m(k)=p(k);elsem(k)=m(k-1)+p(k);endendfor k=1:256r=round(m*255);ends=zeros(1,256);for a=1:256for b=1:256if r(a)==r(b)s(a)=N(a)+N(b);endendendq=s/h;for j=1:256k(j)=r(j);endfigure(3);stem(k,q,'.');title('均衡直方图');M=zeros(1,h);for i=1:hk=d(i);M(i)=r(k+1);endR=reshape(M,256,256);figure(4);imshow(uint8(R'));jht=fopen(newname,'wb');g=fwrite(jht,M);fclose('all');原图像原始直方图均衡直方图均衡后的图像:三、体会:通过本次设计,让我学会了从问题的高度来考虑设计的方方面面,对程序的设计和研究有了更深刻的体会;让我了解到程序的设计是建立在对理论知识了解的基础上的,特别是对直方图均衡化的原理要有较为详细的了解,此外对直方图均衡化算法也要进行了解;在编写程序时,进行模块化设计,以严谨的态度进行编程,避免出现低级错误。
图像工程概论实验报告——二值化直方图均衡化
图像工程概论实验报告课程报告1:一、实验目的:二、实验内容把这幅图像分成同样大小的10幅人脸图片然后分别对第一行5幅人脸图像的第3 第4 第5 第二行5幅人脸图像的第1 第5 进行如下处理:1.进行大津法阈值分割的二值化处理2.进行直方图均衡化处理三、实验具体代码以及结果(一)大津法阈值分割的二值化处理1.实验代码%图像分割部分clear;clc;pic0=imread('G: \image\histogram matching.bmp');figure(1),imshow(pic0);wdiv=5;hdiv=2;[hd,wd,l]=size(pic0);sub_wd=floor(wd/wdiv);sub_hd=floor(hd/hdiv);for row=1:2for col=1:5pic1=pic0((row-1)*sub_hd+1:row*sub_hd+1,(col-1)*sub_wd+1:col*sub_ wd+1);figure(2),imshow(pic1);imwrite(pic1,['G: \image\'num2str(row) '-'num2str(col) '.jpg'],'jpg'); %存储图像endend%————————图像处理部分cd 'G:\pic'x1=imread('1-3.jpg'); %目标读取图像第一行第三幅人脸图像x2=imread('1-4.jpg'); %第一行第四幅人脸图像x3=imread('1-5.jpg'); %第一行第五幅人脸图像x4=imread('2-1.jpg'); %第二行第一幅人脸图像x5=imread('2-5.jpg'); %第二行第五幅人脸图像%matlab 自动确定阈值的方法,大津法,类间方差level1=graythresh(x1);level2=graythresh(x2);level3=graythresh(x3);level4=graythresh(x4);level5=graythresh(x5);%用得到的阈值直接对图像进行二值化处理并显示BW1=im2bw(x1,level1);BW2=im2bw(x2,level2);BW3=im2bw(x3,level3);BW4=im2bw(x4,level4);BW5=im2bw(x5,level5);subplot(1,5,1),imshow(BW1);subplot(1,5,2),imshow(BW2);subplot(1,5,3),imshow(BW3);subplot(1,5,4),imshow(BW4);subplot(1,5,5),imshow(BW5);2.实验结果显示分割结果截图:进行大津法阈值分割的二值化处理后截图:(二)直方图均衡化处理1.实验代码%图像分割部分clear;clc;pic0=imread('G: \image\histogram matching.bmp'); %figure(1),imshow(pic0);wdiv=5;hdiv=2;[hd,wd,l]=size(pic0);sub_wd=floor(wd/wdiv);sub_hd=floor(hd/hdiv);for row=1:2for col=1:5pic1=pic0((row-1)*sub_hd+1:row*sub_hd+1,(col-1)*sub_wd+1:col*sub_ wd+1);figure(2),imshow(pic1);imwrite(pic1,['G: \image\'num2str(row) '-'num2str(col) '.jpg'],'jpg'); %存储图像endend%图像处理部分cd 'G:\pic'x1=imread('1-3.jpg'); %目标读取图像第一行第三幅人脸图像x2=imread('1-4.jpg'); %第一行第四幅人脸图像x3=imread('1-5.jpg'); %第一行第五幅人脸图像x4=imread('2-1.jpg'); %第二行第一幅人脸图像x5=imread('2-5.jpg'); %第二行第五幅人脸图像%直方图均衡化处理%调用直方图均衡化函数 histeq()%均衡化处理前后的灰度级直方图分布,采用两行十列显示subplot(2,5,1),imhist(rgb2gray(x1)); %第一行第三幅人脸图像subplot(2,5,6),imhist(histeq(rgb2gray(x1)));subplot(2,5,2),imhist(rgb2gray(x2)); %第一行第四幅人脸图像subplot(2,5,7),imhist(histeq(rgb2gray(x2)));subplot(2,5,3),imhist(rgb2gray(x3)); %第一行第五幅人脸图像subplot(2,5,8),imhist(histeq(rgb2gray(x3)));subplot(2,5,4),imhist(rgb2gray(x4)); %第二行第一幅人脸图像subplot(2,5,9),imhist(histeq(rgb2gray(x4)));subplot(2,5,5),imhist(rgb2gray(x5)); %第二行第五幅人脸图像subplot(2,5,10),imhist(histeq(rgb2gray(x5)));%显示均衡化处理后的图像figure(11),imshow(histeq(rgb2gray(x1)));figure(12),imshow(histeq(rgb2gray(x2)));figure(13),imshow(histeq(rgb2gray(x3)));figure(14),imshow(histeq(rgb2gray(x4)));figure(15),imshow(histeq(rgb2gray(x5)));2.实验结果显示①直方图②均衡化处理后人脸图像。
直方图均衡化和匹配报告
直方图均衡化和匹配报告一.实验目的:加强直方图均衡化和直方图匹配的图像增强技术的认识和了解; 学会用Matlab 中的下列函数对输入图像进行上述2类运算; 感受各种不同的直方图图像增强处理方法对最终图像效果的影响; 二.实验内容:1.熟悉Matlab 文件中有关Imhist 和histeq 函数的使用说明,充分理解其使用方法并能运用它们完成实验内容。
2.将mountain.jpg 图像文件读入Matlab ,对其作直方图均衡化。
显示运算前后该图像的直方图,处理后的图像。
3.对mountain.jpg 图像做直方图匹配运算,显示运算前后该图像的直方图,处理后的图像和灰度变换函数。
直方图反映灰度等级的分布情况,本实验指定的直方图如下:1400×rr ≤5 7000-310×r 5<r ≤20 900-5×r 20<r ≤180 -1440+8×r 180<r ≤225 3060-12×r225<r ≤2554.利用mountain.jpg 图像的直方图(imhist 函数可生成),编写直方图均衡化函数,显示灰度变换函数。
三.实验结果与分析:1.图像均衡化处理前后的直方图和图像对比原图像 均衡化后的图像n =原图像直方图均衡化后的直方图由处理后的图像可以看出,图像的灰度值减少,图像对比度明显增强,但是导致很多地方的细节模糊,看不清楚;而且有些地方过分增强,严重干扰清晰度。
2.直方图匹配处理前后图像对比原图像处理后图像原图像直方图直方图匹配运算后的直方图直方图匹配运算函数采用直方图匹配运算后,发现效果明显比直接均衡化的效果好的多,将一些重要的细节突出来了,对比度明显增强,但是有些地方色彩过于暗淡,灰度值过高,影响了图像的美观,但用于进行图像对比分析还是比较实用的。
3.编写的直方图均衡化函数,进行灰度变换原图处理后图像原图直方图处理后直方图最后一步通过自己编写的程序,对直方图进行均衡化,效果与第一步所取得的效果差不多是一致的。
实验3 图像的直方图均衡化
实验3 图像的直方图均衡化一、实验目的:理解直方图的概念,利用Matlab获取和绘制图像的直方图,并进行直方图均衡化处理。
二、实验内容:学习并应用imhist, histeq等函数进行直方图处理三、实验要求:提交原图像和各种直方图曲线,以及按直方图处理后的图像。
四、实验步骤1、生成并绘制图像的直方图在处理图像直方图的工具箱中,核心函数是imhist,其基本语法为:h=imhist(f,b)。
其中,f为输入图像,h为其直方图,b是用于形成直方图的灰度级的个数,默认值为256。
例如,若我们要处理一幅uint8类图像并令b=2,则亮度范围被分成两部分:0至127和128至255。
所得的直方图将有两个值:h(1)等于图像在区间[0,127]内的像素总数,h(2)等于图像在区间[128,255]内的像素总数。
使用p=imhist(f,b)/numel(f)可以得到归一化直方图。
函数numel(f)给出数组f 中的元素个数(即图像中的像素数)。
(1)阅读imhist的帮助文件;(2)读入一幅图像,使用imhist( )函数产生图像的直方图,分析它的直方图分布及反映图像的特点;(3)使用imadjust( )函数产生图像的对比度图,并使用imhist( )函数产生两个图像的直方图,分析图像对比度变化后的效果;实验结果:>> I=imread('C:\Documents and Settings\Administrator\桌面\实验\图像库\tif\boats720x576.tif'); >> J=histeq(I); %对原图像进行直方图均衡化处理%对直方图均衡化后图像进行屏幕控制;作一幅子图,并排两幅图的第1幅subplot(2,2,1);imshow(I); %显示原图像title('原图像'); %给原图像加标题名subplot(2,2,2);imshow(J);title('直方图均衡化后的图像') ;subplot(2,2,3);imhist(I,64); %将原图像直方图显示为64级灰度title('原图像直方图') ; %给原图像直方图加标题名subplot(2,2,4);imhist(J,64) ; %将均衡化后图像的直方图显示为64级灰度title('均衡变换后的直方图') ; %给均衡化后图像直方图加标题名原图像直方图均衡化后的图像01002004原图像直方图0100200050001000015000均衡变换后的直方图2、直方图均衡化直方图均衡化由工具箱中的函数histeq 实现,该函数语法为g=histeq(f,nlev)。
实验报告2:直方图的均衡
实验报告1.数字图像直方图均衡的算法原理直方图均衡的主要原理是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布,通过将不同灰度值的像素数量进行统计,并将图像的像素值进行重新分配,把一定范围的像素过于密集的灰度值重新分配到较广的灰度区域内,使得整体灰度范围内每个灰度值的像素数量基本相同。
2.数字图像直方图均衡的算法步骤I.设均衡前图像在(x,y)处灰度值为f(x,y),均衡后图像的灰度值为g(x,y)II.设直方图变换函数为g(x,y)=M(f(x,y))III.令M(t)在(0,L-1)上单调递增,且使得f(x,y)和g(x,y)均属于(0,L-1)。
IV.计算每个灰度级的频数p(x,y)=f(x,y)/NV.此时计算累计分布函数C(x,y)=Σp(x,y)VI.利用M(t)计算均衡后的灰度级:g(x,y)=INT[(gmax-gmin)C(x,y)+gmin+0.5]3.MATLAB代码对RGB通道独立地进行直方图均衡的代码实现:RGB=imread('yuanban.jpg');R=RGB(:,:,1);G=RGB(:,:,2);B=RGB(:,:,3);subplot(4,2,1),imshow(RGB);title('原始真彩色图像');subplot(4,2,3),imshow(R);title('真彩色图像的红色分量');subplot(4,2,4), imhist(R);title('真彩色图像的红色分量直方图');subplot(4,2,5),imshow(G);title('真彩色图像的绿色分量');subplot(4,2,6), imhist(G);title('真彩色图像的绿色分量直方图');subplot(4,2,7),imshow(B);title('真彩色图像的蓝色分量');subplot(4,2,8), imhist(B);title('真彩色图像的蓝色分量直方图');r=histeq(R);g=histeq(G);b=histeq(B);figure,subplot(3,2,1),imshow(r);title('红色分量均衡化后图像');subplot(3,2,2), imhist(r);title('红色分量均衡化后图像直方图');subplot(3,2,3),imshow(g);title('绿色分量均衡化后图像');subplot(3,2,4), imhist(g);title('绿色分量均衡化后图像直方图');subplot(3,2,5), imshow(b);title('蓝色分量均衡化后图像');subplot(3,2,6), imhist(b);title('蓝色分量均衡化后图像直方图');figure,newimg = cat(3,r,g,b);imshow(newimg,[]);title('均衡化后分量图像还原输出原图');4.均衡效果对比:原图:Matlab直方图均衡后效果图:PS均衡后效果图:差别:原图颜色较暗,并且大部分区域灰度值偏低,仅有部分地方灰度值较亮。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
医学图像处理实验报告
实验名称:直方图均衡化实验
姓名: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 n
k 即为频数。
计算累积直方图各项:
()1
,1,0,00-===∑∑==L k i p n n t k i k
i 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:r
for j = 1:c
GrayPixNum(1,ImagGray(i,j)) = GrayPixNum(1,ImagGray(i,j))+1;
end
end
%对灰度直方图进行归一化
GrayPixPro = GrayPixNum./(r*c);
figure()
plot(GrayPixPro),title('图像直方图');
%-----------------------------------------------------------
% -----------------------直方图均衡化------------------------
%-----------------------------------------------------------
%直方图累加
GrayAdd = zeros(1,255);
GrayAdd(1,1) = GrayPixPro(1,1);
for i = 2:255
GrayAdd(1,i) = GrayAdd(1,i-1)+GrayPixPro(1,i);
end
NewGray = round(GrayAdd.*254.+0.5);
NewGrayPro = zeros(1,255);
for i = 1:255
GrayTemp = NewGray(1,i);
NewGrayPro(1,GrayTemp) = NewGrayPro(1,GrayTemp)+GrayPixPro(1,i); end
figure()
plot(NewGrayPro.*(r*c)),title('均衡化直方图');
%有均衡化直方图和映射关系得到均衡化的图像
NewImag = zeros(r,c);
for i =1:r
for j = 1:c
NewImag(i,j) = NewGray(1,ImagGray(i,j));
end
end
NewImag = uint8(NewImag);
figure()
imshow(NewImag),title('均衡化的图像');
figure()
plot(NewGray),title('灰度变换曲线');
实验结果:
图1 原灰度图像图2 原图像的灰度直方图
图3 经过直方图均衡化后的灰度图片图4 均衡化后的直方图
图5 灰度变化曲线
三、实验思考
从上述实验结果可以看出,经过直方图均衡化后的图片的对比度更高,且边缘效果更高。
这些图片非常有利于人眼的观看识别。
直方图均衡化可以达到增强图像的显示效果的作用。
通过原图像的直方图可以观察出,图像中各种亮度所占的比例大都分布不均匀,直方图增强的方法就是压缩直方图中比例少的像素所占用的灰度范围,多出来的灰度空间按照统计比例分配给直方图中比例高的像素使用。
这种方法主要是针对人眼对灰度差别越大的图像更容易分辨的特点而做的增强。
直方图均衡化由于可能会丢失一些灰度级,所以造成图片信息在一定程度上的损失。
变换后图像的灰度级减少也会使某些细节消失。
并且某些图像经均衡化处理后的对比度不自然的过分增强。