文档详情

灰度直方图统计实习.doc

发布:2017-04-13约2.22千字共10页下载文档
文本预览下载声明
灰度直方图统计实习 姓名:__洪浪________ 学院:遥感信息工程学院 学号:2011302590181 班级:11012班 实习目的 掌握灰度图像直方图的概念和计算方法, 了解直方图的作用和用途。 提高编程能力。 巩固所学知识——认识RAW格式文件的像元灰度存储特点和学会用循环语言对图像各像元灰度值进行调研和统计,以及灰度直方图的形式特点的认识。 初步掌握PotoShop软件操作、图像文件格式读写与图像数据处理,提高学习兴趣和编程能力。 实验内容和要求 利用PotoShop显示图像的灰度直方图,从直方图中了解图像平均明暗度和对比度等信息。 要求使用C或C++语言编写灰度图统计的程序,并计算图像的均值和标准差。 实验步骤 使用PotoShop显示直方图。 点击“文件”—“打开”,打开一份图像; 点击“图像”—“直方图”,显示图像的灰度直方图; 对图像做增强处理,例如选择“图像”—“调整”—“自动对比度”对图像进行灰度拉伸,然后再显示直方图,观察它的变化。 原图像和灰度直方图 调整后的图像灰度直方图 用C或C++编写显示直方图的程序。 #includestdio.h #includewindows.h void main() { // 声明变量 FILE *fp; BYTE pData[512*512]; int i,j; int m_histArray[256]; for (i=0;i256;i++) { m_histArray[i]=0; } // 读取数据 fp=fopen(E:\\2011302590181 洪浪\\lena.raw,read); fread(pData,sizeof(BYTE),512*512,fp);//开辟内存来储存像元灰度值 // 统计灰度直方图 for(i=0; i 512 * 512; i++) { for (j=0;j256;j++) { if (pData [i] == j) m_histArray [j]++; } } // 输出统计结果 for (j=0;j256;j++) { printf (灰度值为%d的像元有%d个\n, j, m_histArray [j]); } fclose(fp); } 经过编译和调试可获得图像灰度统计 思考题 灰度直方图可以反映出一幅图像的那些特性? 1)表征了图像的一维信息。只反映图像中像素不同灰度值出现的次数(或频数)而未反映像素所在位置。2)与图像之间的关系是多对一的映射关系。一幅图像唯一确定出与之对应的直方图,但不同图像可能有相同的直方图。3)子图直方图之和为整图的直方图。BOOL WINAPI Equalize(LPSTR lpDIBs, LONG lWidth, LONG lHeight) {  unsigned char* lpSource; // 指向源图像的指针  LONG lTmp; // 临时变量  LONG t,s; // 循环变量  BYTE bMaptable[256]; // 灰度映射表  LONG lDegreeCount[256]; // 灰度计数表  LONG lLineBytes; // 图像每行的字节数  lLineBytes = WIDTHBYTES(lWidth * 8); // 计算图像每行的字节数  // 重置计数为0  for (t = 0; t 256; t ++)  { lDegreeCount[i] = 0; }  for (t = 0;t lHeight; t ++)   {for (s = 0; s lWidth; s++)/ /计算各个灰度值的计数   { lpSource = (unsigned char *)lpDIBs + lLineBytes * t + s;   lDegreeCount[*(lpSource)]++; // 该灰度值的计数加1  } } for (t = 0; t 256; t++)// 计算灰度映射表 { lTmp = 0; // 初始为0  for (s = 0; sj = t ; s++)  { lTmp += lDegreeCount[s]; }   bMaptable[t] = (BYTE) (lTmp * 255 / lHeight / lWidth);// 计算灰度值新的映射表  }  for(t = 0; t lHeight; t++)// 每行  { fo
显示全部
相似文档