灰度图像直方图统计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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在本次实习的基础上,试编写直方图均衡的程序。
五、实习心得体会
通过这次实习我对灰度直方图的概念和灰度直方图的计算方法以及性质有了更深的了解,对C语言的函数利用操作及文件操作有了更深层次的认识,对Photoshop软件有了一定的了解。此次实习增强了我的编程能力,使我初步掌握图像文件格式读写与图像数据处理,巩固近期数字图像处理课程上所学知识。