数字图像处理 实验报告
课程: 数字图像处理 教师: 王 韬 姓名: 学号:
实验一 直方图线性变换及直方图均衡化
一、实验目的
通过了解直方图的绘制、线性变换和均衡化的基本原理与实现方法,熟悉在计算机上进行直方图均衡化、线性变换的方法,来掌握简单的直方图均衡化和线性变换程序设计编写。
二、实验内容
编写直方图的显示、均衡化及线性变换的C++语言程序,同时显示线性变换后的直方图。
三、实验步骤
1、新建MFC工程;
2、分析程序流程; 3、编写程序; 4、运行调试;
5、显示结果; 6、分析结果。
四、实验原理及实现方案
(1)线性变换 原理:线性变换是灰度变换的一种,就是将一个灰度区间映射到另一个灰度区间的变换。线性增强变换可使图像动态范围加大,图像对比度扩展,图像清晰,特征明显,是图像增强的重要手段。
此次实验采取的灰度变换公式是分段函数,如下图所示,
g(i,j) 255
0 30 160 255 f(i,j) 部分程序代码如下(详细见源文件): for(i=1;i for(j=0;j int pos =width*i+j; BYTE c = pData[pos]; pDC->SetPixel(j,260+height-i,RGB(c,c,c)); if(c<30){ pDC->SetPixel(j,height-i,RGB(0,0,0));} else if(c>160){ pDC->SetPixel(j,height-i,RGB(255,255,255));} else{ BYTE c2=BYTE(1.0*255/130*(c-30)); pDC->SetPixel(j,height-i,RGB(c2,c2,c2)); } count[int(c)]++; } } 通过对不同区域的灰度值进行不同的线性变换,从而达到预期目的。 (2)直方图均衡化 原理:直方图均衡化主要用于修正那些灰度范围小,灰度集中的图像,通过修正使灰度拉开,灰度变丰富,从而起到增强图像视觉效果的作用。 实现方案:根据书本上所介绍的方法计算变换函数Sk和对应每个Sk的Nsk,,最后求得每个灰度级均衡化后所得的概率。再根据所得的概率画出均衡化后的直方图,比较与均衡化前的直方图的区别,分析两者的差别。算法实验步骤: 步骤1:原图像素点个数 步骤2:原图分布概率 步骤3:原图累计概率 步骤4:对累计概率四舍五入 步骤5:绘制直方图 部分程序代码如下(详细见源文件): int ss[257]; for(i=0;i<257;i++){ ss[i]=0; } int pos =width*i+j; for(i=0;i<256;i++){ count[i]=count[i]*10000/pos; ss[i+1]=ss[i]+count[i]; } for(i=1;i<256;i++) { for(int ii=0;ii<256;ii++) { if((ii*10000/256)>ss[i+1]) { p[i+1]=ii; break; } } if(p[i+1]!=p[i]) { kk++; pp[kk]=i; }