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

📄 denoise_3sigma.c

📁 图像置乱代码
💻 C
📖 第 1 页 / 共 2 页
字号:
void FFT_proc(){	Imrect *srcIm,*destIm;	int width, height;
	Imregion *roi;	float pix;	double fftdata[nMAX*2];	double outdata[nMAX];	int i,j,u,v;	srcIm = read_image();	width = srcIm->width;
    	height = srcIm->height;    	roi = srcIm->region;
	if (roi == NULL) return ;	//destIm = im_alloc( height, width, roi, float_v );	for (i = 0; i < height  ; i++)
	{
		for (j = 0; j< width ; j++)
		{			IM_PIX_GET(srcIm, i, j, pix);			gdata[256*i+j] = pix;			//printf("gdata[%d]  =  %f\n",256*i+j,gdata[256*i+j]);		}
	}	for (i = 0 ;i < nMAX ;i ++)	{		fftdata[i*2] = gdata[i];		fftdata[i*2+1] = 0.0;	}	four1(fftdata-1, nMAX, 1);	for (i = 0;i < nMAX; i ++)		outdata[i] = sqrt(fftdata[i*2]*fftdata[i*2] + fftdata[i*2+1]*fftdata[i*2+1]);	for (i = 0 ;i < nMAX ;i ++)		printf(" outdata[%d] = %f\n",i,outdata[i]);	FILE *fp;     	if((fp=fopen("FFT.txt","w"))==NULL)    	{         	format("Can't open the file!\n");         	exit(0);    	} 	for (i = 32768;i < nMAX;i++)		fprintf(fp,"%d  %f\n",i,outdata[i]);     	fclose(fp);	printf("ok!!!\n");}void FFT_proc1(){	#define NN 64	float fftdata[NN];	float data[NN];	int i;	for (i = 0 ;i < NN ;i ++)		data[i] = 5.0;	for (i = 0 ;i < NN ;i ++)		fftdata[i] = data[i];	realft(fftdata-1, NN, 1);	for (i = 0 ;i < NN ;i ++)		printf(" fftdata[%d] = %f\n",i,fftdata[i]);	FILE *fp;     	if((fp=fopen("tFFT.txt","w"))==NULL)    	{         	format("Can't open the file!\n");         	exit(0);    	} 	for (i = 0;i < NN;i++)		fprintf(fp,"%d  %f\n",i,fftdata[i]);     	fclose(fp);     	if((fp=fopen("data.txt","w"))==NULL)    	{         	format("Can't open the file!\n");         	exit(0);    	} 	for (i = 0;i < NN;i++)		fprintf(fp,"%f\n",data[i]);     	fclose(fp);	printf("ok!!!\n");} /*---------------------------------------------------------------------------     To get the location of the min in the index. ---------------------------------------------------------------------------*/
int index_min(data,n)
double data[];	int n;
{
	int i, imin=0;	double a, min=data[0];
	for(i=1;i<n;i++)
		if((a=data[i])<min) {imin=i; min=a;}
    return imin;
}

 /*---------------------------------------------------------------------------     To get the location of the max in the index. ---------------------------------------------------------------------------*/
int index_max(data,n)
double data[];   int n;
{
    int i, imax=0;	double a, max=data[0];
    for(i=1;i<n;i++)
		if((a=data[i])>max) {imax=i; max=a;}
    return imax;
}
 /*---------------------------------------------------------------------------    motion detect using 3sigma(median).    	use median to estimate the sigma;     	use 3sigma to detect outline pionts(motion). ---------------------------------------------------------------------------*/void Motion_proc(){	Imrect *orig_a;	Imrect *orig_b;	Imrect *dest_a_b;/*----------------Pop the org_image from stack-------------------    	int     type;	if (stack_check_types(IMRECT, NULL) == false)
	{		printf("pop 图像b 失败!\n");
		error("Motion_proc : wrong types on stack", warning);
		return;
	}
	orig_b = (Imrect *) stack_pop(&type);	tv_imrect2(tv1, orig_b);	printf("pop 图像b 成功!\n");	if (stack_check_types(IMRECT, NULL) == false)
	{		printf("pop 图像a 失败!\n");
		error("Motion_proc : wrong types on stack", warning);
		return;
	}
	orig_a = (Imrect *) stack_pop(&type);	tv_imrect2(tv, orig_a);	printf("pop 图像a 成功!\n");/*-----------------------------------------------------------------------------*/
	int width, height;
	double pix;
	int lx, ux, ly, uy;
	Imregion *roi;	int i,j;	orig_a = ReadGIF("/home/wzz/newimscramdegree/cs/cs0.gif", 1);	orig_b = ReadGIF("/home/wzz/newimscramdegree/cs/cs10.gif", 1);
	width = orig_a->width;
    	height = orig_a->height;

	roi = orig_a->region;
	if (roi == NULL) return ;
	lx = roi->lx;
	ux = roi->ux;
	ly = roi->ly;
	uy = roi->uy;	printf("%d  %d  %d  %d\nwidth = %d  height = %d\n",lx, ux, ly, uy,width,height);/*-------------------------------------------------------------------------	double data[nMAX];	double fabs_data_g[nMAX];	Imrect *im_gauss_4;	im_gauss_4 = im_alloc( height, width, roi, int_v );	i = 0;	data[i] = gauss_random(0, 0.0, sqrt(4.0));	IM_PIX_SET(im_gauss_4, i/width, i%width, fabs_data_g[i]);	for(i = 1; i < nMAX; i ++)	{		data[i] = gauss_random(1, 0.0, sqrt(4.0));		fabs_data_g[i] = fabs(data[i]);		IM_PIX_SET(im_gauss_4, i/width, i%width, (((int)data[i]+255)%255));		//IM_PIX_SET(im_gauss_4, i/width, i%width, (int)data[i]+128);	}	double av,dv,md;	av=get_mean(data,nMAX);	dv=sqrt(get_var(data,nMAX));	md=get_med(fabs_data_g,nMAX);	printf("ave = %f   dvar = %f   med = %f  med*1.4826 = %f\n",av,dv,md,md*1.4826);	//gif_write_file(im_gauss_4,"im_gauss_4.gif");/*------------------------------------------------------------------------*/	int WxH = width*height;	double a_data[width*height];	double b_data[width*height];	double a_b_data[width*height],fabs_0_data[width*height],a_b_0_data[width*height];	double ave,var,med;	dest_a_b = im_alloc( height, width, roi, orig_a->vtype );int count = 0;	for(i = ly; i < uy; i ++)		for(j = lx; j < ux; j ++)		{			IM_PIX_GET(orig_a, i, j, pix);			a_data[width*i+j] = pix;			IM_PIX_GET(orig_b, i, j, pix);			b_data[width*i+j] = pix;			a_b_data[width*i+j] = b_data[width*i+j] - a_data[width*i+j];			if(a_b_data[width*i+j] != 0.0)				count++;			//fabs_data[width*i+j] = fabs(a_b_data[width*i+j]);			/*if(a_b_data[width*i+j] > 0)				IM_PIX_SET(dest_a_b, i, j,(int)a_b_data[width*i+j] );			if(a_b_data[width*i+j] <= 0)				IM_PIX_SET(dest_a_b, i, j,((int)a_b_data[width*i+j] + 255));*/			IM_PIX_SET(dest_a_b, i, j,(((int)a_b_data[width*i+j]+256)%256));			//IM_PIX_SET(dest_a_b, i, j,(int)fabs_data[width*i+j]);				//printf("[%d %d]= %f  ",i,j,a_b_data[width*i+j]);						}printf("%d ",count);/*-----------------------------------		double max,min;	double k;	int min_t,max_t;	min_t = index_min(a_b_data,width*height);	min = a_b_data[min_t];	printf("min = %f \n",min);		max_t = index_max(a_b_data,width*height);	max = a_b_data[max_t];	printf("max = %f \n",max);		k = 255/(max - min);	printf("k = %f \n",k);	for(i = 0; i < width*height; i ++)	{		a_b_data[i] = (a_b_data[i] - min)*k;		IM_PIX_SET(dest_a_b, i/width, i%width,floor(a_b_data[i]));	}/*-----------------------------------	double max,min;	double k;	int min_t,max_t;	min_t = index_min(fabs_data,width*height);	min = fabs_data[min_t];	printf("min = %f \n",min);		max_t = index_max(fabs_data,width*height);	max = fabs_data[max_t];	printf("max = %f \n",max);		k = 255/(max - min);	printf("k = %f \n",k);	for(i = 0; i < width*height; i ++)	{		fabs_data[i] = (fabs_data[i] - min)*k;		IM_PIX_SET(dest_a_b, i/width, i%width,floor(fabs_data[i]));	}/*-----------------------------------*/	//tv_imrect2(tv2, dest_a_b);	//gif_write_file(dest_a_b,"f_np-dp.gif");	ave = var = med =0;	ave = get_mean(a_b_data,width*height);	printf("\na_b ave = %f\n",ave);	var = get_var(a_b_data,width*height);	printf("a_b dvar = %f \n",sqrt(var));	//med = get_med(fabs_data,WxH);	//printf("fabs med = %f   med*1.4826 = %f\n",med,med*1.4826);	double meanmed;	meanmed = get_med(a_b_data,WxH);	printf("meanmed = %f\n",meanmed);	for(i = 0; i < width*height; i ++)	{		a_b_0_data[i] = a_b_data[i] - meanmed;// move to 0 		fabs_0_data[i] = fabs(a_b_0_data[i]);		//IM_PIX_SET(dest_a_b, i/width, i%width,floor(fabs_data[i]));	}	ave = get_mean(a_b_0_data,width*height);	printf("\na_b_0_data ave = %f\n",ave);	var = get_var(a_b_0_data,width*height);	printf("a_b_0_data dvar = %f \n",sqrt(var));	med = get_med(fabs_0_data,WxH);	printf("fabs_0 med = %f   med*1.4826 = %f\n",med,med*1.4826);	double sigma3_m,sigma3;	//sigma3 = sqrt(var)*3;	sigma3_m = med*1.4826*3;	sigma3 = sigma3_m;	/*for(i = ly; i < uy; i ++)		for(j = lx; j < ux; j ++)		{			if(fabs_data[width*i+j]  < sigma3)				IM_PIX_SET(dest_a_b, i, j,128);//0,128,255		}*/	/*for(i = 0; i < width*height; i ++)	{		if(fabs_data[width*i+j]  < sigma3)			IM_PIX_SET(dest_a_b, i/width, i%width,128);	}*/	printf("WxH = %d\n",WxH);	for(i = 0; i < width*height; i ++)	{		if(fabs_0_data[i] < sigma3)		{			//a_b_data[i] = 0;			//fabs_data[i] = 0;			IM_PIX_SET(dest_a_b, i/width, i%width,0);		}	}/*-----------------------------------	double max,min;	double k;	int min_t,max_t;	min_t = index_min(a_b_data,width*height);	min = a_b_data[min_t];	printf("min = %f \n",min);		max_t = index_max(a_b_data,width*height);	max = a_b_data[max_t];	printf("max = %f \n",max);		k = 255/(max - min);	printf("k = %f \n",k);	for(i = 0; i < width*height; i ++)	{		a_b_data[i] = (a_b_data[i] - min)*k;		IM_PIX_SET(dest_a_b, i/width, i%width,floor(a_b_data[i]));		//printf("%d ",i);	}/*-----------------------------------*/	gif_write_file(dest_a_b,"f_np-dp_m.gif");	printf("done\n");}/*void Ave_3sigma_proc(){	Imrect *orig_b;	Imrect *dest_b;    	int     type;	if (stack_check_types(IMRECT, NULL) == false)
	{		printf("pop 图像b 失败!\n");
		error("Motion_proc : wrong types on stack", warning);
		return;
	}
	orig_b = (Imrect *) stack_pop(&type);	printf("pop 图像b 成功!\n");	int width, height;
	double pix;
	int lx, ux, ly, uy;
	Imregion *roi;	int i,j;
	width = orig_b->width;
    	height = orig_b->height;

	roi = orig_b->region;
	if (roi == NULL) return ;
	lx = roi->lx;
	ux = roi->ux;
	ly = roi->ly;
	uy = roi->uy;	printf("%d  %d  %d  %d\nwidth = %d  height = %d\n",lx, ux, ly, uy,width,height);	double b_data[width*height];	double ave,var;	dest_b = im_alloc( height, width, roi, orig_b->vtype );	for(i = ly; i < uy; i ++)		for(j = lx; j < ux; j ++)		{			IM_PIX_GET(orig_b, i, j, pix);			b_data[width*i+j] = pix;			IM_PIX_SET(dest_b, i, j,pix);					}	ave = var = 0;	ave = get_mean(b_data,width*height);	printf("\nave = %f\n",ave);	var = get_var(b_data,width*height);	printf("dvar = %f \n",sqrt(var));	double sigma3;	sigma3 = sqrt(var)*3;	for(i = 0; i < width*height; i ++)	{		if(b_data[i]  < sigma3)		{			IM_PIX_SET(dest_b, i/width, i%width,0);		}	}	gif_write_file(dest_b,"Ave_3sigma_b.gif");	printf("done\n");}void Med_3sigma_proc(){	Imrect *orig_b;	Imrect *dest_b;    	int     type;	if (stack_check_types(IMRECT, NULL) == false)
	{		printf("pop 图像b 失败!\n");
		error("Motion_proc : wrong types on stack", warning);
		return;
	}
	orig_b = (Imrect *) stack_pop(&type);	printf("pop 图像b 成功!\n");	int width, height;
	double pix;
	int lx, ux, ly, uy;
	Imregion *roi;	int i,j;
	width = orig_b->width;
    	height = orig_b->height;

	roi = orig_b->region;
	if (roi == NULL) return ;
	lx = roi->lx;
	ux = roi->ux;
	ly = roi->ly;
	uy = roi->uy;	printf("%d  %d  %d  %d\nwidth = %d  height = %d\n",lx, ux, ly, uy,width,height);	double b_data[width*height];	double med;	dest_b = im_alloc( height, width, roi, orig_b->vtype );	for(i = ly; i < uy; i ++)		for(j = lx; j < ux; j ++)		{			IM_PIX_GET(orig_b, i, j, pix);			b_data[width*i+j] = pix;			IM_PIX_SET(dest_b, i, j,pix);					}	med  =0;	med = get_med(b_data,width*height);	printf("med = %f   med*1.4826 = %f\n",med,med*1.4826);	double sigma3_m;	sigma3_m = med*1.4826*3;	for(i = 0; i < width*height; i ++)	{		if(b_data[i]  < sigma3_m)		{			IM_PIX_SET(dest_b, i/width, i%width,0);		}	}	gif_write_file(dest_b,"Med_3sigma_b.gif");	printf("done\n");}*/static void tv_choice_proc(choice)
int     choice;
{
    switch (choice)
    	{
    	case 0: tv_set_next(tv);
		break;
    	case 1: tv_set_next(tv1);
		break;
    	default:error("tv_choice_proc: unknown choice\n", warning);
		break;
    	}}static void scan_proc(void){    scan_files(directory_name,file_name);    tw_sglobal_reset(pdir);    tw_sglobal_reset(pfile);}/********** Tool creation **********/
void            denoise_3sigma_tool(int x, int y)
{
	static void *tool = NULL;	if (tool)
	{
		tw_show_tool(tool);
		return;
	}
	tool = (void *)tw_tool("Image 3sigma denoise", x, y);
    	/* Initialise pathname from environment variable (or #define) */    	(void) environ_pathname_get(directory_name, file_name,				"TINA_IMAGE_DEFAULT",				"/home/wzz/newimscramdegree/result/Lena.bmp");
	//tw_button("3sigma",denoise_3sigma_proc,NULL);	tw_newrow();	/*---------------------------*/  	pdir = (void *) tw_sglobal("Directory:", directory_name, 32);    	tw_button("scan", scan_proc, NULL);  	tw_newrow();  	pfile = (void*) tw_sglobal("File:", file_name, 32);  	tw_newrow();	/*---------------------------*/	tw_button("Ave_Var",Get_ave_var_proc);	tw_button("Gauss",Gauss_proc);	//tw_button("FFT",FFT_proc);	tw_newrow();	tw_button("Motion",Motion_proc);	//tw_button("Ave_3sigma",Ave_3sigma_proc);	//tw_button("Med_3sigma",Med_3sigma_proc);	tw_newrow();
	tw_end_tool();
}

⌨️ 快捷键说明

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