数字图像处理——直方图均衡化
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.可视化结果
a)程序界面
b)处理结果
直方图均衡化 处理前 处理后
谢 谢
b)变换函数及效果
变换函数 验证T(r)是否满足两个条件: T(r)是累积分布函数,累积分布函数是某一随机曲线下的面积,随 着r增大,T(r)的值单调增加,最大为一,满足两个条件。 分析变换后的直方图性质 : 新的直方图纵坐标:
c)直方图均衡化
总像素数为N,共有L个灰度级,其中,第k个灰度级rk出现的像素 数为nk,则第k个灰度级出现的概率为:
数字图像处理
直方图均衡化
组员:孙少华 罗天男 姜雪林 胡 洋 时间:2014年11月4日
1.基本原理
a)基础:
变换原来灰度级 r到新的灰度级s: s=T(r),变换函数T满足两个条件: 在0≤r≤1区间内,T(r)的值单调增加,保证灰度不发生反转 当0≤r≤1时,0≤T(r)≤1,保证变换后的灰度级仍然在有效范 围内
获取文档尺寸
计算原图像 灰度直方图
存储处理后图像结束来自///////////////以下可对buf数据进行处理///////////////////// // 计算原始图像的灰度直方图,存放在数组“ oldhuiduji[256] ” 中 for(i=0;i<height;i++) { for(j=0;j<width;j++) { oldhuiduji[*(buf+i*width+j)]=oldhuiduji[*(buf+i*width+j)]+1; } } for(i=0;i<256;i++) { huiduji[i]=oldhuiduji[i]; } //计算原始图像的灰度级数,存放在huidujishu huidujishu=0; for(i=0;i<256;i++) { if(huiduji[i]!=0) { huidujishu++; } } // 计 算 原 始 图 像 的 灰 度 直 方 图 的 概 率 分 布 , 存 放 在 数 组 “oldgailvfenbu[256]”中 for(i=0;i<256;i++) { for(j=0;j<=i;j++) { oldgailvfenbu[i]=oldgailvfenbu[i]+oldhuiduji[j]; } }
进行直方图均衡化的变换函数为:
d)直方图均衡化步骤
统计原图像的直方图
计算新的灰度级 修正sk为合理的灰度级 计算新的直方图 生成新的图像
2.程序实现
开始
计算原图像 概率分布
打开灰度图像 对原图像进行 直方图均衡化 计算处理后图像 灰度直方图
将图像装载至内存
void CCoding::BlackBmp(CTTDoc* pDoc,CString fileName) { // 临时缓存 BYTE *buf; //用于存放图像信息 buf = NULL; int oldhuiduji[256]={0}; //用于存放原始图像的灰度直方图数据 int oldgailvfenbu[256]={0}; //用于存放灰度直方图的概率分布 int newhuiduji[256]={0}; //用于存放“直方图均衡化”以后的图 像的 灰度直方图 m_bmInfo = (LPBITMAPINFO)malloc(sizeof(BITMAPINFOHEADER) + 256*sizeof(RGBQUAD)); // 获取文档尺寸 CSize size = pDoc->GetDocSize(); UINT width = size.cx; //宽 UINT height = size.cy; //高 UINT total = width*height; //总像素数 UINT i; UINT j; buf = LoadBMP(pDoc->m_strCurrentFile, &width, &height);
//对原图像进行“直方图均衡化” for(i=0;i<height;i++) { for(j=0;j<width;j++) { *(buf+i*width+j)=(int)255*oldgailvfenbu[*(buf+i*width+j)]/total; } } // 计算“直方图均衡化”以后的图像的灰度直方图,存放在数组 “newhuiduji[256]”中 for(i=0;i<height;i++) { for(j=0;j<width;j++) { newhuiduji[*(buf+i*width+j)]=newhuiduji[*(buf+i*width+j)]+1; } } for(i=0;i<256;i++) { huiduji1[i]=newhuiduji[i]; } // 计 算 “ 直 方 图 均 衡 化 ” 以 后 的 图 像 的 灰 度 级 数 , 存 放 在 huidujishu1 huidujishu1=0; for(i=0;i<256;i++) { if(huiduji1[i]!=0) { huidujishu1++; } } SaveBMP(fileName, buf, width, height); free(m_bmInfo); }