直方图均衡化算法实现实验报告
数字图像处理实验报告直方图均衡化
数字图像处理实验报告直⽅图均衡化课程设计课程名称数字图像处理题⽬名称直⽅图均衡化学⽣学院信息⼯程学院专业班级 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++编程结果:。
直方图均衡化实验报告
多媒体技术实验报告项目名称: 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图片数据很大时, 可能存在内存溢出的现象。
图像直方图均衡实验
/*初始化直方图背景为白色*/CvScalar white;white.val[0]=255;for(int i=0;i<dst->height;i++){for(int j=0;j<dst->width;j++){cvSet2D(dst, i, j, white);}}/*绘制横竖坐标*/CvScalar black;black.val[0] = 0;for(int i=0;i<280;i++){cvSet2D(dst, 280, i+10, black);}for(int i=0;i<280;i++){cvSet2D(dst, i+10, 20, black);}/*绘制直方图*/for(int i=0;i<256;i++){int high = count[i]*256/max;int x=20+i;for(int j=0;j<high;j++){int y=280-j;cvSet2D(dst, y, x, black);}}return dst;}实验结果如下图所示:2.通过计算归一化直方图,设计算法实现直方图均衡化处理。
核心代码如下:IplImage* Equalization(IplImage *src){IplImage* dst = cvCreateImage(cvGetSize(src),3.在灰度图像直方图均衡处理的基础上实现彩色直方图均衡处理。
核心代码如下:IplImage* ColorEqualization(IplImage *src){IplImage *dst = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 3);IplImage *pImageChannel[3] = {NULL};int i;for (i=0; i<3; i++) {pImageChannel[i] = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);}cvSplit(src, pImageChannel[0], pImageChannel[1], pImageChannel[2], NULL);for (i=0; i<src->nChannels; i++) {pImageChannel[i] = Equalization(pImageChannel[i]);}/*三通道合并*/cvMerge(pImageChannel[0], pImageChannel[1], pImageChannel[2], NULL, dst);return dst;}实验结果如下图所示:。
数字图像处理实验报告直方图均衡化
数字图像处理实验报告实验名称:直方图均衡化姓名:班级:学号:专业:电子信息工程(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,这个条件保证了变换前后灰度值动态范围的一致性。
直方图均衡化实验报告
医学图像处理实验报告实验名称:直方图均衡化实验姓名: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 中的下列函数对输入图像进行上述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 灰度变化曲线三、实验思考从上述实验结果可以看出,经过直方图均衡化后的图片的对比度更高,且边缘效果更高。
计算机视觉实验报告-直方图归一化和均衡化
1实验目的安装、配置、熟悉Python+Opencv开发环境图像读、写等的基本操作选取一张自己的生活照,实现:直方图归一化和均衡化(基础实现,如果实现了自适应,加分)快速傅里叶变换和高斯滤波(使用不同的sigma,分析sigma大小对图像清晰度的影响,至少使用三种不同的sigma)。
2实验过程Pycharm终端输入pip opencv后却不能编译有opencv函数的代码电脑上原来有个python环境,编译选项是原来的环境,但opencv库安装在conda 设置里把编译器改成conda2.1直方图归一化和均衡化归一化实验图片所用代码import cv2import numpy as npimport matplotlib.pyplot as pltdef hist_normalization(img, a=0, b=255):c = img.min()d = img.max()out = img.copy()# normalizationout = (b - a) / (d - c) * (out - c) + aout[out < a] = aout[out > b] = bout = out.astype(np.uint8)return outif __name__ == '__main__':img =cv2.imread('img/in.jpeg').astype(np.uint8)arr=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)shape=arr.shape# 因为手机拍摄照片灰度范围是0~255,直接归一化没有效果,所以修改像素灰度值来缩小灰度范围,使效果明显for i in range(0,shape[0]):for j in range(0,shape[1]):if arr[i,j]<50:arr[i,j]*=1.5elif arr[i,j]>200:arr[i,j]*=0.8out=hist_normalization(arr)plt.hist(out.ravel(),bins=255,rwidth=0.8,range=(0,255))plt.savefig('img/out3.png')cv2.imwrite("img/out.jpg",out)实验效果代码分析及现象直方图相比原来,被拉开的更散均衡化实验图片所用代码import cv2import numpy as npimport matplotlib.pyplot as pltif __name__ == '__main__':img =cv2.imread('img/in.jpeg').astype(np.uint8)img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)equalization = cv2.equalizeHist(img)cv2.imshow('Equalization', equalization)cv2.waitKey(0)实验效果代码分析及现象图片灰度变得更均匀2.2快速傅里叶变换和高斯低通滤波快速傅里叶变化实验图片所用代码import cv2import numpy as npif __name__ == '__main__':img =cv2.imread('img/in.jpeg',cv2.IMREAD_GRAYSCALE)# 2. 进行快速傅里叶变换,数据类型需转换为单精度fft = np.fft.fft2(np.float32(img))# 3. 频谱中心化fft_shift = np.fft.fftshift(fft)# 4. 灰度值缩放,便于显示fft_shift = 15 * np.log(np.abs(fft_shift))# 5. 数据类型转换fft_shift = fft_shift.astype(np.uint8)# 6. 显示结果cv2.imwrite('img/out.jpg', fft_shift)cv2.imshow('Image', img)cv2.imshow('FFT', fft_shift)cv2.waitKey(0)实验效果代码分析及现象原图变成了中间一个光源向四处发散的图像高斯低通滤波实验图片所用代码import numpy as npimport cv2import numpy.random as randomdef add_salt_noise(image, prob=0.1):output = np.zeros(image.shape, np.uint8)for i in range(image.shape[0]):for j in range(image.shape[1]):if random.random() < prob:if random.random() < 0.5:output[i, j] = 0else:output[i, j] = 255else:output[i, j] = image[i, j]return outputif __name__ == '__main__':# 1. 读取图像文件image_path = 'img/in.jpeg'image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)# 2. 添加椒盐噪声noise = add_salt_noise(image, prob=0.1)# 3. 高斯滤波kernel_size = 3gaussian = cv2.GaussianBlur(noise, (kernel_size, kernel_size), sigmaX=1)for i in range(0,9):gaussian = cv2.GaussianBlur(gaussian, (kernel_size, kernel_size), sigmaX=1)# 4. 显示图像cv2.imshow('Image', image)cv2.imshow('Noise', noise)cv2.imshow('Gaussian', gaussian)cv2.waitKey(0)实验效果Sigma=1Sigma=0.1Sigma=0.5代码分析及现象随着sigma增大,去噪效果增强,不过sigma在1之后继续增大时效果不明显3实验心得熟悉了opencv的基本操作,深入得理解了怎样对图片处理使其质量更好,对于其中出现的问题也能通过bing等搜索引擎找到答案。
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实现(遥感课程设计)
s T r Pr r dr
0
(2.4)
其中,
P r dr 是 r 的累积分布函数,由于累积分布函数是 r 的函数,且从 0 到 1 单调递
0 r
r
增,所以变换函数即式(2.4)满足关于 T r 在 0 r 1 区间内单值单调增加,在 0 r 1 内有 0 T r 1 的两个条件。 对公式(2.4)中的 r 求导,有 ds / dr Pr r ,把求导结果代入式(2.3),则有:
2、图像直方图均衡化
直方图是反映一幅图像中的灰度级与出现这种灰度级的概率之间关系的统计图表。 直方
图的横坐标是灰度级 rk , 纵坐标是图像中具有该灰度级的像素个数或出现这个灰度级数的概 率 P rk 。直方图能直观地表示出图像具有某种灰度级的像素个数,是对图像灰度值分布情 总数, nk 为第 k 级灰度的像素数。 通过观察图像的灰度直方图, 就可以判断这幅图像的对比度和清晰度, 也可以掌握图像 的明暗程度。本文即采用直方图均衡化[11]的方法来对航拍图像进行增强处理。 设 r 和 s 分别表示归一化 (注: 归一化是指图像的灰度值通过某个比例变换后限制在[0,1] 之间)的图像灰度和经直方图修正后的图像灰度,即 0 r , s 1 。在 0,1 区间内的任何一 个 r 值都可产生一个 s 值,且有: s T r 。T r 为变换函数,满足:(1)在 0 r 1 区 间内是单调递增函数;(2)对于 0 r 1 ,有 0 T r 1 。条件(1)保证变换后的灰度 从黑到白的次序不变,条件(2)确保灰度变换后的像素处于允许的范围之内。从 s 到 r 的 反变换关系为: r T 况的整体描述。概率灰度直方图的计算公式为: P rk nk / N 。其中 N 为图像中的像素
直方图均衡化实验报告
直方图均衡化实验报告直方图均衡化实验报告引言:直方图均衡化是一种常用的图像处理技术,它可以增强图像的对比度和细节,使得图像更加清晰明亮。
本实验旨在通过实际操作验证直方图均衡化的效果,并探讨其在不同场景下的应用。
实验步骤: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均值滤波均衡化直方图不显示,不知道原因。
实验二 直方图均衡化
福建农林大学计算机与信息学院实验报告系:专业:年级:姓名:学号:实验室号_______ 计算机号实验时间:指导教师签字:成绩:报告退发(订正、重做)实验二直方图均衡化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');原图像原始直方图均衡直方图均衡后的图像:三、体会:通过本次设计,让我学会了从问题的高度来考虑设计的方方面面,对程序的设计和研究有了更深刻的体会;让我了解到程序的设计是建立在对理论知识了解的基础上的,特别是对直方图均衡化的原理要有较为详细的了解,此外对直方图均衡化算法也要进行了解;在编写程序时,进行模块化设计,以严谨的态度进行编程,避免出现低级错误。
数字图像处理实验报告(直方图均衡化、直方图匹配)
实验二报告一.实验内容:⑴直方图均衡化(Histogram equalization),⑵直方图匹配(Histogram matching),二.实验结果:1.将mountain.jpg图像文件读入Matlab,对其作直方图均衡化,结果如下:2、对mountain.jpg图像做直方图匹配运算3、利用mountain.jpg图像的直方图(imhist函数可生成),编写直方图均衡化函数。
function [ imeq ] = Fhisteq( space,h )%FHISTEQ 此处显示有关此函数的摘要% 此处显示详细说明% 原始图像space 必须是[0 1]之间的%直方图均衡化函数L=length(h);pdf=h/numel(space);cdf=cumsum(pdf);f=zeros(1,L);for i=1:Lf(i)=cdf(i)*255;end[dimx,dimy]=size(space);imeq=zeros(dimx,dimy);for i=1:dimxfor j=1:dimyimeq(i,j)=f(round(space(i,j)*255)+1);endendend结果如下:4、直方图均衡化分析:直方图均衡化就是一种能仅靠输入图像直方图信息自动达到这种效果的变换函数。
它的主要思想是扩展图像原有灰度级分布,使图像能够在更大的灰度级范围内分布,从而提高了对比度和灰度色调的变化,使图像更加清晰。
从上面的图像可以清楚的看到原有的mountain图像整体偏暗,直方图集中在灰度级偏小的一侧。
但是直方图均衡化后每个灰度级上的图像点数量有了明显提高,直方图中间部分的数值也有了明显的增强,图像的视觉效果也明显变好了。
而使用直方图匹配的算法则能够更好的让原有图像朝着我们预期的直方图分布去变换,这对于有特定的显示要求来说是一种比较好的选择。
实验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)。
南京信息工程大学实验(实习)报告
实验(实习)名称直方图均衡化算法实现实验(实习)日期得分指导教师专业年级班次姓名学号
一、实验目的:
理解直方图均衡化算法的原理,掌握算法的实现
二、实验内容:
在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);
运行结果(截图)
同一个图像窗口左右显示处理前后的图像。