- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
灰度直方图统计实习
灰度直方图统计实习
姓名:__洪浪________
学院:遥感信息工程学院
学号:2011302590181
班级:11012班
实习目的
掌握灰度图像直方图的概念和计算方法,
了解直方图的作用和用途。
提高编程能力。
巩固所学知识——认识RAW格式文件的像元灰度存储特点和学会用循环语言对图像各像元灰度值进行调研和统计,以及灰度直方图的形式特点的认识。
初步掌握PotoShop软件操作、图像文件格式读写与图像数据处理,提高学习兴趣和编程能力。
实验内容和要求
利用PotoShop显示图像的灰度直方图,从直方图中了解图像平均明暗度和对比度等信息。
要求使用C或C++语言编写灰度图统计的程序,并计算图像的均值和标准差。
实验步骤
使用PotoShop显示直方图。
点击“文件”—>“打开”,打开一份图像;
点击“图像”—>“直方图”,显示图像的灰度直方图;
对图像做增强处理,例如选择“图像”—>“调整”—>“自动对比度”对图像进行灰度拉伸,然后再显示直方图,观察它的变化。
原图像和灰度直方图
调整后的图像灰度直方图
用C或C++编写显示直方图的程序。
#include"stdio.h"#include"windows.h"void main(){// 声明变量FILE *fp;BYTE pData[512*512];int i,j;int m_histArray[256];for (i=0;i<256;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;j<256;j++){if (pData [i] == j)m_histArray [j]++;}}// 输出统计结果for (j=0;j<256;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 <
文档评论(0)