直方图均衡化处理教学内容

合集下载

图像增强——直方图均衡化

图像增强——直方图均衡化

图像增强——————直方图均衡化摘要图像增强是指按特定的需要突出一幅图像的某些信息,削弱或消除不需要信息的处理方法。

处理的结果使图像更适合于人的视觉特性或机器的识别系统。

本文主要采用直方图均衡化、中值滤波的方法对图像进行处理,通过对处理结果进行比较,从而加深对图像增强的理解及应用。

一、图像增强在获取图像的过程中,由于多种因素的影响导致图像无法达到令人满意的视觉效果。

对原始图像做一些改善,从而实现人眼观察或者机器自动分析、识别的目的的行为,就叫做图像增强。

图像增强的主要内容⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎧⎪⎪⎪⎩⎪⎪⎪⎨⎧⎪⎪⎩⎪⎪⎨⎧⎪⎩⎪⎨⎧⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧⎩⎨⎧⎪⎪⎩⎪⎪⎨⎧⎩⎨⎧代数运算彩色变换增强彩色平衡假彩色增强常规处理彩色图像增强伪彩色增强彩色增强同态滤波增强低通滤波高通滤波频率域图像锐化图像平滑局部运算局部统计法规定化均衡化直方图修正法灰度变换点运算空间域图像增强二、直方图均衡化1.直方图均衡化是通过累积函数对灰度值进行调整以实现对比度的增强,具体地说就是把给定图像的直方图分布改变成近似均匀分布的直方图。

2.直方图均衡化的过程如下:①计算原图像的灰度直方图;②计算原图像的灰度累积分布函数,进一步求出灰度转换表; ③根据灰度转换表,将原图像各灰度级映射为新的灰度级。

3.直方图均衡化的优点:扩张了像素值的动态范围。

直方图均衡化后,图像的概率密度函数近似服从均匀分布,灰度几乎是均匀的分布在整个范围内,图像明暗分明,对比度很大,图像比较清晰明亮,很好的改善了原始图的视觉效果。

2.1原理及计算过程先讨论连续图像的均衡化问题。

设变量r 和s 代表原图像灰度和经直方图修正后的的图像灰度。

在图像中,像素的灰度级可作归一化处理,这样r,s 的值将限定在下述范围之内:0≤r,s ≤1,r=0代表黑,r=1代表白,可以对[0,1]区间内的任一个值进行如下变换:s=T(r)变换函数T 应满足下列条件:(1)在0≤r ≤1区间内T[r]单值单调增加; (2)对于0≤r ≤1,有0≤s ≤1。

图像处理中直方图均衡化的使用教程

图像处理中直方图均衡化的使用教程

图像处理中直方图均衡化的使用教程图像处理中的直方图均衡化是一种常用的增强图像对比度的方法。

通过对图像的像素值进行重新分布,直方图均衡化可以使图像中的明暗区域更具有对比度,从而提高图像的质量和清晰度。

本文将介绍直方图均衡化的原理、应用场景以及具体的步骤。

1. 直方图均衡化的原理直方图均衡化的原理基于对图像的灰度级进行重新分布。

它通过将原始图像的像素值映射到新的像素值上,使得直方图在整个灰度范围内得到均匀分布。

这样就能够增强图像中的低对比度区域,提高图像的视觉效果。

2. 直方图均衡化的应用场景直方图均衡化在图像处理领域有着广泛的应用。

下面列举了一些常见的应用场景:- 增强图像的对比度:直方图均衡化可以使得图像中的亮度值更加均匀分布,提高图像的对比度,使得图像变得更加清晰。

- 增强图像的细节:直方图均衡化通过增强图像中的低对比度区域,可以使得细节更加显著,提高图像的可视化效果。

- 降低图像的噪声:直方图均衡化可以将图像中的噪声分布均匀化,从而减少噪声对图像质量的影响。

3. 直方图均衡化的步骤下面是使用直方图均衡化对图像进行处理的具体步骤:步骤 1: 将彩色图像转换为灰度图像如果原始图像是彩色图像,我们需要将其转换为灰度图像。

这是因为直方图均衡化是针对灰度级进行处理的。

步骤 2: 计算原始图像的像素值分布使用图像处理工具,计算原始图像中每个像素值的出现频率。

这样可以得到一个直方图,该直方图显示了原始图像中像素值的分布情况。

步骤 3: 计算累积分布函数通过对原始图像的直方图进行累积求和,得到一个累积分布函数。

该函数显示了每个像素值的累积出现频率。

步骤 4: 计算新的像素值根据累积分布函数,计算每个像素值的新的映射像素值。

这个计算公式可以根据具体的图像处理工具而有所不同。

步骤 5: 创建均衡化后的图像使用新的像素值替换原始图像中的像素值,将得到的图像称为均衡化后的图像。

4. 注意事项在使用直方图均衡化时,需要考虑以下几个注意事项:- 直方图均衡化可能会改变图像的整体亮度。

数字图像处理课程设计报告---直方图均衡化

数字图像处理课程设计报告---直方图均衡化

设计题目:直方图均衡化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///////////////////////////////////////////////////////////////////////////// // CCqxhistView1,,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 j f ]5.0)()[(min min max ++-=g f C g g INT g i nn r p k k =)(1,,2,1,010-=≤≤l k r kIMPLEMENT_DYNCREATE(CCqxhistView, CView)BEGIN_MESSAGE_MAP(CCqxhistView, CView)//{{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/destructionCCqxhistView::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 printingBOOL 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;j<nh;j++)for(int i=0;i<nw;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;i<nh;i++)for(j=0;j<nw;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;i<nh;i++)for(j=0;j<nw;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;j<nh;j++)for(int i=0;i<nw;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++编程结果:。

数字图像处理实验3图像直方图与均衡化

数字图像处理实验3图像直方图与均衡化

实验三图像直方图与均衡化一、实验原理离散图像用直方图表示该图像中各个不同灰度级像素出现的相对频率。

灰度直方图是简单且实用的工具,对图像的采集、处理和分析都可以有效地利用直方图。

灰度直方图反映了数字图像中的每一灰度级与其出现的频率间的关系。

直方图均衡化是通过对原图形进行某种变换,使图像的直方图变为均匀分布的直方图,从而达到增强的效果。

二、实验设备MATLAB软件三、实现程序:pic=imread('football.jpg');imshow(pic)imwrite(rgb2gray(PS),'football.bmp');pic=rgb2gray(pic);figure,imshow(pic)[m,n]=size(pic);S0=zeros(1,256);for k=0:255S0(k+1)=length(find(pic==k))/(m*n);endfigure,bar(0:255,S0,'g')S1=zeros(1,256);for i=1:256for j=1:iS1(i)=S0(j)+S1(i);endendS2=round(S1*256);for i=1:256S0eq(i)=sum(S0(find(S2==i)));endfigure,bar(0:255,S0eq,'b')Img=pic;for i=0:255Img (find(pic==i))=S2(i+1);endfigure,imshow(Img);四、运行结果:原图像的直方图均衡化后图像的直方图原图像均衡化后的图像。

《直方图的均衡化》课件

《直方图的均衡化》课件

直方图均衡化的效果评估
直方图均衡化的效果可以通过比较处理前后的直方图、对比度和视觉效果来 评估,通常希望处理后的图像具有更均匀的像素值分布和更好的对比度。
结论和总结
直方图的均衡化是一种有效的图像增强技术,在图像处理和计算机视觉中具有广泛的应用,能够改善图 像的质量和视觉效果。
《直方图的均衡化》PPT 课件
直方图的均衡化是什么
直方图的均衡化是一种图像增强技术,通过调整图像的亮度分布,使得图像中的像素值更均匀地分布在 整个灰度范围内,从而改善图像的对比度和视觉效果。
直方图的基本概念
直方图是用于表示图像中像素值分布的统计图,横坐标表示像素值,纵坐标 表示该像素值对应的像素数量。
直方图的均衡化原理
直方图均衡化的原理是通过对图像的像素值进行变换,使得原始图像的像素值分布更均匀,同时增强图 像的对比度。
直Байду номын сангаас图均衡化的应用场景
直方图均衡化广泛应用于图像增强、图像处理、计算机视觉等领域,可以改 善图像的质量、增强图像的细节和对比度。
直方图均衡化的步骤
直方图均衡化的步骤包括计算原始图像的像素值累计分布函数、对像素值进 行映射,以及将映射后的像素值替换到原始图像中。

直方图均衡化讲解

直方图均衡化讲解

中北大学课程设计说明书学生姓名:学号:学院:信息与通信工程学院专业:电子信息工程题目:专业综合实践图像处理部分:直方图均衡化指导教师:杨娜职称: 副教授2016 年 1月 10 日中北大学课程设计任务书15/16 学年第一学期学院:信息与通信工程学院专业:电子信息工程学生姓名:学号:学生姓名:学号:学生姓名:学号:课程设计题目:专业综合实践图像处理部分:直方图均衡化起迄日期:2016年1 月11日~2016年1月22 日课程设计地点:指导教师:杨娜系主任:王浩全下达任务书日期: 2016 年1月 10 日课程设计任务书课程设计任务书目录引言..................................... 错误!未定义书签。

1 设计任务及其要求....................... 错误!未定义书签。

2 直方图基础 (4)3 直方图均衡化 (14)4 Matlab实现 (16)5 结果分析 (18)6 心得体会 (19)前言灰度直方图是图像的一种统计表达,它反映了该图中不同灰度级出现的统计概率。

由于图像的视觉效果与直方图有对应关系,即直方图的形状和改变对视觉的感知影响很大,因此采用直方图变换的方式可以增强图像。

图像增强是指对图像的某些特征,如边缘、轮廓或对比度等进行强调或尖锐化。

当一幅图像曝光不足或过度,造成对比度过小或过大而不能显示具体细节,通过增加这些细节的动态范围改善图像的视觉效果。

图像增强可以突出图像中所感兴趣的特征信息,改善图像的主观视觉质量,提高图像的可懂度。

增强的首要目标是处理图像,使其比原始图像更适合于特定应用。

图像增强的方法分为两大类:空间域方法和频域方法。

“空间域”一词是指图像平面本身,这类方法是以对图像的像素直接处理为基础的。

“频域”处理技术是以修改图像的傅氏变换为基础的。

一般说来,原始遥感数据的灰度值范围都比较窄,这个范围通常比显示器的显示范围小的多。

增强处理可将其灰度范围拉伸到0-255 的灰度级之间来显示,从而使图像对比度提高,质量改善。

实验一 图像的灰度变换及直方图均衡化

实验一 图像的灰度变换及直方图均衡化

实验一:图像灰度变换及直方图均衡化实验一、实验目的:1. 掌握灰度直方图的概念及其计算方法;2. 掌握利用图像灰度变换实现对图像的增强处理;3. 掌握利用直方图直方图均衡化和直方图规定化实现对图像的增强处理;4. 熟悉MA TLAB中图像增强的相关函数。

二、实验设备:1. 硬件设备:计算机;2. 软件环境:Windows+Matlab编程与仿真环境;3. 其他设备:记录用的纸、笔,以及U盘等存储设备。

三、实验原理:灰度直方图(histogram)是灰度级的函数,它表示图像中具有每种灰度级的像素的个数,反映图像中每种灰度出现的频率。

一般来说,灰度直方图的横坐标是灰度级,纵坐标是该灰度级出现的概率,是图像的最基本的统计特性。

从概率论的观点来理解,灰度出现的频率可看作其出现的概率,这样直方图就对应于概率密度函数PDF(Probability Density Function),而概率分布函数就是直方图的累积和,即概率密度函数的积分。

1. 直方图均衡化直方图均衡化是通过灰度变换将一幅图像转换另一幅具有均衡直方图,即在每个灰度级上都具有相同的像素点数的过程。

设灰度变换s=T(r)为斜率有限的非减连续可微函数,它将输入图像A(x,y)转换为输出图像B(x,y),输入图像的直方图为H a(r),输出图像的直方图为H b(s),它们的关系如下:图1.1 输入图像和输出图像直方图之间的关系图直方图均衡化的基本思想是把原始图像的直方图变换成均匀分布的形式图像灰度值的动态范围,从而达到了增强图像整体对比度的效果。

具体方法为:①列出原始图像的灰度级Sk, k=0,1…L-1,其中L是灰度级的个数;②统计原始图像各灰度级的像素数目nk;③计算原始图像直方图各灰度级的频率数;④计算原始图像的累计直方图;⑤取整计算;⑥确定映射关系;⑦统计新直方图各个灰度级的像素数目nk;⑧计算新的直方图。

2. 灰度变换灰度变换是图像增强的另一种重要手段,它可使图像动态范围加大,使图像对比度扩展,图像更加清晰,特征更加明显。

数字图像处理实验一-直方图均衡化

数字图像处理实验一-直方图均衡化

实验一数字图像处理编程实习(设计性实验)一、实验名称:数字图像处理编程实验一之灰度直方图统计与均衡化。

二、实验目的和要求:本设计性实验专为印刷工程专业的《数字图像处理》课程设计。

熟悉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); %在窗口中显示均衡化后图像直方图;。

数字图像处理直方图均衡化PPT学习教案

数字图像处理直方图均衡化PPT学习教案
长 江 大 学 电 子信息 学院
第14页/共25页
四. 直方图均衡化
索引色图像的直方图
长 江 大 学 电 子信息 学院
第15页/共25页
四. 直方图均衡化
3.直方图均衡化MATLAB的实现
用stees.tif');
[c,x]=imhist(I); subplot(121);imshow(I); subplot(1,2,2),stem(x,c);
长 江 大 学 电 子信息 学院
第4页/共25页
三. 直方图的性质
(1) 它只反映该图像中不同灰度值出现的次数,而未 反映某一灰度值像素所在的位置。也就是说,它只包含 了该图像中某一灰度值的像素出现的概率,而丢失了其 所在位置的信息。
(2) 任一幅图像,都能唯一地确定出一幅与它对应的 直方图,但不同的图像,可能有相同的直方图。
会计学
1
一. 灰度级直方图的概念
1 灰度级直方图
灰度级的直方图是反应一幅图像中的灰度级与出现 这种灰度的概率之间的图形。
2 直方图的概念
设图像的灰度范围为[a,b],r为此灰度范围内 的任一灰度级,p(r)为这幅图像中灰度级为r的像 素出现的频率,可以看出p(r)是r的函数。该函数 的图形称为这幅图像的直方图。
长 江 大 学 电 子信息 学院
第18页/共25页
四. 直方图均衡化
3.直方图均衡化MATLAB的实现
调整图像的对比度,调整前后的图像见图
程序: clear all I=imread(‘C:\lena.bmp’); J=imadjust(I,[0.3 0.7],[ ]); subplot(221), imshow(I); subplot(222), imshow(J); subplot(223), imhist(I) subplot(224), imhist(J);

直方图处理(均衡化与匹配)解析

直方图处理(均衡化与匹配)解析

0.11
直方图均衡化结果
pr(rk)
0.25 0.20 0.15 0.10 0.05 0
1 7 2 7 3 7
4 7
Sk
0.25 0.21 0.19 0.16 0.08 0.06 0.03
6 7
1.00 0.80 0.60 0.40 0.02
1
0.89 0.81 0.95 0.98 0.65 0.44
(3) 计算原始直方图各概率:pk=nk/N; (4) 计算累计直方图:sk=Σpk; (5) 取整Sk=int{(L-1)sk+0.5}; (6) 确定映射对应关系:rksk;
(7) 统计新直方图各灰度级像素nk';
(8) 用pk (sk) =nk'/N计算新直方图。
其中L是灰度层次数, N是图幅总像素数。
c) 作图
建立直角坐标系,横轴表示rk 的取值,纵轴表示pr (rk )的取值, 作pr (rk )的函数图
练习:试求如图所 示一幅10×10, 8级灰度图像的灰 度直方图。
a)将图像的灰度级归一化
0 1 1 2
0 1 1 2
0 1 1 2
0 1 1 2
0 1 1 2
0 1 1 2
0 1 1 2
0 1 1 2
直方图均衡化的优点是能自动地增强整个图像 的对比度,但它的具体增强效果不易控制,处理 的结果总是得到全局均衡化的直方图。实际中有 时需要变换直方图使之成为某个特定的形状,从 而有选择地增强某个灰度值范围内的对比度。
s=T(r) Pr(r) Pz(z) s=T(r) v=G(z) z=G-1[T(r)]
z
两者经直方图均衡化处理后应有相同的直方图,因此 规定化后的的图像灰度级为:

实验二 直方图均衡化

实验二  直方图均衡化

福建农林大学计算机与信息学院实验报告系:专业:年级:姓名:学号:实验室号_______ 计算机号实验时间:指导教师签字:成绩:报告退发(订正、重做)实验二直方图均衡化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.总结。

数字图像处理之直方图均衡化

数字图像处理之直方图均衡化

数字图像处理之直⽅图均衡化直⽅图均衡化是图像处理领域中利⽤图像直⽅图对对⽐度进⾏调整的⽅法。

直⽅图均衡化要达到的效果:基本思想:把原始图的直⽅图变换为均匀分布的形式,这样就增加了像素灰度值的动态范围,从⽽达到增强图像整体对⽐度的效果使⽤的⽅法是灰度级变换:s = T(r)原理:s=T(r) 0≤r≤1T(r)满⾜下列两个条件:(1)T(r)在区间0≤r≤1中为单值且单调递增(2)当0≤r≤1时,0≤T(r) ≤1条件(1)保证原图各灰度级在变换后仍保持从⿊到⽩(或从⽩到⿊)的排列次序条件(2)保证变换前后灰度值动态范围的⼀致性Pr(r)是r的概率密度函数,Ps(s)是s的概率密度函数,Pr(r)和T(r)已知,且T-1(s) 满⾜上述条件(1),所以有已知⼀种重要的变换函数:关于上限的定积分的导数就是该上限的积分值(莱布尼茨准则)对于离散值:其中r k 是第k个灰度级,k = 0,1,2,…,L-1. n k是图像中灰度级为r k的像素个数. n是图像中像素的总数.已知变换函数的离散形式为:sk称作直⽅图均衡化将输⼊图像中灰度级为rk(横坐标)的像素映射到输出图像中灰度级为sk (横坐标)的对应像素得到.实现代码:/******************************************************************************* 作⽤: 灰度均衡函数* 参数:* pixel 原始像素数组* tempPixel 保存变换后图像的像素数组* width 原始图像宽度******************************************************************************/void GrayEqualize(BYTE* pixel, BYTE* tempPixel, UINT width, UINT height){// 灰度映射表BYTE map[256];long lCounts[256];memset(lCounts, 0, sizeof(long) * 256);// 计算各灰度值个数for (UINT i = 0; i < width * height; i++){int x = pixel[i * 4];lCounts[x]++;}// 保存运算中的临时值long lTemp;for (int i = 0; i < 256; i++){lTemp = 0;for (int j = 0; j <= i; j++)lTemp += lCounts[j];map[i] = (BYTE)(lTemp * 255.0f / width / height);}// 变换后的值直接在映射表中查找for (UINT i = 0; i < width * height; i++){int x = pixel[i * 4];tempPixel[i*4] = tempPixel[i*4+1] = tempPixel[i*4+2] = pixel[i * 4]; tempPixel[i*4+3] = 255;}}View Code彩⾊图直⽅图均衡化:更清晰:opencv代码:////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////#include "opencv2/highgui/highgui.hpp"#include "opencv2/imgproc/imgproc.hpp"#include <iostream>using namespace cv;using namespace std;int main( int argc, const char** argv ){Mat img = imread("MyPic.JPG", CV_LOAD_IMAGE_COLOR); //open and read the imageif (img.empty()) //if unsuccessful, exit the program{cout << "Image cannot be loaded..!!" << endl;return -1;}vector<Mat> channels;Mat img_hist_equalized;cvtColor(img, img_hist_equalized, CV_BGR2YCrCb); //change the color image from BGR to YCrCb formatsplit(img_hist_equalized,channels); //split the image into channelsequalizeHist(channels[0], channels[0]); //equalize histogram on the 1st channel (Y)merge(channels,img_hist_equalized); //merge 3 channels including the modified 1st channel into one imagecvtColor(img_hist_equalized, img_hist_equalized, CV_YCrCb2BGR); //change the color image from YCrCb to BGR format (to display image properly)//create windowsnamedWindow("Original Image", CV_WINDOW_AUTOSIZE);namedWindow("Histogram Equalized", CV_WINDOW_AUTOSIZE);//show the imageimshow("Original Image", img);imshow("Histogram Equalized", img_hist_equalized);waitKey(0); //wait for key pressdestroyAllWindows(); //destroy all open windowsreturn0;}View Code代码中使⽤的函数:New OpenCV functionscvtColor(img, img_hist_equalized, CV_BGR2YCrCb)This line converts the color space of BGR in 'img' to YCrCb color space and stores the resulting image in 'img_hist_equalized'.In the above example, I am going to equalize the histogram of color images. In this scenario, I have to equalize the histogram of the intensity component only, not the color components. So, BGR format cannot be used because its all three planes represent color components blue, green and red. So, I have to convert the original BGR color space to YCrCb color space because its 1st plane representsthe intensity of the image where as other planes represent the color components.void split(const Mat& m, vector<Mat>& mv )This function splits each channel of the 'm' multi-channel array into separate channels and stores them in a vector, referenced by 'mv'. Argument listconst Mat& m - Input multi-channel arrayvector<Mat>& mv - vector that stores the each channel of the input arrayequalizeHist(channels[0], channels[0]);Here we are only interested in the 1st channel (Y) because it represents the intensity information whereas other two channels (Cr and Cb) represent color components. So, we equalize the histogram of the 1st channel using OpenCV in-built function, 'equalizeHist(..)' and other two channels remain unchanged.void merge(const vector<Mat>& mv, OutputArray dst )This function does the reverse operation of the split function. It takes the vector of channels and create a single multi-channel array. Argument listconst vector<Mat>& mv - vector that holds several channels. All channels should have same size and same depthsOutputArray dst - stores the destination multi-channel arraycvtColor(img_hist_equalized, img_hist_equalized, CV_YCrCb2BGR)This line converts the image from YCrCb color space to BGR color space. It is essential to convert to BGR color space because 'imshow(..)' OpenCV function can only show images with that color space.This is the end of the explanation of new OpenCV functions, found in the above sample code. If you are not familiar with other OpenCV functions, please refer to the previous lessons.参考博客:http://opencv-srf.blogspot.jp/2013/08/histogram-equalization.html。

图像处理——直方图均衡化

图像处理——直方图均衡化

图像处理——直⽅图均衡化图像处理——直⽅图均衡化⼀、直⽅图⼀、直⽅图 直⽅图就是之图像中各像素的统计值。

反映图象中每种灰度出现的频率。

直⽅图的性质:直⽅图就是之图像中各像素的统计值。

反映图象中每种灰度出现的频率。

直⽅图的性质:1)表征了图像的⼀维信息。

只反映图像中像素不同灰度值出现的次数(或频数)⽽未反映像素所在位置。

1)表征了图像的⼀维信息。

只反映图像中像素不同灰度值出现的次数(或频数)⽽未反映像素所在位置。

2)与图像之间的关系是多对⼀的映射关系。

⼀幅图像唯⼀确定出与之对应的直⽅图,但不同图像可能有相同的直⽅图。

2)与图像之间的关系是多对⼀的映射关系。

⼀幅图像唯⼀确定出与之对应的直⽅图,但不同图像可能有相同的直⽅图。

3)⼦图直⽅图之和为整图的直⽅图。

3)⼦图直⽅图之和为整图的直⽅图。

⼆、直⽅图均衡化⼆、直⽅图均衡化直⽅图均衡化处理的“中⼼思想”是把原始图像的灰度直⽅图从⽐较集中的某个灰度区间变成在全部灰度范围内的均匀分布。

直⽅图均衡化直⽅图均衡化处理的“中⼼思想”是把原始图像的灰度直⽅图从⽐较集中的某个灰度区间变成在全部灰度范围内的均匀分布。

直⽅图均衡化就是对图像进⾏⾮线性拉伸,重新分配图像像素值,使⼀定灰度范围内的像素数量⼤致相同。

直⽅图均衡化就是把给定图像的直⽅图分布改就是对图像进⾏⾮线性拉伸,重新分配图像像素值,使⼀定灰度范围内的像素数量⼤致相同。

直⽅图均衡化就是把给定图像的直⽅图分布改变成“均匀”分布直⽅图分布。

变成“均匀”分布直⽅图分布。

(I )直⽅图均衡化的过程:(I )直⽅图均衡化的过程:1)列出原始图像和变换后图像的灰度级(L 是灰度级的个数);1)列出原始图像和变换后图像的灰度级(L 是灰度级的个数);2)统计原图像中各灰度级的像素个数;2)统计原图像中各灰度级的像素个数;3)计算原始图像直⽅图P(i)=Ni/N ;3)计算原始图像直⽅图P(i)=Ni/N ;4)计算累计直⽅图P(j)=P(1) + P(2) + P(3) +…+ P(i);4)计算累计直⽅图P(j)=P(1) + P(2) + P(3) +…+ P(i);5)利⽤灰度值变换函数计算变换后的灰度值,并四舍五⼊取整;j=INT[(L-1)Pj+0.5]5)利⽤灰度值变换函数计算变换后的灰度值,并四舍五⼊取整;j=INT[(L-1)Pj+0.5]6)确定灰度变换关系i →j ,据此将原图像的灰度值f (m,n )=i 修正为g (m ,n )=j ;6)确定灰度变换关系i →j ,据此将原图像的灰度值f (m,n )=i 修正为g (m ,n )=j ;7)统计变换后各灰度级的像素个数Nj ;7)统计变换后各灰度级的像素个数Nj ;8)计算变换后图像的直⽅图Pj=Nj/N 8)计算变换后图像的直⽅图Pj=Nj/N(II )图像均衡化后的缺点:(II )图像均衡化后的缺点:1)变换后图像的灰度级减少,某些细节消失;1)变换后图像的灰度级减少,某些细节消失;2)某些图像,如直⽅图有⾼峰,经处理后对⽐度不⾃然的过分增强。

直方图均衡化

直方图均衡化

1 直方图均衡化原理、目标、应用及编程实现1.1 直方图均衡化原理直方图均衡化处理的“中心思想”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。

直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。

直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布。

直方图规定化直方图均衡化的优点是能自动增强整个图像的对比度,但它的具体增强效果不易控制,处理的结果总是得到全局的均衡化的直方图.实际工作中,有时需要变换直方图使之成为某个特定的形状,从而有选择地增强某个灰度值范围内的对比度,这时可采用比较灵活的直方图规定化方法.直方图规定化增强处理的步骤如下:令Pr (r )和Pz (z )分别为原始图像和期望图像的灰度概率密度函数。

如果对原始图像和期望图像均作直方图均衡化处理,应有⎰==x r dr r P r T S 0)()((1) ⎰==xz dzz p Z G V 0)()((2) )(1V G Z -= (3)由于都是进行均衡化处理,处理后的原图像概率密度函数Ps (S )及理想图像概率密度函数PV (V )是相等的。

于是,我们可以用变换后的原始图像灰度级S 代替(2)式中的V 。

即Z = G - 1(S ) (4)这时的灰度级Z 便是所希望的图像的灰度级。

此外,利用(1)与(3)式还可得到组合变换函数Z = G - 1[T (r )] (5) 对连续图像,重要的是给出逆变换解析式。

对离散图像而言,有n n Z P ii Z =)( (6)∑-===10)()(l i i z i i Z P Z G V (7))]([)(11i i i r T G S G Z --== (8)1.2直方图均衡化目标及应用这种方法通常用来增加许多图像的局部对比度,尤其是当图像的有用数据的对比度相当接近的时候。

通过这种方法,亮度可以更好地在直方图上分布。

直方图均衡化_计算机视觉教程(第2版)_[共2页]

直方图均衡化_计算机视觉教程(第2版)_[共2页]

p( f ) = n f n f = 0, 1, L, L −1
(3.3.3)
式中 n 是图像里像素的总个数。通过用图像里像素的总个数进行归一化,所得到的直方图各列所
表示的是各灰度值像素在图像中所占的比例。
直方图均衡化的基本思想是把原始图的直方图变换为均匀分布的形式,类似于 3.2 节介绍的
灰度映射,这里需要确定一个变换函数,也就是增强函数,这个增强函数需要满足两个条件。
(1)它在 0 ≤ f ≤ L −1 范围内是一个单值单增函数,这是为了保证原图各灰度级在变换后仍保
持原来从黑到白(或从白到黑)的排列次序。
50
(a)
(b) 图 3.3.1 图像和直方图示例
(c)
严格地说,图像的灰度直方图是一个 1-D 的离散函数,可写成
h( f ) = n f f = 0, 1, L, L −1
(3.3.1)
式中 nf 是图像 f(x, y)中具有灰度值 f 的像素个数。在图 3.3.1 中,直方图的每一列(称为直方条 bin) 的高度对应 nf。直方图提供了原图中各种灰度值分布的情况,也可以说给出了对灰度累积直方图也是一个 1-D 的离散函数,可写成
f
c( f ) = ∑ n i f = 0, 1, L, L −1
(3.3.2)
i=0
累积直方图中列 f 的高度给出图像里灰度值小于和等于 f 的像素的总个数。图 3.3.1(c)所示
为对图 3.3.1(a)所给图像统计得到的累积直方图。
2.直方图均衡化原理
计算机视觉教程(第 2 版)
直方图均衡化和直方图规定化。
3.3.1 直方图均衡化
直方图均衡化是一种典型的通过对图像的直方图进行修正来获得图像增强效果的自动方法。 1.直方图和累积直方图 直方图是通过对图像的统计得到的。对一幅灰度图像,其灰度直方图反映了该图中不同灰度 级出现的统计情况。图 3.3.1(a)所示的一幅图像,图中像素的灰度级共有 4 个,从 0 到 3。对不 同灰度像素的统计给出图 3.3.1(b)所示的灰度统计直方图,其中横轴表示不同的灰度级,而纵 轴表示图像中各个灰度级像素的个数。

直方图均衡化教案

直方图均衡化教案

直方图均衡化教案1. 直方图是多种空间域处理技术的基础。

直方图操作能有效地用于图像增强。

灰度直方图灰度直方图是灰度值的函数,它描述了图像中各灰度值的像素个数。

通常用横坐标表示像素的灰度级别,纵坐标表示对应的灰度级出现的频率(像素的个数)。

频率的计算公式为:p(r)=nr. nr是图像中灰度为r的像素数。

常用的直方图是规格化和离散化的,即纵坐标用相对值表示。

设图像总像素为N,某一级灰度像素数为nr,则直方图表示为:p(r)=nr/N. 灰度直方图反映了一幅图像的灰度分布情况。

2.直方图均衡化通过把原图像的直方图通过变换函数修正为分布比较均匀的直方图,从而改变图像整体偏暗或整体偏亮,灰度层次不丰富的情况,这种技术叫直方图均衡化。

直方图均衡化过程解析:设r和s分别表示原图像灰度级和经直方图均衡化后的图像灰度级。

为便于讨论,对r和s进行归一化,使:0≤r,s≤1.对于一幅给定的图像,归一化后灰度级分布在0≤r≤l范围内。

对[0,1]区间内的任一个r值进行如下变换:s=T(r). 变换函数s=T(r)应满足下列条件:(1)在0≤r≤1的区间内,T(r)单值单调增加。

保证图像的灰度级从白到黑的次序不变。

(2)对于0≤r≤1,有0≤T(r)≤1。

保证映射变换后的像素灰度值在允许的范围内。

3.直方图均衡化的计算步骤及实例假设64×64的灰度图像,共8个灰度级,其灰度级分布见下表,现要求对其进行均衡化处理。

000011101()()()0.19()()()()0.190.250.44rjrj rjrrj s T r P r P r s T r P r P r P r =========+=+=∑∑ 依此类推可计算得:s2=0.65;s3=0.81;s4=0.89;s5=0.95;s6=0.98;s7=1对k s 进行舍入处理,由于原图像的灰度级只有8级,因此上述各需用1/7为量化单位进行舍入运算,得到如下结果:k s 的最终确定,由k s 的舍入结果可见,均衡化后的灰度级仅有5个级别,分别是:s0=1/7,s1=3/7,s2=5/7,s3=6/7,s4=1/7。

图像处理之直方图均衡化

图像处理之直方图均衡化

图像处理之直⽅图均衡化图像处理之直⽅图均衡化⼀、直⽅图cv2.calcHist(images,channels,mask,histSize,ranges)images: 原图像图像格式为 uint8 或 float32。

当传⼊函数时应⽤中括号 [] 括来例如[img]channels: 同样⽤中括号括来它会告函数我们统幅图像的直⽅图。

如果⼊图像是灰度图它的值就是 [0]如果是彩⾊图像的传⼊的参数可以是 [0][1][2] 它们分别对应着 BGR。

mask: 掩模图像。

统整幅图像的直⽅图就把它为 None。

但是如果你想统图像某⼀分的直⽅图的你就制作⼀个掩模图像并使⽤它。

histSize:BIN 的数⽬。

也应⽤中括号括来ranges: 像素值范围常为 [0256]img = cv2.imread('cat.jpg',0) #0表⽰灰度图hist = cv2.calcHist([img],[0],None,[256],[0,256])hist.shape #(256, 1)plt.hist(img.ravel(),256);plt.show()img = cv2.imread('cat.jpg')color = ('b','g','r')for i,col in enumerate(color):histr = cv2.calcHist([img],[i],None,[256],[0,256])plt.plot(histr,color = col)plt.xlim([0,256])⼆、mask操作# 创建mastmask = np.zeros(img.shape[:2], np.uint8)print (mask.shape) #(414, 500)mask[100:300, 100:400] = 255cv_show(mask,'mask')img = cv2.imread('cat.jpg', 0)cv_show(img,'img')masked_img = cv2.bitwise_and(img, img, mask=mask)#与操作cv_show(masked_img,'masked_img')hist_full = cv2.calcHist([img], [0], None, [256], [0, 256])hist_mask = cv2.calcHist([img], [0], mask, [256], [0, 256])plt.subplot(221), plt.imshow(img, 'gray')plt.subplot(222), plt.imshow(mask, 'gray')plt.subplot(223), plt.imshow(masked_img, 'gray')plt.subplot(224), plt.plot(hist_full), plt.plot(hist_mask)plt.xlim([0, 256])plt.show()三、直⽅图均衡化img = cv2.imread('clahe.jpg',0) #0表⽰灰度图 #claheplt.hist(img.ravel(),256);plt.show()equ = cv2.equalizeHist(img)plt.hist(equ.ravel(),256)plt.show()res = np.hstack((img,equ))cv_show(res,'res')四、⾃适应直⽅图均衡化clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8)) #将图像分为8*8的⽅块res_clahe = clahe.apply(img)res = np.hstack((img,equ,res_clahe))cv_show(res,'res')。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验
1.直方图均衡化程序的原理及步骤
直方图均衡化处理的“中心思想”是把原始图像的灰度直方图从比较集中的某灰度区间变成在全部灰度范围内的均匀分布。

直方图均衡化的原理:
直方图均衡化是把原图像的直方图通过灰度变换函数修正为灰度均匀分布的直方图,然后按均衡直方图修正原图像,其变换函数取决于图像灰度直方图的累积分布函数。

概括地说,就是把一已知灰度概率分布的图像,经过一种变换,使之演变成一幅具有均匀概率分布的新图像。

当图像的直方图为一均匀分布时,图像的信息熵最大,此时图像包含的信息量最大,图像看起来更清晰。

灰度直方图用各灰度值出现的相对频数(该灰度级的像素数与图像总像素数之比)表示。

直方图表示数字图像中每一灰度级与其出现频数的的统计关系,用横坐标表示灰度级,纵坐标表示频数。

直方图就能给出该图像的概貌性描述,例如图像的灰度范围、每个灰度级的频数和灰度的分布、整幅图像的亮度和平均明暗对比度等,由此可得出进一步处理的重要依据。

计算每个灰度级出现的概率为:
P r (r k )=N k /N k=0,1,2,…,L-1
上式中, P r (r k )表示第k 个灰度级出现的概率,N k 为第 k 个灰度级出现的频数,N 为图像像素总数,L 为图像中可能的灰度级总数。

由此可得直方图均衡化变换函数,即图像的灰度累积分布函数Sk 为:
1,...,2,1,0)()(00-====∑∑==L k r P r T s k
j N
N k j j r k k j 上式中, S k 为归一化灰度级。

这个变换映射称做直方图均衡化或直方图线性化。

直方图均衡化过程如下:
(1) 输出原图像;
(2) 根据公式P r (r k )=n k /m*n ( k=0,1,2,…,L-1)计算对应灰度级出现的概率,
绘制原图像的直方图。

(3) 计算原图象的灰度级累积分布函数:sk=Σp r (r k );
(4) 取整Sk=round((S1*256)+0.5);将Sk 归一到相近的灰度级,绘制均衡化后的
直方图。

(5) 将每个像素归一化后的灰度值赋给这个像素,画出均衡化后的图像。

2.根据直方图均衡化步骤对输入的原图象进行处理,输出的图像如下图所示。

由上图可以看出,采用直方图均衡化后,可使图像的灰度间距拉开或使灰度均匀分布,从而增大反差,使图像更加清晰,达到增强的目的。

但直方图均衡在对灰度呈现两端分布,同时在图像的低灰度区域有较多像素点的图像进行处理后, 得不到满意的效果,达不到突出图像细节的目的。

针对上述直方图均衡化的弊端,可以先计算出图像的灰度直方图,然后将其灰度进行拉伸,以便改善图像增强效果。

相关文档
最新文档