您当前的位置 : 首页 > 主要产品  >  专著与教材

《Visual C++实用图像处理》

点击: 38    发表时间:2016-11-29

《Visual C++实用图像处理》专业教程

该书现已由【清华大学出版社】出版发行,请预订该书的用户速联系购买事宜。售价48元。
图像处理专业书籍。本书力求通俗易懂,适应不同层次读者的需要。第一章介绍了图像处理的发展现状和图像处理的基本特点;第二章介绍了图像处理的基本概念,以及Visual C++ 图像处理编程的基本方法;以后各章分别介绍了区域分割与提取、边缘检测与提取、图像平滑、图像增强、特征选择与描述、彩色变换、彩色分割、几何变换、频率变换、图像压缩、小波变换等图像处理知识,以及相应的可自由调用的C语言图像处理源程序;在最后的附录里列出了专业版Imgc 的Visual C++界面源程序。该书配套有学习版软件Imgcx和专业版软件Imgc,内容丰富,实用性强,适合于图像处理课程的教学和科研。

11.jpg

《Visual C++实用图像处理》配套软件系统IMGC 
  VC++实用图像处理系统专业版IMGC是一套完全可执行的VC++界面源代码,界面内容除了图像的表示、读入、保存、彩色变灰度以外,还包括图像的2值化处理、微分变换、透视变换、彩色变换、傅里叶变换、小波变换、参数测量…等众多图像处理的基本内容,对应这些内容附有70个图像处理函数的源代码。该软件主要适用于图像处理的教学和科研。与教材《Visual C++实用图像处理》配套使用时,教师可以边向学生传授理论,边讲解处理程序,然后示范处理结果,使学生在实践中学习,可以完全改变传统理论灌输的旧教学模式。在科研上,研究者可以通过复制和改写图像处理的源程序,来达到自己的处理目的,可以节省大量的编程时间。该软件系统对图像处理编程的自学者也非常有用,学习图像处理编程,最好的办法是对现有程序进行修改、然后看看处理结果的变化,该软件系统给自学者提供了在实践中学习的平台。
    以下是该软件系统的部分界面和处理图:
  1.初始画面


2.直方图表示

3.微分变换

4.彩色变换

5.图像合成

6.图像变换

7.傅里叶变换 原图及界面

频率图

频率通过域图

滤波后图像

 8.小波变换

提供的图像处理源代码函数一览表:
/*--------------------------提取物体-----------------------------*/
  1.一般2值化处理
  void Threshold(BYTE *image_in, BYTE *image_out, int xsize, int ysize, int thresh, int 
  mode);
  2. 双阈值2值化处理
  void Threshold_mid(BYTE *image_in, BYTE *image_out, int xsize, int ysize, int 
  thresh_low, int thresh_high);
  3.反转图像
  void Reverse_image(BYTE *image_in, BYTE *image_out, int xsize, int ysize);
  4.像素分布直方图
  void Histgram(BYTE *image, int xsize, int ysize, long hist[256]);
  5.计算直方图百分比
  void CalHistPercent(long hist[], float hist_radio[], float &max_percent);
  6.直方图平滑化
  void Hist_smooth(long hist_in[256], long hist_out[256]);
  7.直方图图像化(图像宽度大于等于64)
  void Hist_to_image(long hist[256], BYTE* image_hist, int xsize, int ysize);
/*--------------------------提取轮廓-----------------------------*/
  8.1阶微分边沿检出(梯度算子)
  void Differential(BYTE *image_in, BYTE *image_out, int xsize, int ysize, float amp);
  9.2阶微分边沿检出(拉普拉斯算子)
  void Differential2(BYTE *image_in, BYTE *image_out, int xsize, int ysize, float amp);
  10.Prewitt法边沿检出
  void Prewitt(BYTE *image_in, BYTE *image_out, int xsize, int ysize, float amp);
  11.2值图像的细线化处理
  void Thinning(BYTE *image_in, BYTE *image_out, int xsize, int ysize);
/*--------------------------消除噪音-----------------------------*/
  12.去噪音处理(移动平均)
  void Image_smooth(BYTE *image_in, BYTE *image_out, int xsize, int ysize);
  13.去噪音处理(中值)
  void Median(BYTE *image_in, BYTE *image_out, int xsize, int ysize);
  14.膨胀
  void Dilation(BYTE *image_in, BYTE *image_out, int xsize, int ysize);
  15.腐蚀
  void Erodible(BYTE *image_in, BYTE *image_out, int xsize, int ysize);
/*--------------------------获取清晰图像------------------------*/
  16.亮度n倍
  void Brightness_amplify(BYTE *image_in, BYTE *image_out, int xsize, int ysize, float n);
  17.求亮度范围
  void Brightness_range(BYTE *image_in, int xsize, int ysize, int *fmax, int *fmin);
  18.亮度范围扩张 
  void Brightness_expand(BYTE *image_in, BYTE *image_out, int xsize, int ysize, int fmax, 
  int fmin);
  19.直方图平坦化
  void Hist_plane(BYTE *image_in, BYTE *image_out, int xsize, int ysize, long hist[256]);
/*--------------------------特征提取-----------------------------*/
  20.区域标记
  int Labeling(BYTE *image_in, BYTE *image_out, int xsize, int ysize, int *cnt);
  21.测算特征数据
  void Features(BYTE *image_label_in, BYTE *image_label_out, int xsize, int ysize, int 
  cnt, float size[], float length[], float ratio[], int center_x[], int center_y[]);
  22.抽出具有某圆形度的对象物 
  void Ratio_extract(BYTE *image_label_in, BYTE *image_label_out, int xsize, int ysize, 
  int cnt, float ratio[], float ratio_min, float ratio_max);
  23.抽出某面积范围的对象物 
  void Size_extract(BYTE *image_label_in, BYTE *image_label_out, int xsize, int ysize, int 
  cnt, float size[], float size_min, float size_max);
  24.复制模块领域的原图像
  void Mask_copy(BYTE *image_in, BYTE *image_out, BYTE *image_mask, int xsize, int ysize);
/*--------------------------颜色变换-----------------------------*/
  25.做彩条
  void Colorbar(BYTE *image_r, BYTE *image_g, BYTE *image_b, int xsize, int ysize, int 
  level);
  26.由R、G、B变换亮度、色差信号
  void Rgb_to_yc(BYTE *image_r, BYTE *image_g, BYTE *image_b, int *y, int *c1, int *c2,
  int xsize, int ysize);
  27.色差信号图像化
  void Yc_to_image(int *data, BYTE *image, int xsize, int ysize);
  28.由亮度、色差变换R、G、B信号 
  void Yc_to_rgb(int *y, int *c1, int *c2, BYTE *image_r, BYTE *image_g, BYTE *image_b, 
  int xsize, int ysize);
  29.由色差信号计算彩度和色相
  void C_to_SH(int *c1, int *c2, int *sat, int *hue, int xsize, int ysize);
  30.由彩度和色相计算色差信号
  void SH_to_C(int *sat, int *hue, int *c1, int *c2, int xsize, int ysize);
  31.由彩度数据变换灰度图像
  int Sat_to_image(int *sat, BYTE *image_out, int xsize, int ysize);
  32.由某点的RGB值计算计算彩度和色相
  void Rgb_to_SH(BYTE r, BYTE g, BYTE b, double *sat, double *hue);
  33.由色相数据变换灰度图像
  void Hue_to_image(int *sat, int *hue, double stdhue, BYTE *image_out, int xsize, int 
  ysize);
  34.改变亮度、彩度和色相
  void Change_YSH(int *in_y, int *in_sat, int *in_hue, int *out_y, int *out_sat, int 
  *out_hue, float ym, float sm, float hd, int xsize, int ysize);
/*------------------------基于颜色的提取----------------------*/
  35.计算2维直方图并图像化
  void Hist2_image(BYTE *image_in1, BYTE *image_in2, BYTE *image_hist, int xsize, int 
  ysize);
  36.R,G,B的阈值处理
  void Thresh_color(BYTE *image_in_r, BYTE *image_in_g, BYTE *image_in_b, BYTE 
  *image_out_r, BYTE *image_out_g, BYTE *image_out_b, int thdrl, int thdrm, int thdgl, int 
  thdgm, int thdbl, int thdbm, int xsize, int ysize);
  37.生成硬合成键
  void Hard_key(BYTE *image_in_r, BYTE *image_in_g, BYTE *image_in_b, BYTE *image_key, int 
  xsize, int ysize, int thresh);
  38.生成软合成键
  void Soft_key(BYTE *image_in_r, BYTE *image_in_g, BYTE *image_in_b, BYTE *image_key, int 
  xsize, int ysize, int thdh, int thdl);
  39.图像硬合成
  void Synth(BYTE *image_in1_r, BYTE *image_in1_g, BYTE *image_in1_b, BYTE *image_in2_r, 
  BYTE *image_in2_g, BYTE *image_in2_b, BYTE *image_out_r, BYTE *image_out_g, BYTE  
  *image_out_b, BYTE *image_key, int xsize, int ysize);
  40.图像合成(消除境界线)
  void S_synth(BYTE *image_in1_r, BYTE *image_in1_g, BYTE *image_in1_b, BYTE *image_in2_r, 
  BYTE *image_in2_g, BYTE *image_in2_b, BYTE *image_out_r, BYTE *image_out_g, BYTE 
  *image_out_b, BYTE *image_key, int xsize, int ysize);
/*--------------------------几何变换-----------------------------*/
  41.错误的扩大缩小法
  void Scale_NG(BYTE *image_in, BYTE *image_out, int xsize, int ysize, float zx, float zy);
  42.扩大、缩小(最近旁法)
  void Scale_near(BYTE *image_in, BYTE *image_out, int xsize, int ysize, float zx, float 
  zy);
  43.扩大、缩小(线性补间法)
  void Scale(BYTE *image_in, BYTE *image_out, int xsize, int ysize, float zx, float zy);
  44.位移(线性补间法) 
  void Shift(BYTE *image_in, BYTE *image_out, int xsize, int ysize, float px, float py);
  45.回转(线性补间法)
  void Rotation(BYTE *image_in, BYTE *image_out, int xsize, int ysize, float deg);
  46.仿射变换(移动、旋转、放大缩小)
  void Affine(BYTE *image_in, BYTE *image_out, int xsize, int ysize, float deg, float zx, 
  float zy, float px, float py);
  47.透视变换(线性补间法)
  void Perspective(BYTE *image_in, BYTE *image_out, int xsize, int ysize, float ax, float 
  ay, float px, float py, float pz, float rz, float rx, float ry, float v, float s);
/*---------------傅里叶变换程序---------------------------------*/
  48.1次傅里叶变换
  int FFT1(float a_rl[], float a_im[], int ex, int inv);
  49.1次傅里叶变换的主计算部分
  void fft1core(float a_rl[], float a_im[], int length, int ex, float sin_tbl[], float 
  cos_tbl[], float buf[]);
  50.2次傅里叶变换
  int FFT2 (float *a_rl, float *a_im, int inv, int xsize, int ysize); 
  51.将2次FFT的变换结果频率域图像化
  int FFTImage(BYTE *image_in, BYTE *image_out, int xsize, int ysize);
  52.2次FFT的滤波处理、滤波后的频率域图像化
  int FFTFilter(BYTE *image_in, BYTE *image_out, int xsize, int ysize, int a, int b);
  53.图像的2次FFT变换、滤波处理、逆傅里叶变换
  int FFTFilterImage(BYTE *image_in, BYTE *image_out, int xsize, int ysize, int a, int b);
/*---------------图像压缩程序---------------------------------*/
  54.预测编码 DPCM (预测法(1):处理一行区域)
  void Dpcm1(BYTE* image_in, int xsize, int line, short *data_out);
  55.预测编码 DPCM (预测法(2):处理一行区域)
  void Dpcm2(BYTE* image_in, int xsize, int line, short *data_out);
  56.DPCM数据分布直方图
  void Histgram_dpcm(BYTE *image, int xsize, int ysize, long hist[512]);
  57.计算DPCM直方图百分比
  void CalHistPercent_dpcm(long hist[], float hist_radio[], float &max_percent);
  58.DPCM的解码 (预测法(1):处理一行区域)
  void Idpcm1(short *data_in, int xsize, int line, BYTE* image_out);
  59.DPCM的解码 (预测法(2):处理一行区域)
  void Idpcm2(short *data_in, int xsize, int line, BYTE* image_out);
  60.变长编码
  int Vlcode(short int data_in[], int no, char vlc_out[]);
  61.变长编码的解码
  void Ivlcode(char vlc_in[], int no, short int data_out[]);
  62.由DPCM码到变长码的变换
  int Event(short dt);
  63.由变长码到DPCM码的转换
  int Ievent(short ev); 
  64.DPCM + 变长编码
  int Dpcm_vlcode(BYTE *image_in, int xsize, int ysize, BYTE* image_buf);
  65.DPCM + 变长编码的解码
  int Idpcm_vlcode(BYTE *image_buf, BYTE *image_out, int xsize, int ysize);
/*------------------ 离散小波变换程序--------------------------------*/
  66.2维小波变换
  void Wavelet2d (BYTE *image_in, int xsize, int ysize, double *s1, double *w1v, double 
  *w1h, double *w1d);
  67.2维小波信号图像化
  void Wavelet2d_image (double *s1, double *w1v, double *w1h, double *w1d, BYTE *image_
  out, int xsize, int ysize);
  68.2维逆小波变换
  void Iwavelet2d (double *s1, double *w1v, double *w1h, double *w1d, BYTE *image_out, int 
  xsize, int ysize );
  69.1维小波变换
  void Wavelet1d (double *s0, int s_len, double *p, double *q, int sup, double *s1, double 
  *w1);
  70.1维逆小波变换
  void Iwavelet1d (double *s1, double *w1, int s_len, double *p, double *q, int sup, 
  double *s0);

提供的图像表示、存取DLL函数一览表:
  1.建立图像表示用Dib
  EXIMPORT int CreateDispDib(CDC* pDC, int xsize, int ysize);
  2.消除Dib
  EXIMPORT void DeleteDispDib(void);
  3.建立参考窗口读入图像
  EXIMPORT int Load_imagefile_bmp();
  4.直接输入文件名读入图像
  EXIMPORT int Load_original_image(CString filename);
  5.读灰度图像数据到设定内存
  EXIMPORT int ReadImageData(BYTE *image);
  6.读彩色图像数据到设定内存
  EXIMPORT int ReadImageDataRGB(BYTE *imageR, BYTE *imageG, BYTE *imageB);
  7.图像保存
  EXIMPORT BOOL Save_imagefile_bmp();
  8.图像另存为
  EXIMPORT BOOL SaveAs_imagefile_bmp();
  9.获得图像横向大小
  EXIMPORT int GetXSize();
  10.获得图像纵向大小
  EXIMPORT int GetYSize();
  11.获得图像数据指针
  EXIMPORT LPBYTE GetImage();
  12.获得图像类型(灰度、彩色)
  EXIMPORT int GetImageType();
  13.表示内存内的灰度图像
  EXIMPORT void Disp_image(BYTE *image);
  14.表示内存内的彩色图像
  EXIMPORT void Disp_imageRGB( BYTE *imageR, BYTE *imageG, BYTE *imageB);
  15.获得表示图像的名称
  EXIMPORT void GetImageFileName(char *cFileName);
  16.设定表示图像的名称
  EXIMPORT void PutImageFileName(CString fn);
  17.获得表示的Dib
  EXIMPORT CDib* GetDib(void);
  18.设定表示的Dib 
  EXIMPORT void PutDib(CDib *pDib);
  19.彩色图像变灰度图像
  EXIMPORT int Color_to_mono();

上一篇:《农业机器人》