首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 文档频道 > 办公其他 > 实习报告 >

在校生做DSP技术实践的实习报告(2)

2013-06-05 
巩固和深化数字图像处理技术所涉及的数理基础、基本算法和各种图像处理技术方法,学习和掌握图像变换。

   六、系统程序的设计
  1、灰度线性变换
  #include
  #include
  #include "imagelib.h"
  //添加图像和视频处理库头文件
  #include "imagesample.h"
  //添加图像例子头文件,
  //包含原始的图像文件goldhill[128][128]
  #define MAX_PIXEL_VALUE 256
  //包含原始图像像素的最大灰度值
  #define WIDTH 128
  #define HEIGHT 128
  //原始图像行和列的像素数
  int my_result[256];
  //保存自编函数得到的灰度图结果的数组
  short histogram_output[256];
  //保存调用库函数得到的灰度图结果的数组
  short my_threshold_val=175;
  //short my_threshold_val=127;
  //阈值的设定
  void my_histogram();
  //声明自编灰度图算法显示函数
  void main( )
  {
  int i;
  int my_size;
  short *input;
  my_size = WIDTH*HEIGHT;
  //计算所有像素点数
  input = &goldhill[0][0];
  //获取原始图像的首地址
  for(i= 0;i< MAX_PIXEL_VALUE;i++) histogram_output[i]= 0;
  IMG_histogram(input,histogram_output,my_size);
  //调用image.lib库函数实现灰度图显示
  my_histogram();
  //自编C语言算法程序实现灰度图显示
  IMG_threshold( &goldhill[0][0],&goldhill[0][0],WIDTH ,HEIGHT, my_threshold_val );
  //调用image.lib库函数实现阈值处理与显示
  while(1);
  }
  void my_histogram()
  {
  int za=10,zb=235,i,j,z1=0,z2=255,zzba;
  short (*p)[128];
  //定义了一个指针变量p,
  //指向了一个包含128个元素的一维数组,
  //即行指针变量p
  p=goldhill;
  zzba=(z2-z1)/(float)(zb-za);
  //获取原始图像的首地址
  // for(i=0;i<256;i++) my_result[i]=0;
  for (i=0;i<128;i++)
  { for (j=0;j<128;j++)
  {
  if(*(*(p+i)+j)<=za)*(*(p+i)+j)=z1;
  else{
  if(*(*(p+i)+j)>=zb)*(*(p+i)+j)=z2;
  else *(*(p+i)+j)=zzba*(*(*(p+i)+j)-za)+z1+0.5;
  }
  // k=*(*(p+i)+j);
  // my_result[k]++;
  }

  //自编灰度直方图算法显示函数
  }
  2、灰度的对数变换
  #include
  #include
  #include "imagelib.h"
  //添加图像和视频处理库头文件
  #include "imagesample.h"
  //添加图像例子头文件,
  //包含原始的图像文件goldhill[128][128]
  #define MAX_PIXEL_VALUE 256
  //包含原始图像像素的最大灰度值
  #define WIDTH 128
  #define HEIGHT 128
  #define ZERO 0
  //原始图像行和列的像素数
  int my_result[256];
  //保存自编函数得到的灰度直方图结果的数组
  short histogram_output[256];
  //保存调用库函数得到的灰度直方图结果的数组
  short my_threshold_val=175;
  //short my_threshold_val=127;
  //阈值的设定
  void my_histogram();
  //声明自编灰度直方图算法显示函数
  void main( )
  {
  int i;
  int my_size;
  short *input;
  my_size = WIDTH*HEIGHT;
  //计算所有像素点数
  input = &goldhill[0][0];
  //获取原始图像的首地址
  for(i= 0;i< MAX_PIXEL_VALUE;i++) histogram_output[i]= 0;
  IMG_histogram(input,histogram_output,my_size);
  //调用image.lib库函数实现灰度直方图显示
  my_histogram();
  //自编C语言算法程序实现灰度直方图显示
  IMG_threshold( &goldhill[0][0],&goldhill[0][0],WIDTH ,HEIGHT, my_threshold_val );
  //调用image.lib库函数实现阈值处理与显示
  while(1);
  }
  void my_histogram()
  {
  int i,j;
  double za=2,zb=128,z1=0,z2=255,fij,gij,zzlba;
  short (*p)[128];
  //定义了一个指针变量p,
  //指向了一个包含128个元素的一维数组,
  //即行指针变量p
  p=goldhill;
  zzlba=(z2-z1)/(double)(log(zb)-log(za));
  //获取原始图像的首地址
  // for(i=0;i<256;i++) my_result[i]=0;
  //初始化灰度直方图结果数组
  for (i=0;i<128;i++)
  { for (j=0;j<128;j++)
  /* log transform.*/
  {
  fij=*(*(p+i)+j);
  if(fij==0)fij=0.001;
  gij=zzlba*(log(fij)-log(za))+z1;
  *(*(p+i)+j)=gij+0.5;
  }
  }
  // k=*(*(p+i)+j);
  // my_result[k]++;
  }
  

热点排行