编程实现计算图像直方图、图像熵解析

编程实现计算图像直方图、图像熵解析
编程实现计算图像直方图、图像熵解析

数字图像处理实验报告——图像常用格式及显示

武汉大学

2016.04

1 实验内容

本实验报告主要介绍

主要内容

1. 理解灰度映射原理;

2. 掌握灰度映射计算方法;

3. 理解图像直方图的定义;

4. 理解图像直方图的作用;

5. 理解图像熵的定义及作用;

6. 掌握图像直方图计算方法;

7. 掌握图像熵的计算方法;

8. 进一步熟悉图像文件256色、24位真彩色BMP图像格式;

9. 进一步熟悉Visual C++ 6.0编程界面,及使用方法;

10. 熟悉Visual C++中绘图函数方法;

11. 编程完成计算图像几种灰度映射;

12. 编程实现计算图像直方图、图像熵;

13. 编程绘制图像直方图;

14. 根据不通灰度映射处理观察图像直方图变化;

15. 总结实验过程(实验报告):编程、调试、结果、分析、结论。

主要目的

1. 建立相关实验环境:从指定服务器指定位置拷贝实验相关材料,包括:实验要求,实例程序,示例图像,VC++6.0程序,实验相关幻灯片;

2. 使用实验一建立的简单多文档应用程序框架及、图像夺取和显示功能,进一步熟悉图像的格式及显示,熟悉图像的组织和存储方式。

3. 编写图像线性灰度映射:

4. 编写图像直方图统计程序:

5. 观察图像直方图

主要函数说明

1.void CZhangyanImageView::OnProcessZhifangtu()

函数目的:在用户界面中添加直方图处理,并添加函数在.cpp文件中

函数参数说明:建立直方图处理函数

2.void CZhangyanImageView::OnProcessLinetran()

函数目的:在用户界面中添加灰度变换处理,并添加函数在.cpp文件中函数参数说明:建立灰度变换处理函数

主要代码注释

1.灰度变换函数代码

CZhangyanImageDoc* pDoc = GetDocument();//定义引用doc的指针ASSERT_V ALID(pDoc);

unsigned char * pBits=pDoc->m_pBits;//把文件中的m_pBits赋予pBits

int nWidth=pDoc->imageWidth;

int nHeight=pDoc->imageHeight;//定义整形的image图片宽和高

int nValue=0;

double dValue=0.0;

long lTotal=0;

long lTotalD=0;

long lTotalL=0;

int ab=100,bb=255,a=0,b=255;//定义原图像的灰度值0-255范围,定义处理后图像灰度值100-255范围

if(pBits==NULL) return ;//遍历完成则返回

for(int i=0;i

{

lTotalL=nWidth*i;//统计出宽*当前高

for(int j=0;j

{

lTotalD=lTotalL+j;//统计出第几个像素

nValue=*(pBits+lTotalD);// 采用int nValue= *

(m_pBits imageWidth * i+j )公式获得图像点灰度值

dValue=ab+1.0*(bb-ab)/(b-a)*(nValue-a);//套用灰度变换公式

pBits[lTotalD]=int(dValue);

}

}//对图像进行遍历与灰度处理

Invalidate();//强制显示改变了的图像

2.直方图生成函数

m_bShow=TRUE;

CZhangyanImageDoc* pDoc = GetDocument();//定义引用doc的指针

ASSERT_V ALID(pDoc);

unsigned char * pBits=pDoc->m_pBits; //把文件中的m_pBits图像指针赋予pBits

int nWidth=pDoc->imageWidth;

int nHeight=pDoc->imageHeight; //定义整形的image图片宽和高

int nValue=0;

long lTotal=0;

long lTotalD=0;

long lTotalL=0;

dMax=0;

dMaxG=0;

dMaxB=0;//数据初始化赋值存储图像灰度像素的计数

if(pBits==NULL) return ;

if(pDoc->m_nColorBits==8) //对图像进行是否是8彩色的判断{

for(int k=0;k<256;k++)

{m_lValue[k]=0;

m_dValue[k]=0.0;

}

for(int i=0;i

{

lTotalL=nWidth*i;

for(int j=0;j

{

lTotalD=lTotalL+j;

nValue=*(pBits+lTotalD);//统计灰度值

m_lValue[nValue]=m_lValue[nValue]+1;//加1 }

}

lTotal=nWidth*nHeight;

for(INT k=0;k<256;k++)

{

m_dValue[k]=1.0*m_lValue[k]/lTotal;

if(dMax

}

}//对图像进行遍历并统计直方图数据

long nValueG=0;

long nValueB=0;//统计R G B

if(pDoc->m_nColorBits==24) //对图像进行是否是24彩色的判断{

for(int k=0;k<256;k++)

{m_lValue[k]=0;

m_dValue[k]=0.0;

m_lValueG[k]=0;

m_dValueG[k]=0.0;

m_lValueB[k]=0;

m_dValueB[k]=0.0;//

}

for(int i=0;i

{

lTotalL=nWidth*i;

for(int j=0;j

{

lTotalD=(lTotalL+j)*3;

nValue=*(pBits+lTotalD);

m_lValue[nValue]=m_lValue[nValue]+1;

nValueG=*(pBits+lTotalD+1);

m_lValueG[nValueG]=m_lValueG[nValueG]+1;

nValueB=*(pBits+lTotalD+2);

m_lValueB[nValueB]=m_lValueB[nValueB]+1;

}

}

lTotal=nWidth*nHeight;

for(int k=0;k<256;k++)

{

m_dValue[k]=1.0*m_lValue[k]/lTotal;

if(dMax

m_dValueG[k]=1.0*m_lValueG[k]/lTotal;

if(dMaxG

m_dValueB[k]=1.0*m_lValueB[k]/lTotal;

if(dMaxB

}

}//对图像进行遍历并统计直方图数据

Invalidate();/强制显示改变了的图像

3.变量声明

void DrawGraph(CDC * pDC);//绘制直方图函数

long m_lValue[256];//红色分量灰度统计

double m_dValue[256];// 红色分量灰度频数

long m_lValueG[256]; //绿色分量灰度统计

double m_dValueG[256]; // 绿色分量灰度频数

long m_lValueB[256]; //蓝色分量灰度统计

double m_dValueB[256]; //蓝色分量灰度频数

double dMax,dMaxG,dMaxB;//红、绿、蓝频数最大值

BOOL m_bShow;//是否显示直方图

4.图形绘制

CZhangyanImageDoc* pDoc = GetDocument();

ASSERT_V ALID(pDoc);// CCCJImageDoc* pDoc 在各人的程序中不一样unsigned char * pBits=pDoc->m_pBits;

int X0=0+5;

int Y0=510;

int WX=768+3,HY=500;

int H=375;

int W=256;

CPen cyPen(PS_SOLID,2,RGB(255,255,0));

CPen * oldPen=pDC->SelectObject(&cyPen);

pDC->MoveTo(X0,Y0);

pDC->LineTo(X0+WX,Y0);

pDC->MoveTo(X0,Y0);

pDC->LineTo(X0,Y0-HY);

pDC->MoveTo(X0,Y0-HY);

pDC->LineTo(X0+WX,Y0-HY);

pDC->MoveTo(X0+WX,Y0);

pDC->LineTo(X0+WX,Y0-HY);

pDC->SelectObject(&oldPen);//设置直方图的区域

{

CPen redPen(PS_SOLID,1,RGB(255,0,0));

oldPen=pDC->SelectObject(&redPen);

for(int i=0;i<256;i++)

{

int x0,y0,x1,y1;

double dy;

x0=X0+i*3;

y0=Y0;

x1=X0+i*3;

dy=Y0-1.0*H*m_dValue[i]/dMax;

y1=int(dy+0.5);

pDC->MoveTo(x0,y0);

pDC->LineTo(x1,y1); //进行绘图操作

}

pDC->SelectObject(oldPen);

//以下略去对于24位的解释

1.1灰度变换结果

图灰度变换结果1.2图像直方图

图读取图像直方图

2实验日志

2.1实验中遇到问题

较于上次试验,本次试验显得轻车熟路许多,内容与调试也比较简单,感觉编写实验报告中遇到的最大困难就是对代码的阐述。C++中指针是比较难的,再加上vs开发中结构架构的重叠,各种的声明,比较复杂,仔细的阅读了懂得了

int nValue= *(m_pBits imageWidth * i +j )代表了灰度值的获取,再结合灰度变换的公式,就很快清楚了进行灰度变换函数的意思,对于直方图数据采集中出现的很多变量感觉不好理解,对于DrawGraph函数绘制的理解还是比较弱的,希望下次实验时让学长来解疑答惑,总之,这次试验按部就班的成功完成,要尽力完善一下自己对c++的理解,获益匪浅。

数字图像处理实验报告

实验一灰度图像直方图统计 一、实验目的 掌握灰度图像直方图的概念和计算方法,了解直方图的作用和用途。提高学生编程能力,巩固所学知识。 二、实验内容和要求 (1)用Photoshop显示、了解图像平均明暗度和对比度等信息; (2)用MatLab读取和显示一幅灰度图像; (3)用MatLab编写直方图统计的程序。 三、实验步骤 1. 使用Photoshop显示直方图: 1)点击文件→打开,打开一幅图像; 2)对图像做增强处理,例如选择图像→调整→自动对比度对图像进行灰度拉伸,观察图像进行对比度增强前后的视觉变化。 3)利用统计灰度图像直方图的程序分别针对灰度拉伸前后的灰度图像绘制其灰度直方图,观察其前后的直方图变化。 2.用MatLab读取和显示一幅灰度图像; 3. 绘制图像的灰度直方图; function Display_Histogram()

Input=imread('timg.jpg'); figure(100); imshow(uint8(Input)); title('原始图像'); Input_Image=rgb2gray(Input); figure(200); imshow(uint8(Input_Image)); title('灰度图像'); sum=0; His_Image=zeros(1,256); [m,n]=size(Input_Image); for k=0:255 for I=1:m for j=1:n if Input_Image(I,j)==k His_Image(k+1)=His_Image(k+1)+1; end end end end figure(300); plot(His_Image); title('图像的灰度直方图'); 4.显示图像的灰度直方图。

实验一 灰度图像信息熵的相关计算与分析

实验一 灰度图像信息熵的相关计算与分析

一、实验目的 1、复习信息熵,条件熵,联合熵,互信息,相对熵的基本定义, 掌握其计算方法,学习互信息与相对熵的区别之处并比较两者的有效性,加深对所学理论理论知识的理解。 2、掌握图像的的基本处理方法,了解图像的编码原理。 3、学习使用matlab ,掌握matlab 的编程。 4、通过对比分析,。在解决问题的过程中,锻炼自身对问题的研究能力。 二、实验内容与要求 1、计算灰度图像的信息熵,条件熵,联合熵,互信息,相对熵,并比较互信息和相对熵在判别两幅图像的联系与区别。 2、利用matlab 编程计算,并书写完整实验报告。 三、实验原理 1、信息熵 离散随机变量X 的熵H(X)为: ()()log () x H X p x p x χ ∈=-∑ 图像熵是一种特征的统计形式,它反映了图像中平均信息量的多少。图像的一 维熵表示图像中灰度分布的聚集特征所包含的信息量,将图像的灰度值进行数学统计,便可得到每个灰度值出现的次数及概率,则定义灰度图像的一元灰度熵为: 255 log i i i H p p ==-∑ 利用信息熵的计算公式便可计算图像的信息熵,求出任意一个离散信源的熵(平均自信息量)。自信息是一个随机变量,它是指某一信源发出某一消息所含有的信息量。所发出的消息不同,它们所含有的信息量也就不同。任何一个消息的自信息量都代表不了信源所包含的平均自信息量。 信息熵的意义:信源的信息熵H 是从整个信源的统计特性来考虑的。它是从平均意义上来表征信源的总体特性的。对于某特定的信源,其信息熵只有一个。不同的信源因统计特性不同,其熵也不同。 图像的一维熵可以表示图像灰度分布的聚集特征,却不能反映图像灰度分布的空间特征,为了表征这种空间特征,可以在一维熵的基础上引入能够反映灰度分布空间特征的特征量来组成图像的二维熵。选择图像的邻域灰度均值作为灰度分布的空间特征量,与图像的像素灰度组成特征二元组,记为( i, j ),其中i 表示像素的灰度值(0255)i ≤≤,j 表示邻域灰度(0255)j ≤≤, 2 (,)/ij P f i j N =

matlab图像处理图像灰度变换直方图变换

附录1 课程实验报告格式 每个实验项目包括:1)设计思路,2)程序代码,3)实验结果,4)实验中出现的问题及解决方法。 实验一:直方图灰度变换 A:读入灰度图像‘debye1.tif’,采用交互式操作,用improfile绘制一条线段的灰度值。 imread('rice.tif'); imshow('rice.tif'),title('rice.tif'); improfile,title('主对角线上灰度值')

B:读入RGB图像‘flowers.tif’,显示所选线段上红、绿、蓝颜色分量的分布imread('flowers.tif'); imshow('flowers.tif'),title('flowers.tif'); improfile,title('主对角线红绿蓝分量') C:图像灰度变化 f=imread('rice.png'); imhist(f,256); %显示其直方图 g1=imadjust(f,[0 1],[1 0]); %灰度转换,实现明暗转换(负片图像) figure,imshow(g1)%将0.5到0.75的灰度级扩展到范围[0 1] g2=imadjust(f,[0.5 0.75],[0 1]); figure,imshow(g2) 图像灰度变换处理实例: g=imread('me.jpg'); imshow(g),title('原始图片'); h=log(1+double(g)); %对输入图像对数映射变换 h=mat2gray(h); %将矩阵h转换为灰度图片

h=im2uint8(h); %将灰度图转换为8位图 imshow(h),title('转换后的8位图'); 运行后的结果: 实验二:直方图变换 A:直方图显示 I=imread('cameraman.tif'); %读取图像 subplot(1,2,1),imshow(I) %输出图像 title('原始图像') %在原始图像中加标题 subplot(1,2,2),imhist(I) %输出原图直方图 title('原始图像直方图') %在原图直方图上加标题运行结果如下:

实验-直方图统计及亮度调整概要

实验 2.直方图统计及亮度调整 一、实验目的 了解并掌握直方图统计方法以及分段线性拉伸、直方图均衡等亮度调整算法, 通过观察对这些运算建立感性认识。 二、实验内容 1. 观察各类图像的直方图; 2. 操作 LUT 灰度对照表,进行分段线性拉伸; 3. 采用直方图均衡方法对低对比度的图像进行对比度增强。 三、基本原理 1.直方图的定义 图象的灰度直方图是一个函数, 表示数字图象中每一灰度级与该灰度级出现的频数 (即具有这一灰度级的象素数目间的对应关系: P b N b M ( ( = M 为一幅图象所包含的象素总数; N (b 为图象中灰度值为 b 的象素总数。通常,以灰度值 b 为横坐标, N (b 为纵坐标。直方图是图象中象素灰度值的一阶概率分布密度的一种近似。 2.对比度增强 对比度增强又称为点运算,逐点改变输入图象的每一象素的灰度,而各象素的位置不改变, 一般用来拓宽图象的灰度范围。

(1灰度变换法(LUT 对照 典型的对比度拉伸灰度变换关系如图 1所示,其对应关系如下: g f f a f a g a f b f b g b f L a b = ≤< -+≤< -+≤

图 1. 典型的对比度拉伸灰度变换关系 可见,输出和输入图象之间各点的灰度是按照一定的映射关系相联系的,这种映射关系在计算机中则是通过一个查照表(look-up table,即 LUT 实现的。通过 LUT 对照改变了图象中不同灰度特性趋于的对比度或反差(contrast ,达到改善视觉效果的目的。 (2 直方图均衡 直方图均衡(histogram equalization就是通过点运算使输入图像的灰度分布较为均匀, 使图像具有较好的视觉效果。设 r , s 分别为原图和新图的灰度, ?r (r , ?s (s 分别为原图及新图的概率密度函数,则均衡变换为原图像的累积分布函数: s T r r r r ==?( ?( 0 对于离散图像,均衡转换公式为: ∑∑=====k j j k j j r k k n M L r P r T s 0max 0 ( ( 其中, L max 指图像中的最大灰度值(对于灰度图像就是 255。 四、实验步骤 (一 Matlab 的 demo 演示

(完整版)信息熵在图像处理特别是图像分割和图像配准中的应用——信息与计算科学毕业设计

摘要 信息论是人们在长期通信实践活动中,由通信技术与概率论、随机过程、数理统计等学科相结合而逐步发展起来的一门新兴交叉学科。而熵是信息论中事件出现概率的不确定性的量度,能有效反映事件包含的信息。随着科学技术,特别是信息技术的迅猛发展,信息理论在通信领域中发挥了越来越重要的作用,由于信息理论解决问题的思路和方法独特、新颖和有效,信息论已渗透到其他科学领域。随着计算机技术和数学理论的不断发展,人工智能、神经网络、遗传算法、模糊理论的不断完善,信息理论的应用越来越广泛。在图像处理研究中,信息熵也越来越受到关注。为了寻找快速有效的图像处理方法,信息理论越来越多地渗透到图像处理技术中。本文通过进一步探讨概论率中熵的概念,分析其在图像处理中的应用,通过概念的分析理解,详细讨论其在图像处理的各个方面:如图像分割、图像配准、人脸识别,特征检测等的应用。 本文介绍了信息熵在图像处理中的应用,总结了一些基于熵的基本概念,互信息的定义。并给出了信息熵在图像处理特别是图像分割和图像配准中的应用,最后实现了信息熵在图像配准中的方法。 关键词:信息熵,互信息,图像分割,图像配准

Abstract Information theory is a new interdisciplinary subject developed in people long-term communication practice, combining with communication technology, theory of probability, stochastic processes, and mathematical statistics. Entropy is a measure of the uncertainty the probability of the occurrence of the event in the information theory, it can effectively reflect the information event contains. With the development of science and technology, especially the rapid development of information technology, information theory has played a more and more important role in the communication field, because the ideas and methods to solve the problem of information theory is unique, novel and effective, information theory has penetrated into other areas of science. With the development of computer technology and mathematical theory, continuous improvement of artificial intelligence, neural network, genetic algorithm, fuzzy theory, there are more and more extensive applications of information theory. In the research of image processing, the information entropy has attracted more and more attention. In

数字图像处理点运算和直方图处理

实验1 点运算和直方图处理 一、实验目的 1. 掌握利用Matlab图像工具箱显示直方图的方法 2. 掌握运用点操作进行图像处理的基本原理。 3. 进一步理解利用点操作这一方法进行图像处理的特点。 4. 掌握利用Matlab图像工具箱进行直方图均衡化的基本方法。 二、实验的硬件、软件平台 硬件:计算机 软件:操作系统:WINDOWS 7 应用软件:MATLAB 三、实验内容及步骤 1. 了解Matlab图像工具箱的使用。 2. 利用Matlab图像工具箱对图像进行点操作,要求完成下列3个题目中 的至少2个。 ⑴图1灰度范围偏小,且灰度偏低,改正之。 ⑵图2暗处细节分辨不清,使其能看清楚。 ⑶图3亮处细节分辨不清,使其能看清楚。 图1 图2 图3 3. 给出处理前后图像的直方图。 4. 利用MatLab图像处理工具箱中函数对以上图像进行直方图均衡化操 作,观察结果。 四、思考题 1. 点操作能完成哪些图像增强功能? 2. 直方图均衡化后直方图为何并不平坦?为何灰度级会减少? 五、实验报告要求

1.对点操作的原理进行说明。 2.给出程序清单和注释。 3.对处理过程和结果进行分析(包括对处理前后图像的直方图的分析)。 实验代码以及解读 点操作: I = imread('POINT1.BMP')。 %读入图像 j=rgb2gray(I)。%将图像转为灰度图像 INFO=IMFINFO('POINT1.BMP') %获取图片的格式、尺寸、颜色数量、修改时间等信息[l,r]=size(j)。%图片大小 figure。%建立一个图形框 subplot(221) imshow(j) %在两行两列的第一个位置放置图片j title('POINT1.BMP') %给该图片加上标题POINT1.BMP for m=1:l for n=1:r %从第一个像素循环到最后一个像素p1(m,n)=j(m,n)*1.2。%把各点乘上1.2得到p1图 end end for m=1:l for n=1:r p2(m,n)=j(m,n)*2。%%把各点乘上2得到p2图 end end for m=1:l for n=1:r p3(m,n)=j(m,n)*2+50。%把各点乘上2再加50得到p2图 end end subplot(222) imshow(p1) title('j(m,n)*1.2') %p1图放在第二个位置且冠名j(m,n)*1.2 subplot(223) imshow(p2) title('j(m,n)*2') %p1图放在第三个位置且冠名j(m,n)* 2 subplot(224) imshow(p3) title('j(m,n)*2+50') %p1图放在第四个位置且冠名j(m,n)*2+50 figure。%建立一个新的窗口并且依次显示以上四个图的直方图

灰度图像直方图统计

1.灰度图像直方图统计实习报告 一、实习目的 在学习灰度图像直方图的概念、计算方法、性质和相关应用的基础上,应用Photoshop软件和编写灰度直方图统计程序,能初步掌握图像文件格式读写与图像数据处理,提高学生兴趣和编程能力,巩固所学知识。 二、实习内容 1.实习数据 E:\ 数字图像处理\实习一\Lena.raw 2.利用Photoshop显示图像的灰度直方图,从直方图上了解图像平均明暗度和对比度等信息。 3.要求利用C或C++语言编写灰度图像直方图统计的程序。 三、实习步骤 1.使用Photoshop显示直方图。 (1)点击“文件”-->“打开”,打开一幅图像,此处选取“lena.raw”; (2)点击“图像”-->“直方图”,显示图像的直方图;

(3)对图像做增强处理,例如选择“图像”-->“调整”-->“自动对比度”对图像进行灰度拉伸,然后再显示直方图,观察它的变化。 2.用C或C++编写显示直方图的程序。 具体代码如下: #include "stdio.h" #include "windows.h" void main() { FILE *fp; //文件类指针

fp=fopen("lena.raw","rb"); //打开二进制文件 if (fp==NULL) { printf("文件已损坏,请重新打开。 \n"); } else printf("文件已打开,已经生成.txt文档,请查看。\n"); BYTE PIXEL[512*512]; fread(PIXEL,1,512*512,fp);//二进制文件读取 fclose(fp);//关闭文件 int HistogramStat[256]; for(int i=0;i<256;i++) HistogramStat[i]=0;//赋初值 for (i=0;i<512*512;i++) { int a=PIXEL[i]; HistogramStat[a]++; } //统计像素个数 fp=fopen("灰度直方图.txt","rb"); fprintf(fp,"图像灰度,像素个数\n"); for (i=0;i<256;i++) { if (HistogramStat[i]!=0) fprintf(fp,"%5d,%5d\n",i,HistogramStat[i]); } fprintf(fp,"像素个数为0的已被省略。");//输出内容 } 四、思考题 1灰度直方图可以反映出一幅图像的哪些特性? 答:(1)表征了图像的一维信息。只反映图像中像素不同灰度出现的次数,而未反映像素所在的位置。即丢失了像素的位置信息。 (2)与图像之间的关系式多对一的映射关系。一幅图像唯一确定出与之对应的直方图,但不同的图像可能有相同的直方图。 (3)一幅图像可分为多个子区域,子图直方图之和为整图的直方图。 2灰度直方图有何用途?编程实现一种灰度直方图应用的程序。 答:(1)用于判断图像量化是否恰当。 (2)用于确定图像的二值化阈值。 (3)计算图像中物体的面积。 (4)计算图像信息量H(熵)。 3在本次实习的基础上,试编写直方图均衡的程序。 五、实习心得体会

实验2(A) 灰度图像直方图统计与均衡化

实验2 灰度图像直方图统计与均衡化 一、 实验目的 1. 学习灰度图像直方图的概念、计算方法、性质和相关应用。 2. 利用VC++编写灰度图像直方图统计程序。 3. 掌握灰度直方图的概念及其计算方法; 4. 熟练掌握直力图均衡化和直方图规定化的计算过程; 5. 熟练掌握空域滤波中常用的平滑和锐化滤波器; 6. 掌握色彩直方图的概念和计算方法 7. 利用VC++程序进行图像增强。 二、 实验原理 灰度直方图是灰度级的函数,描述的是图像中每种灰度级像素的个数,反映图像中每种灰度出现的频率。 i i v n n = (0.1) 式中,n 是图像总的像素个数;n i 是图像中具有第i 个灰度级的像素个数;v i 是第i 个灰度级出现的频率。 依据定义,若图像具有L 级灰度,通常L =256,即8位灰度级,则大小为M ?N 的灰度图像f (x , y )的灰度直方图hist[0, …, L -1]可用如下步骤计算获得: ① 初始化,hist[k ]=0 ; k =0, 1, …, L -1。 ② 按像素扫描图像,对灰度级中的每个灰度值,统计图像中具有该灰度值的像素个数。 (),;0,1,,1;0,1,,1hist f x y x M y N ++=-=-???? (0.2) 3. 直方图归一化。 ()(),hist f x y M N ?????i i v n n = (0.3) 图像增强是指按特定的需要突出一幅图像中的某些信息,同时,消弱或去除某些不需要的信息的处理方法。其主要目的是处理后的图像对某些特定的应用比原来的图像更加有效。图像增强技术主要有直方图修改处理、图像平滑化处理、图像尖锐化处理和彩色处理技术等。本实验以直方图均衡化增强图像对比度的方法为主要内容,其他方法同学们可以在课后自行联系。

摄像头编程并且对图像的处理以及直方图的算法

题目:图像的基本处理班级:2011级软件2班姓名:刘磊磊 时间:20130907

摘要:随着数字化与多媒体时代的来临,数字图像处理已经成为必备的基础知识。全国各大专院校的计算机、电子、通信、医学、光学及许多相关专业都开设了与数字图像预处理相关的课程。数字图像二值化是图像预处理中的一项重要技术,其在模式识别、光学字符识别、医学成像等方面都有着重要应用。本论文主要为大家介绍24位真彩图像的灰度、二值处理以及图像的一些简单的打开和保存和如何画直方图,还有一些通过这次小学期学到的一些知识。 关键字:灰度处理,二值化 图像的打开 void CText1Dlg::ShowPic() { if(m_path =="") //判断图片路径是否存在 { return; } hwnd = GetDlgItem(IDC_pic); hDesDC = hwnd->GetDC()->m_hDC; hSrcDC = CreateCompatibleDC(hDesDC); hBitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),m_path,IMAGE_BITMAP,0,0, LR_LOADFROMFILE|LR_CREATEDIBSECTION); GetObject(hBitmap, sizeof(BITMAP), &bm); SelectObject(hSrcDC, hBitmap); hwnd->GetClientRect(&rect); ::SetStretchBltMode(hDesDC,COLORONCOLOR); ::StretchBlt(hDesDC, rect.left, rect.top, rect.right, rect.bottom, hSrcDC, 0, 0, bm.bmWidth, bm.bmHeight,+SRCCOPY); UpdateData(false);

基于灰度直方图的图像分割阈值自适应选取方法

中北大学 毕业设计(论文)任务书 学院、系: 专业: 学生姓名:车永健学号: 设计(论文)题目:基于灰度直方图的图像分割阈值自适应选取方法 起迄日期: 2015年3月9日~2015年6月20日设计(论文)地点: 指导教师:郭晨霞 系主任: 发任务书日期:2015年 2 月25 日

任务书填写要求 1.毕业设计(论文)任务书由指导教师根据各课题的具体情况填写,经学生所在系的负责人审查、系领导签字后生效。此任务书应在毕业设计(论文)开始前一周内填好并发给学生; 2.任务书内容必须用黑墨水笔工整书写或按教务处统一设计的电子文档标准格式(可从教务处网页上下载)打印,不得随便涂改或潦草书写,禁止打印在其它纸上后剪贴; 3.任务书内填写的内容,必须和学生毕业设计(论文)完成的情况相一致,若有变更,应当经过所在专业及系主管领导审批后方可重新填写; 4.任务书内有关“学院、系”、“专业”等名称的填写,应写中文全称,不能写数字代码。学生的“学号”要写全号(如020*******,为10位数),不能只写最后2位或1位数字; 5.有关年月日等日期的填写,应当按照国标GB/T 7408—94《数据元和交换格式、信息交换、日期和时间表示法》规定的要求,一律用阿拉伯数字书写。如“2004年3月15日”或“2004-03-15”。

毕业设计(论文)任务书

毕业设计(论文)任务书 3.对毕业设计(论文)课题成果的要求〔包括毕业设计(论文)、图纸、实物样品等): 1、论文一份; 2、程序代码及图像结果; 3、英文翻译一份。 4.毕业设计(论文)课题工作进度计划: 起迄日期工作内容 2015年 3月 9 日~ 3 月20日 4 月 1 日~ 4月 20 日 4 月 21 日~ 5月 10 日 5 月 11 日~ 6月 15 日 6 月 16 日~ 6月 19 日查找资料,完成开题报告; 学习有关知识,方案确定,完成中期报告;完善算法并仿真验证; 撰写、修改、评阅毕业论文; 论文答辩 学生所在系审查意见: 系主任: 年月日

实验一-信息熵与图像熵计算-正确

实验一信息熵与图像熵计算(2 学时) 一、实验目的 1.复习MATLAB的基本命令,熟悉MATLAB下的基本函数; 2.复习信息熵基本定义,能够自学图像熵定义和基本概念。 二、实验内容 1.能够写出MATLAB源代码,求信源的信息熵; 2.根据图像熵基本知识,综合设计出MATLAB程序,求出给定图像的图像熵。 三、实验仪器、设备 1.计算机-系统最低配置256M内存、P4 CPU; 2.MATLAB编程软件。 四实验流程图 五实验数据及结果分析

四、实验原理 1.MATLAB中数据类型、矩阵运算、图像文件输入与输出知识复习。 2.利用信息论中信息熵概念,求出任意一个离散信源的熵(平均自信息量)。自信息是一个随机变量,它是指某一信源发出某一消息所含有的信息量。所发出的消息不同,它们所含有的信息量也就不同。任何一个消息的自信息量都代表不了信源所包含的平均自信息量。不能作为整个信源的信息测度,因此定义自信息量的数学期望为信源的平均自信息量: 1( ) 1 ( ) [log ] ( ) log ( ) i n i i p a i H E p a p a X 信息熵的意义:信源的信息熵H是从整个信源的统计特性来考虑的。它是从平均意

义上来表征信源的总体特性的。对于某特定的信源,其信息熵只有一个。不同的信源因统计特性不同,其熵也不同。 3.学习图像熵基本概念,能够求出图像一维熵和二维熵。 图像熵是一种特征的统计形式,它反映了图像中平均信息量的多少。图像的一维熵表示图像中灰度分布的聚集特征所包含的信息量,令Pi表示图像中灰度值为i的像素所占的比例,则定义灰度图像的一元灰度熵为: 2550 log i i i p p H 图像的一维熵可以表示图像灰度分布的聚集特征,却不能反映图像灰度分布的空间特征,为了表征这种空间特征,可以在一维熵的基础上引入能够反映灰度分布空间特征的特征量来组成图像的二维熵。选择图像的邻域灰度均值作为灰度2

绘制数字图像灰度直方图实验报告MATLAB实现

数字图像处理 实验报告 实验一绘制直方图 学号 姓名 日期

实验一绘制直方图 一、实验内容 1、编程绘制数字图像的直方图。 2、直方图均衡处理。 二、实验步骤 1、设计思想或者流程图。 灰度直方图是将数字图像的所有像素,按照灰度值的大小,统计其所出现的频度。通常,灰度直方图的横坐标表示灰度值,纵坐标为半个像素个数,也可以采用某一灰度值的像素数占全图像素数的百分比作为纵坐标。 直方图均衡方法的基本原理是:对在图像中像素个数多的灰度值(即对画面起主要作用的灰度值)进行展宽,而对像素个数少的灰度值(即对画面不起主要作用的灰度值)进行归并。从而达到清晰图像的目的。 2、源程序并附上注释。 clear all %一,图像的预处理,读入彩色图像将其灰度化 PS=imread('1.jpg');%读入JPG彩色图像文件 imshow(PS)%显示出来 title('输入的彩色JPG图像') imwrite(rgb2gray(PS),'PicSampleGray.bmp');%将彩色图片灰度化并保存 PS=rgb2gray(PS);%灰度化后的数据存入数组 %二,绘制直方图 [m,n]=size(PS);%测量图像尺寸参数 GP=zeros(1,256);%预创建存放灰度出现概率的向量for k=0:255 GP(k+1)=length(find(PS==k))/(m*n);%计算每级灰度出现的概率,将其存入GP中相应位置 end figure,bar(0:255,GP,'g')%绘制直方图 title('原图像直方图') xlabel('灰度值') ylabel('出现概率') %三,直方图均衡化 S1=zeros(1,256); for i=1:256 for j=1:i S1(i)=GP(j)+S1(i);%计算Sk end end S2=round((S1*256)+0.5);%将Sk归到相近级的灰度for i=1:256 GPeq(i)=sum(GP(find(S2==i)));%计算现有每个灰度级出现的概率

实验-数字图像的直方图统计

实验二数字图像的直方图统计 一、实验目的 1.了解对灰度图像进行直方图统计的基本原理; 2.掌握用VC编程实现直方图统计的方法; 3.在微机上调试程序; 5. 分析数字图像直方图的特点。 二、实验原理 图像的直方图 图像的(灰度统计)直方图是一个一维的离散函数。它的定义为: 设s k为图像f(x,y)的第k级灰度值,n k是f(x,y)中具有灰度值s k的象素的个数,n是图像象素总数,则: p s(s k)= n k/n k=0,1, ,L-1 称为图像f(x,y)的直方图。 这里p s(s k)代表原始图中第k个灰度级的出现概率。以n k为自变量,以p s(s k)为函数,得到的曲线就是图像的直方图,在实际中常常直接将对第k个灰度级的统计值n k作为图像的直方图。 它提供了原图灰度值的分布情况,也可以说给出了一幅图所有灰度值的整体描述。 对灰度图像进行直方图统计的程序流程图如图2-1所示。 图2-1 灰度图像直方图统计流程 三、实验前准备 1.预习本实验中关于数字图像直方图统计的有关内容; 2. 预习VC中添加对话框的步骤和方法; 3.了解本实验的目的和实验内容。 四、实验内容 1.在实验一的基础上读入并显示一幅数字图像; 2.编写对灰度图像进行直方图统计的程序,并将结果显示在屏幕上。 五、实验报告要求 1.总结对灰度图像进行直方图统计的过程,比较不同的图像其直方图特性;

2.对实验结果进行分析。 六、参考步骤和程序 在实验一的基础上,进行如下操作: 1、点击ResourceView,右键点击Dialog,选Insert Dialog 在属性对话框中将ID改为 ID_HIST,对话框名称改为“直方图” 2、在工具栏中点“插入”-“新建类”,输入类名,并选Base Class为CDialog,Dialog ID为 ID_HIST。这样就将对话框和类联系起来了,在该对话框中拖入一Edit控件,将其ID 设为IDC_HISTSHOW; 3、快捷键“Ctrl+W”,出现MFC ClassWizard对话框,在Messages栏中分别选 WM_INITDIALOG和WM_Paint,再点击“Add Function”,即将对话框初始化和画图函数加入对话框类之中。 4、在Hist.h文件“public:”下面输入如下变量定义: LONG m_lCount[256]; char* m_lpDIBBits; LONG m_lWidth; LONG m_lHeight; int m_iIsDraging; CDlgIntensity(CWnd* pParent = NULL); 5、打开Hist.cpp程序,在CHist::OnInitDialog()函数中“// TODO: Add extra initialization here” 前将如下代码拷贝进去: unsigned char* lpSrc; LONG i; LONG j; 6、在“// TODO: Add extra initialization here”后将如下代码拷贝进去: CWnd* pWnd=GetDlgItem(IDC_HISTSHOW); pWnd->GetClientRect(m_MouseRect); pWnd->ClientToScreen(&m_MouseRect); CRect rect; GetClientRect(rect); ClientToScreen(&rect); m_MouseRect.top-=rect.top; m_MouseRect.left-=rect.left; m_MouseRect.top+=25; m_MouseRect.left+=10; m_MouseRect.bottom=m_MouseRect.top+255; m_MouseRect.right=m_MouseRect.left+256; for(i=0;i<256;i++) { m_lCount[i]=0;

两个matlab实现最大熵法图像分割程序

%两个程序,亲测可用 clear all a=imread('moon.tif'); figure,imshow(a) count=imhist(a); [m,n]=size(a); N=m*n; L=256; count=count/N;%%每一个像素的分布概率 count for i=1:L if count(i)~=0 st=i-1; break; end end st for i=L:-1:1 if count(i)~=0 nd=i-1; break; end end nd f=count(st+1:nd+1); %f是每个灰度出现的概率 size(f) E=[]; for Th=st:nd-1 %%%设定初始分割阈值为Th av1=0; av2=0; Pth=sum(count(1:Th+1)); %%%第一类的平均相对熵为 for i=0:Th av1=av1-count(i+1)/Pth*log(count(i+1)/Pth+0.00001); end %%%第二类的平均相对熵为 for i=Th+1:L-1 av2=av2-count(i+1)/(1-Pth)*log(count(i+1)/(1-Pth)+0.00001); end E(Th-st+1)=av1+av2; end position=find(E==(max(E))); th=st+position-1

for i=1:m for j=1:n if a(i,j)>th a(i,j)=255; else a(i,j)=0; end end end figure,imshow(a); %%%%%%%%%%%%%%%%%%%%%2-d 最大熵法(递推方法) %%%%%%%%%%% clear all; clc; tic a=imread('trial2_2.tiff'); figure,imshow(a); a0=double(a); [m,n]=size(a); h=1; a1=zeros(m,n); % 计算平均领域灰度的一维灰度直方图 for i=1:m for j=1:n for k=-h:h for w=-h:h; p=i+k; q=j+w; if (p<=0)|( p>m) p=i; end if (q<=0)|(q>n) q=j; end a1(i,j)=a0(p,q)+a1(i,j); end end a2(i,j)=uint8(1/9*a1(i,j)); end

图像的直方图是图像的重要统计特征

图像的直方图是图像的重要统计特征,它可以认为是图像灰度密度函数的近似。直方图虽然不能直接反映出图像内容,但对它进行分析可以得出图像的一些有用特征,这些特征能反映出图像的特点。当图像对比度较小时,它的灰度直方图只在灰度轴上较小的一段区间上非零,较暗的图像由于较多的像素灰度值低,因此它的直方图的主体出现在低值灰度区间上,其在高值灰度区间上的幅度较小或为零,而较亮的图像情况正好相反。通常一幅均匀量化的自然图像的灰度直方图在低值灰度区间上频率较大,这样的图像较暗区域中的细节常常看不清楚。为使图像变清晰,可以通过变换使图像的灰度动态范围变大,并且让灰度频率较小的灰度级经变换后,其频率变得大一些,使变换后的图像灰度直方图在较大的动态范围内趋于均化。事实证明,通过图像直方图修改进行图像增强是一种有效的方法。 均匀量化的自然图像的灰度直方图通常在低值灰度区间上频率较大,使得图像中较暗区域中的细节常常看不清楚。为了使图像清晰,可将图像的灰度范围拉开,并且让灰度频率较小的灰度级变大,即让灰度直方图在较大的动态范围内趋于一致。 前面介绍的直方图均衡化处理方法从实验效果看还是很不错的,从实现算法上也可以看出其优点主要在于能自动整幅图像的对比度,但具体的增强效果也因此不易控制,只能得到全局均衡化处理的直方图。在科研和工程应用中往往要根据不同的要求得到特定形状的直方图分布以有选择的对某灰度范围进行局部的对比度增强,此时可以采用对直方图的规定化处理,通过选择合适的规定化函数取得期望的效果。 a=imread('花.jpg'); subplot(2,2,1); imshow(a); title('原始图像'); subplot(2,2,2); a=rgb2gray(a); imhist(a); title('原始图像直方图'); subplot(2,2,3);

四、灰度直方图是数字图像处理的重要工作。请简述灰度直方图规定化

四、灰度直方图是数字图像处理的重要工作。请简述灰度直方图规定化、均衡化的基本原理。并以分辨率为5*4,图像的深度6bit 的图像为例,自举例说明直方图均衡化的计算过程。 解答: 数字图像的直方图是作为图像每一个灰度级的统计概率分布"它提供了图像灰度分布的概貌,直方图增强技术正是利用修改给定图像直方图的方法来增强图像的,最后得到的图像增强程度取决于我们所采用的直方图。令变量r 和s 分别代表图像增强前后的像素灰度级,相应灰度级分布的概率密度分别为()r P r 和()s P s 。 为讨论方便,假设像素灰度值已经归一化在区间[0,1],在灰度级坐标中r=0表示黑,r=1表示白。对区间[0,1]内任一个r 值按变换函数: s = T(r) (1) 进行变换,T (r )满足两个条件:(1)单值单调递增函数;(2) 0≤T (r )≤1。 条件(1)使灰度级保持从黑到白的次序,条件(2)保证映射变换后像素灰度值在允许的范围内。从s 到r 的反变换为:1()r T s -=,0≤s ≤1。 (2) 同样,规定变量s 也满足条件(1)和(2)。由概率理论知,若()r P r 和变换函数s = T(r) 已知,1()r T s -=是单值单调增加函数,则有: 1() ()[P () ]s r r T s dr P s r ds -== (3) 直方图增强技术就是通过变换函数T (r )控制图像灰度级的概率密度函数而改变图像的外貌。 对于连续图像,变换函数为: ()(),01r r s T r P r dr r ==≤≤? (4) 此式右边为累积分布函数(CDF ),由该式对r 求导有: ()r ds P r dr = (5) 代入(3)得到: 1()1 ()[() ]1,01() r r T s r P s P r s P r -===≤≤ (6) 这说明,在变换后变量s 在定义域内, ()s P s 是均匀概率密度。在图像增强意义上,这 相当于像素的动态范围增加。 对于离散图像,灰度级k r 的概率值为: (),01,0,1,2, (1) r k k n P r r k L n = ≤≤=- (7) 其中,n 表示图像中像素的总数,k n 是在图像中出现这种灰度级的次数,L 表示灰度级

灰度直方图

1.灰度直方图 灰度直方图(histogram)是灰度级的函数,它表示图象中具有每种灰度级的象素的个数,反映图象中每种灰度出现的频率。如下图所示,灰度直方图的横坐标是灰度级,纵坐标是该灰度级出现的频率,是图象的最基本的统计特征。 从概率的观点来理解,灰度出现的频率可看作其出现的概率,这样直方图就对应于概率密度函数pdf(probability density function),而概率分布函数就是直方图的累积和,即概率密度函数的积分,如下图所示:

若直接从代表每种灰度的象素数目的直方图来观察,常用如下的表示: dr r dP r p dr r p r P r )()(, )()(0 = =?∑???===≈ ===== =k i i k k k k k r r n n r P n n r p n r n A dA r p dr dr r H A r P A dr r dA A r H r p dr r H A dr r H r A 00 0000255 00 )()()(1)(1 )(,/)()()() ()(, )()(,而概率分布函数,则概率密度的象素数为,灰度为若记象素总数为,时,在离散情况下,取概率密度象素总数一幅图象的总面积,或

灰度直方图的计算是很简单的,依据定义,若图象具有L(通常L=256, 即8位灰度级)级灰度,则大小为MxN的灰度图象f(x,y)的灰度直方图hist[0…L-1]可用如下计算获得: 1. 1.初始化 hist[k]=0 ; k=0,…,L-1 2. 2.统计 hist[f(x,y)]++ ; x, y =0,…,M-1, 0,…,N-1 3. 3.标准化 hist[f(x,y)]/=M*N 2.直方图均衡化 直方图均衡化是通过灰度变换将一幅图象转换为另一幅具有均衡直方图,即在每个灰度级上都具有相同的象素点数的过程。 设灰度变换s=f(r)为斜率有限的非减连续可微函数,它将输入图象A(x,y) 转换为输出图象B(x,y),输入图象的直方图为H A (r),输出图象的直方图为H B (s), 则它们的关系可由如下过程导出:

图像熵计算

图像熵计算 信息熵: 利用信息论中信息熵概念,求出任意一个离散信源的熵(平均自信息量)。自信息是一个随机变量,它是指某一信源发出某一消息所含有的信息量。一条信息的信息量和它的不确定性有着直接的关系。所发出的消息不同,它们所含有的信息量也就不同。任何一个消息的自信息量都代表不了信源所包含的平均自信息量。不能作为整个信源的信息测度,因此定义自信息量的数学期望为信源的平均自信息量: 信息熵的意义 信源的信息熵H 是从整个信源的统计特性来考虑的。它是从平均意义上来表征信源的总体特性的。对于某特定的信源,其信息熵只有一个。不同的信源因统计特性不同,其熵也不同。信息熵一般用符号H 表示,单位是比特。变量的不确定性越大,熵也就越大。 图像熵: 1.一元灰度熵 图像熵是一种特征的统计形式,它反映了图像中平均信息量的多少。图像的一维熵表示图像中灰度分布的聚集特征所包含的信息量,令P i 表示图像中灰度值为i 的像素所占的比例,则定义灰度图像的一元灰度熵为: 255 log =i i i H p p =∑ 其中P i 是某个灰度在该图像中出现的概率,可由灰度直方图获得。 %% 图像灰度直方图 clear; clc;

close all; ImageData=imread('lena.jpg'); if ndims(ImageData) == 3 figure; imshow(ImageData); title('您选择的是RGB图,将转换为灰度图!'); ImageData = rgb2gray(ImageData); %如果是真彩色图,就将其装换为灰度图 end figure imshow(ImageData) title('您所选择的图像'); figure; h=imhist(ImageData); %一个MATLAB图像处理模块中的函数,用以提取图像中的直方图信息 h1=h(1:2:256); h2=1:2:256; stem(h2,h1,'r--'); %绘出柱状图,红色 title('图像灰度直方图-柱状图'); figure; imhist(ImageData); %一个MATLAB图像处理模块中的函数,用以提取图像中的直方图信息 title('灰度直方图');

相关文档
最新文档