数字图像处理
实验报告
     
      课程:  数字图像处理 
      ****    * *     
      姓名:               
      学号:               
实验一 直方图线性变换及直方图均衡化
一、实验目的
    通过了解直方图的绘制、线性变换和均衡化的基本原理与实现方法,熟悉在计算机上进行直方图均衡化、线性变换的方法,来掌握简单的直方图均衡化和线性变换程序设计编写。
二、实验内容
    编写直方图的显示、均衡化及线性变换的C++语言程序,同时显示线性变换后的直方图。
三、实验步骤
    1、新建MFC工程;
2、分析程序流程;
    3、编写程序;
    4、运行调试;
5、显示结果;
6、分析结果。
四、实验原理及实现方案
(1)线性变换
原理:线性变换是灰度变换的一种,就是将一个灰度区间映射到另一个灰度区间的变换。线性增强变换可使图像动态范围加大,图像对比度扩展,图像清晰,特征明显,是图像增强的重要手段。
此次实验采取的灰度变换公式是分段函数,如下图所示,
        g(i,j)
           
          255
           
130    160    255    f(i,j)
部分程序代码如下(详细见源文件):
for(i=1;i<height;i++)
{
    for(j=0;j<width;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;
  }
  }
  for(i=1;i<=kk;i++)
    {
    pDC->MoveTo(500+2*i,600);
    pDC->LineTo(500+2*i,600-(ss[pp[i]]-ss[pp[i-1]]));
    }
五、实验结果
  1、线性变换
>局部直方图均衡化