⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 change.c

📁 TIC5402Simulator下的一个图象扩大两倍的程序
💻 C
字号:
/*使用双线性插值将一个灰度图扩大为原来的两倍*/

#include <stdio.h>
#include <math.h>

#define TRUE 1
#define FALSE 0

#define BUFSIZE 4096/* 图象原始大小 64*64=4096 */
#define BUFSIZE2 16384/*扩大两倍后128*128=12384*/
/* 全局定义 */
int in_buffer[BUFSIZE];       /* 处理数据缓冲区*/
int out_buffer[BUFSIZE2];      /*改变后的缓冲区*/

/* 函数 */
static int change(int *input, int *output);
static void dataIO(void);

void main()
{
    int *input = &in_buffer[0];
    int *output = &out_buffer[0];

    puts(" experiment started\n");

    /* 永久循环 */
    while(TRUE)
    {       
        /* 读取一个灰度图到处理数据缓冲区,并调用函数change改变其大小*/
        // 读取数据
        dataIO();
        
		puts("processing\n");
        /* 开始处理,扩大两倍*/
    	change(input, output);
    	    
    	// 写进输出缓冲区
    	// 可以将其写入文件中
    	dataIO();
    }
    
}

/*
 *  ======== 处理过程,扩大两倍========
 *
 * 作用:将一个输入缓冲区的灰度图象数据扩大两倍
 *
 * 参数:输入和输出缓冲区的地址
 *
 * 返回值: TRUE.
 */
 
static int change(int *input, int *output)
{
    int w_old,h_old,x_old,y_old;    /*原始图象宽高以及像素坐标*/
    int w_new,h_new,x_new,y_new;    /*改变后的图象宽高以及像素坐标*/
    float x_oldf,y_oldf;
    float u,v;
    int zoom=2;
    float num=(float)1/zoom;
     w_old=h_old=64;
     w_new=h_new=128;
     /*对像素按行进行双线性操作,具体公式为:
     f(i+u,j+v)=(1-u)*(1-v)*f(i,j)+(1-u)*(v)*f(i,j+1)+(u)*(1-v)*f(i+1,j)+u*v*f(i+1,j+1)*/
    for(y_new=0;y_new<h_new;y_new++)
	{
		for(x_new=0;x_new<w_new;x_new++)
		{
			x_old=(long)(x_new*num);
			y_old=(long)(y_new*num);
			x_oldf=x_new*num;
			y_oldf=y_new*num;
            u=(float)(x_oldf-x_old);
			v=(float)(y_oldf-y_old);
			if((x_old>=0) && (x_old<w_old) && (y_old>=0) && (y_old<h_old))
			{
               *(output+y_new*w_new+x_new)=(1-u)*(1-v)*(*(input+(y_old*w_old)+x_old))+(1-u)*(v)*(*(input+(y_old*w_old+1)+x_old))+(u)*(1-v)*(*(input+y_old*w_old+(x_old+1)))+u*v*(*(input+(y_old*w_old+1)+(x_old+1)));	     
			}

		}

	}
    
    puts("Change Successfully!");
    return(TRUE);
}


/*
 *  ======== dataIO ========
 *
 * 作用: 在输入缓冲中读取信号并写入输出中
 *
 * 参数: 无
 *
 * 返回值: 无
 */
static void dataIO()
{
    /* do data I/O */
	
    return;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -