您当前的位置 : 首页 > 主要产品  >  图像软件

专业版源代码软件DIPA

专业版源代码软件DIPA功能简介

与《实用图像处理与分析》配套的源代码软件DIPA是一套完全可执行的VC++界面源代码,界面内容除了图像的表示、读入、保存、彩色变灰度以外,还包括图像的2值化处理、微分变换、几何变换、彩色变换、参数测量、傅里叶变换、小波变换、Hough变换、模式识别、神经网络、遗传算法、图像压缩等功能,提供有近100个图像处理与分析函数的源代码。该软件主要适用于图像处理的教学和科研。与教材《实用图像处理与分析》配套使用时,教师可以边向学生传授理论,边讲解处理程序,然后示范处理结果,也可以以此为参照帮助学生调试练习中的程序错误。学生可以通过参考和复制来完成自己的编程练习。在科研上,研究者可以通过复制和改写图像处理的源程序,来完成自己的程序编写,可以节省大量的编程时间。该软件系统对图像处理编程的自学者也非常有用,学习图像处理编程,最好的办法是对现有程序进行修改、然后看看处理结果的变化,该软件系统给自学者提供了在实践中学习的平台。作为教学参考,在《实用图像处理与分析》的配套光盘里附录了该软件系统的演示版DIPA,该演示版只能演示处理教材上的图像,而且不能保存处理结果图像。

 以下是该软件系统的部分界面和处理图:  

1.初期画面

2.jpg

2.直方图表示

3.微分变换

4.彩色变换

5.图像合成

6.图像变换

7.傅立叶变换

原图及界面

频率图

频率通过域图

滤波后图像

8.小波变换

9BP神经网络的文字识别

10.遗传算法的模式识别


提供的图像处理源代码函数一览表

 

/*--------------------------提取物体-----------------------------*/

//一般2值化处理

void Threshold(BYTE *image_in, BYTE *image_out, int xsize, int ysize, int thresh, int mode);

 

// 双阈值2值化处理

void Threshold_mid(BYTE *image_in, BYTE *image_out, int xsize,

                        int ysize, int thresh_low, int thresh_high);

 

//反转图像

void Reverse_image(BYTE *image_in, BYTE *image_out, int xsize, int ysize);

 

//像素分布直方图

void Histgram(BYTE *image, int xsize, int ysize, long hist[256]);

 

//计算直方图百分比

void CalHistPercent(long hist[], float hist_radio[], float &max_percent);

 

//直方图平滑化

void Hist_smooth(long hist_in[256], long hist_out[256]);

 

//直方图图像化(图像宽度大于等于64

void Hist_to_image(long hist[256], BYTE* image_hist, int xsize, int ysize);

 

/*--------------------------提取轮廓-----------------------------*/

 

//1阶微分边沿检出(梯度算子)

void Differential(BYTE *image_in, BYTE *image_out, int xsize, int ysize, float amp);

 

//2阶微分边沿检出(拉普拉斯算子)

void Differential2(BYTE *image_in, BYTE *image_out, int xsize, int ysize, float amp);

 

//Prewitt法边沿检出

void Prewitt(BYTE *image_in, BYTE *image_out, int xsize, int ysize, float amp);

 

//2值图像的细线化处理

void Thinning(BYTE *image_in, BYTE *image_out, int xsize, int ysize);

 

/*--------------------------消除噪音-----------------------------*/

 

//去噪音处理(移动平均)

void Image_smooth(BYTE *image_in, BYTE *image_out, int xsize, int ysize);

 

//去噪音处理(中值)

void Median(BYTE *image_in, BYTE *image_out, int xsize, int ysize);

 

//膨胀

void Dilation(BYTE *image_in, BYTE *image_out, int xsize, int ysize);

 

//腐蚀

void Erodible(BYTE *image_in, BYTE *image_out, int xsize, int ysize);

 

/*--------------------------获取清晰图像------------------------*/

 

//亮度n

void Brightness_amplify(BYTE *image_in, BYTE *image_out, int xsize, int ysize, float n);

 

//求亮度范围

void Brightness_range(BYTE *image_in, int xsize, int ysize, int *fmax, int *fmin);

 

//亮度范围扩张

void Brightness_expand(BYTE *image_in, BYTE *image_out, int xsize, int ysize,

                                      int fmax, int fmin);

 

//直方图平坦化

void Hist_plane(BYTE *image_in, BYTE *image_out, int xsize, int ysize, long hist[256]);

 

/*--------------------------特征提取-----------------------------*/

 

//区域标记

int Labeling(BYTE *image_in, BYTE *image_out, int xsize, int ysize, int *cnt);

 

//测算特征数据

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[]);

 

//抽出具有某圆形度的对象物

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);

 

//抽出某面积范围的对象物

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);

 

//复制模块领域的原图像

void Mask_copy(BYTE *image_in, BYTE *image_out, BYTE *image_mask, int xsize, int ysize);

 

/*--------------------------颜色变换-----------------------------*/

 

//做彩条

void Colorbar(BYTE *image_r, BYTE *image_g, BYTE *image_b,

                       int xsize, int ysize, int level);

 

//RGB变换亮度、色差信号

void Rgb_to_yc(BYTE *image_r, BYTE *image_g, BYTE *image_b,

       int *y, int *c1, int *c2, int xsize, int ysize);

 

//色差信号图像化

void Yc_to_image(int *data, BYTE *image, int xsize, int ysize);

 

//由亮度、色差变换RGB信号

void Yc_to_rgb(int *y, int *c1, int *c2, BYTE *image_r, BYTE *image_g,

       BYTE *image_b, int xsize, int ysize);

 

//由色差信号计算彩度和色相

void C_to_SH(int *c1, int *c2, int *sat, int *hue, int xsize, int ysize);

 

//由彩度和色相计算色差信号

void SH_to_C(int *sat, int *hue, int *c1, int *c2, int xsize, int ysize);

 

//由彩度数据变换灰度图像

int Sat_to_image(int *sat, BYTE *image_out, int xsize, int ysize);

 

//由某点的RGB值计算计算彩度和色相

void Rgb_to_SH(BYTE r, BYTE g, BYTE b, double *sat, double *hue);

 

//由色相数据变换灰度图像

void Hue_to_image(int *sat, int *hue, double stdhue,

                              BYTE *image_out, int xsize, int ysize);

 

//改变亮度、彩度和色相

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);

 

/*------------------------基于颜色的提取----------------------*/

 

//计算2维直方图并图像化

void Hist2_image(BYTE *image_in1, BYTE *image_in2, BYTE *image_hist, int xsize, int ysize);

 

//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);

 

//生成硬合成键

void Hard_key(BYTE *image_in_r,     BYTE *image_in_g, BYTE *image_in_b,

       BYTE *image_key, int xsize, int ysize, int thresh);

 

//生成软合成键

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);

 

// 图像硬合成

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);

 

//图像合成(消除境界线)

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);

 

/*--------------------------几何变换-----------------------------*/

 

//错误的扩大缩小法

void Scale_NG(BYTE *image_in, BYTE *image_out, int xsize, int ysize, float zx, float zy);

 

//扩大、缩小(最近旁法)

void Scale_near(BYTE *image_in, BYTE *image_out, int xsize, int ysize, float zx, float zy);

 

//扩大、缩小(线性补间法)

void Scale(BYTE *image_in, BYTE *image_out, int xsize, int ysize, float zx, float zy);

 

//位移(线性补间法)

void Shift(BYTE *image_in, BYTE *image_out, int xsize, int ysize, float px, float py);

 

//回转(线性补间法)

void Rotation(BYTE *image_in, BYTE *image_out, int xsize, int ysize, float deg);

 

//仿射变换(移动、旋转、放大缩小)

void Affine(BYTE *image_in,      BYTE *image_out, int xsize, int ysize, float deg,

                     float zx, float zy, float px, float py);

 

//透视变换(线性补间法)

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);

 

/*-------------------Hough变换---------------------------------*/

//一般hough变换

void Hough_general(BYTE *image_in, BYTE *image_out, int xsize, int ysize);

 

//过已知点hough变换

void Hough_based_point(BYTE *image_in, BYTE *image_out, int xsize, int ysize, int px, int py);

 

/*---------------傅里叶变换程序---------------------------------*/

//1次傅里叶变换

int FFT1(float a_rl[], float a_im[], int ex, int inv);

 

//1次傅里叶变换的主计算部分

void fft1core(float a_rl[], float a_im[], int length,

       int ex, float sin_tbl[], float cos_tbl[], float buf[]);

 

//2次傅里叶变换

int FFT2 (float *a_rl, float *a_im, int inv, int xsize, int ysize);

 

//2FFT的变换结果频率域图像化

int FFTImage(BYTE *image_in, BYTE *image_out, int xsize, int ysize);

 

//2FFT的滤波处理、滤波后的频率域图像化

int FFTFilter(BYTE *image_in, BYTE *image_out, int xsize, int ysize, int a, int b);

 

//图像的2FFT变换、滤波处理、逆傅里叶变换

int FFTFilterImage(BYTE *image_in, BYTE *image_out, int xsize, int ysize, int a, int b);

 

 

/*------------------ 离散小波变换程序--------------------------------*/

 

//2维小波变换

void Wavelet2d (BYTE *image_in, int xsize, int ysize, double *s1, double *w1v,

                            double *w1h, double *w1d);

 

//2维小波信号图像化

void Wavelet2d_image (double *s1, double *w1v, double *w1h, double *w1d,

                                     BYTE *image_out, int xsize, int ysize);

 

//2维逆小波变换

void Iwavelet2d (double *s1, double *w1v, double *w1h, double *w1d,

                             BYTE *image_out, int xsize, int ysize );

 

//1维小波变换

void Wavelet1d (double *s0,  int s_len, double *p, double *q,

                       int sup, double *s1, double *w1);

 

//1维逆小波变换

void Iwavelet1d (double *s1, double *w1, int s_len, double *p,

                    double *q, int sup, double *s0);

 

/*---------------------模式识别---------------------------------*/

 

//K-邻近法模式识别

void KMeans(double *Pattern, int NumPatterns, int SizeVector, int NumClusters, aCluster *Cluster);

 

/*---------------------神经网络文字识别---------------------------------*/

 

//倾斜调整

void Slope_adjust(BYTE *image_in, BYTE *image_out, int xsize, int ysize);

 

//文字分割

CRectLink Char_segment(BYTE *image_in, int xsize, int ysize, int &digicount);

 

//文字宽度调整

void Std_char_rect(BYTE *image_in, BYTE *image_out, int xsize, int ysize, CRectLink &charRect);

 

//文字规整排列

void Auto_align(BYTE *image_in, BYTE *image_out, int xsize, int ysize, CRectLink &charRect);

 

//申请2维双精度实数数组

double **alloc_2d_dbl(int m, int n);

 

//提取特征向量

void Code(BYTE* image_in, int xsize, int ysize, int num, double **data );

 

//BP网络训练

void BpTrain(double ** data_in, double** data_out, int n_in, int n_hidden, double min_ex, double momentum, double eta, int num);

 

//读取各层结点数目

bool r_num(int *n,char *name);

 

//文字识别

void CodeRecognize(double **data_in, int num ,int n_in,int n_hidden,int n_out);

 

 

/*---------------------遗传算法---------------------------------*/

//画直线

void Draw_line (BYTE *image, int xsize, int sx, int sy, int ex, int ey, unsigned char gray_level);

 

//画点

void Draw_point (BYTE *image, int xsize, int x, int y, unsigned char gray_level);

 

//画园

void Draw_circle (BYTE *image, int xsize, int ysize, int x_center, int y_center, int radius,

                  unsigned char gray_level);

 

//画矩形

int Draw_rectangle( BYTE* image, int xsize, int ysize ,int sx, int sy, int ex, int ey,

                                          unsigned char draw_gray_level );

 

//画数字

void Draw_number_image(BYTE *image, int xsize, int ysize, int number, int x, int y,

                           BYTE char_gray); //注:该函数不对外提供

 

//染色体的二点交叉函数

void two_crossover( unsigned char *gene, int g1, int g2, int g3, int g4, int length );

 

//染色体的变异

void ga_mutation(unsigned char* gene, int pop_size, int length, double m_rate );

 

//染色体的变异,g1g2的亲代,生成g3g4的子代

void make_offspring( int g1, int g2, int g3, int g4 );

 

//简单GA的选择函数

void ga_reproduction();

 

//生成模板

void Ga_set_model(BYTE* image, int xsize, int ysize, int sx, int sy, int ex, int ey, int model_type, int noise);

 

//生成原图像

void Ga_set_image(BYTE* image, BYTE* image_dim, int xsize, int ysize, int sx, int sy, int ex, int ey);

 

//基于GA的搜索

void Ga_search(BYTE* image, BYTE* image_him, int xsize, int ysize, int xsize_dim);

 

// 基于随机搜索的搜索

void Random_search(BYTE* image, BYTE* image_dim, int xsize, int ysize, int xsize_dim);

 

/*---------------图像压缩程序---------------------------------*/

 

//预测编码 DPCM (预测法(1):处理一行区域)

void Dpcm1(BYTE* image_in, int xsize, int line, short *data_out);

 

//预测编码 DPCM (预测法(2):处理一行区域)

void Dpcm2(BYTE* image_in, int xsize, int line, short *data_out);

 

//DPCM数据分布直方图

void Histgram_dpcm(BYTE *image, int xsize, int ysize, long hist[512]);

 

//计算DPCM直方图百分比

void CalHistPercent_dpcm(long hist[], float hist_radio[], float &max_percent);

 

//DPCM的解码 (预测法(1):处理一行区域)

void Idpcm1(short *data_in, int xsize, int line, BYTE* image_out);

 

//DPCM的解码 (预测法(2):处理一行区域)

void Idpcm2(short *data_in, int xsize, int line, BYTE* image_out);

 

//变长编码

int Vlcode(short int data_in[], int no, char vlc_out[]);

 

//变长编码的解码

void Ivlcode(char vlc_in[], int no, short int data_out[]);

 

//DPCM码到变长码的变换

int Event(short dt);

 

//由变长码到DPCM码的转换

int Ievent(short ev);

 

//DPCM + 变长编码

int Dpcm_vlcode(BYTE *image_in, int xsize, int ysize, BYTE* image_buf);

 

//DPCM + 变长编码的解码

int Idpcm_vlcode(BYTE *image_buf, BYTE *image_out, int xsize, int ysize);



链接:配套教材《实用数字图像处理与分析》


-END-


上一篇:没有了