Merge branch 'master' of ssh://tetalab.org:2213/tTh/FloatImg
Ok
This commit is contained in:
		
						commit
						9e4b0e795c
					
				| @ -317,7 +317,8 @@ dans l'upscaling.} effectuées. | ||||
| L'autre façon de procéder est d'explorer notre image à la | ||||
| recherche de la valeur maximale. | ||||
| La fonction \texttt{float fimg\_get\_maxvalue(\&fimg)} est | ||||
| faite pour ça. C'est la méthode utilisée par l'outil qui | ||||
| faite pour ça. | ||||
| C'est actuellement la méthode utilisée par l'outil qui | ||||
| sert à faire les modifications de contraste (page \pageref{fimgfx}. | ||||
| 
 | ||||
| \vspace{1em} | ||||
| @ -370,7 +371,8 @@ return 0; | ||||
| \end{verbatim} | ||||
| 
 | ||||
| Je vous laisse imaginer les dégats que peut faire cette  | ||||
| fontion en utilisation réelle. | ||||
| fontion en utilisation réelle. Mieux, je vous propose | ||||
| d'essayer par vous-même. | ||||
| En particulier tout le reste du code qui suppose qu'un pixel | ||||
| ne peut \textbf{pas} être négatif. | ||||
| Vous pouvez aussi remarquer qu'il n'y a pas de controle | ||||
| @ -438,7 +440,8 @@ en première approche, alors commençont par le plus simple, | ||||
| les valeurs moyennes de chaque composante. | ||||
| 
 | ||||
| Puis nous rajouterons\footnote{Les patchs sont les bienvenus} | ||||
| le calcul de la variance\index{variance}. | ||||
| le calcul de la variance\index{variance}. Les compétences | ||||
| de \texttt{schmod777} sont attendues au dd2\index{dd2}. | ||||
| 
 | ||||
| \subsection{fimgfx}\index{fimgfx}\label{fimgfx} | ||||
| 
 | ||||
| @ -446,6 +449,17 @@ le calcul de la variance\index{variance}. | ||||
| Attention, je vais expérimenter un parsing un peu étrange | ||||
| sur les arguments de la ligne de commande. coredump expected.}  | ||||
| 
 | ||||
| \vspace{1em} | ||||
| 
 | ||||
| À l'heure actuelle\footnote{décembre 2019, vers 15:30}, nous avons | ||||
| déja quelques ajustements basiques de contraste. | ||||
| 
 | ||||
| \begin{verbatim} | ||||
| tth@daubian:~/Devel/FloatImg/tools$ ./fimgfx -v -h | ||||
| --- fimg special effects --- | ||||
|         cos01 cos010 pow2 sqrt  | ||||
| \end{verbatim} | ||||
| 
 | ||||
| \subsection{fimgops}\index{fimgops}\label{fimgops} | ||||
| 
 | ||||
| Quelques opérations diverses entre deux images, qui doivent être | ||||
|  | ||||
| @ -2,7 +2,7 @@ | ||||
|  *	floatimg.h | ||||
|  */ | ||||
| 
 | ||||
| #define		FIMG_VERSION	78 | ||||
| #define		FIMG_VERSION	80 | ||||
| 
 | ||||
| /*
 | ||||
|  *	in memory descriptor | ||||
| @ -41,6 +41,7 @@ typedef struct { | ||||
| #define CONTRAST_SQRT			1 | ||||
| #define CONTRAST_POW2			2 | ||||
| #define CONTRAST_COS01			3 | ||||
| #define CONTRAST_COS010			4 | ||||
| 
 | ||||
| /*
 | ||||
|  *	core module | ||||
| @ -83,7 +84,7 @@ int fimg_id_contraste(char *name); | ||||
| int fimg_square_root(FloatImg *s, FloatImg *d, double maxval); | ||||
| int fimg_power_2(FloatImg *s, FloatImg *d, double maxval); | ||||
| int fimg_cos_01(FloatImg *s, FloatImg *d, double maxval); | ||||
| 
 | ||||
| int fimg_cos_010(FloatImg *s, FloatImg *d, double maxval); | ||||
| 
 | ||||
| int fimg_mk_gray_from(FloatImg *src, FloatImg*dst, int k); | ||||
| 
 | ||||
|  | ||||
| @ -20,6 +20,7 @@ if (!strcmp(str, "none")) 	return CONTRAST_NONE; | ||||
| if (!strcmp(str, "sqrt")) 	return CONTRAST_SQRT; | ||||
| if (!strcmp(str, "pow2")) 	return CONTRAST_POW2; | ||||
| if (!strcmp(str, "cos01")) 	return CONTRAST_COS01; | ||||
| if (!strcmp(str, "cos010")) 	return CONTRAST_COS010; | ||||
| 
 | ||||
| return -1; | ||||
| } | ||||
| @ -132,6 +133,38 @@ for (idx=0; idx<nbre; idx++) { | ||||
| return 0; | ||||
| } | ||||
| /* ---------------------------------------------------------------- */ | ||||
| int fimg_cos_010(FloatImg *s, FloatImg *d, double maxval) | ||||
| { | ||||
| int		nbre, idx; | ||||
| double		dval; | ||||
| 
 | ||||
| if (s->type != FIMG_TYPE_RGB) { | ||||
| 	fprintf(stderr, "%s : type %d invalide\n", | ||||
| 				__func__, s->type); | ||||
| 	return -4; | ||||
| 	} | ||||
| 
 | ||||
| if (NULL==d) { | ||||
| 	d = s; | ||||
| 	} | ||||
| else	{ | ||||
| 	if (d->type != FIMG_TYPE_RGB) { | ||||
| 		fprintf(stderr, "%s : dst type %d invalide\n", | ||||
| 					__func__, d->type); | ||||
| 		return -4; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| nbre = s->width * s->height * 3; | ||||
| 
 | ||||
| for (idx=0; idx<nbre; idx++) { | ||||
| 	dval = s->R[idx] / maxval; | ||||
| 
 | ||||
| 	d->R[idx] = maxval * (0.5 - 0.5 * cos(2*3.141592654*dval)); | ||||
| 	} | ||||
| 
 | ||||
| return 0; | ||||
| } | ||||
| 
 | ||||
| /* ---------------------------------------------------------------- */ | ||||
| 
 | ||||
|  | ||||
| @ -19,10 +19,11 @@ typedef struct { | ||||
| 	int		nbarg; | ||||
| 	} Fx; | ||||
| 
 | ||||
| enum fxid { Fx_cos01, Fx_pow2, Fx_sqrt }; | ||||
| enum fxid { Fx_cos01, Fx_cos010, Fx_pow2, Fx_sqrt }; | ||||
| 
 | ||||
| Fx fx_list[] = { | ||||
| 	{ "cos01",		Fx_cos01,	0 }, | ||||
| 	{ "cos010",		Fx_cos010,	0 }, | ||||
| 	{ "pow2",		Fx_pow2,	0 }, | ||||
| 	{ "sqrt",		Fx_sqrt,	0 }, | ||||
| 	{ NULL,			0,	0 } | ||||
| @ -52,11 +53,14 @@ return -1; | ||||
| /* --------------------------------------------------------------------- */ | ||||
| static void help(int lvl) | ||||
| { | ||||
| Fx		*fx; | ||||
| 
 | ||||
| printf("fimg special effects (%d)\n", lvl); | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| puts("--- fimg special effects ---"); | ||||
| printf("\t"); | ||||
| for (fx=fx_list; fx->name; fx++) { | ||||
| 	printf("%s ", fx->name); | ||||
| 	} | ||||
| puts(""); | ||||
| exit(0); | ||||
| } | ||||
| /* --------------------------------------------------------------------- */ | ||||
| @ -88,6 +92,8 @@ if (foo) { | ||||
| switch (act) { | ||||
| 	case Fx_cos01: | ||||
| 		fimg_cos_01(&src, &dest, maxval);		break; | ||||
| 	case Fx_cos010: | ||||
| 		fimg_cos_010(&src, &dest, maxval);		break; | ||||
| 	case Fx_pow2: | ||||
| 		fimg_power_2(&src, &dest, maxval);		break; | ||||
| 	case Fx_sqrt: | ||||
|  | ||||
| @ -122,6 +122,10 @@ FloatImg	cumul; | ||||
| while ((opt = getopt(argc, argv, "c:d:ghn:o:O:p:s:uv")) != -1) { | ||||
| 	switch(opt) { | ||||
| 		case 'c':	contrast = fimg_id_contraste(optarg); | ||||
| 				if (contrast < 0) { | ||||
| 					fputs("unknow contrast\n", stderr); | ||||
| 					exit(1); | ||||
| 					} | ||||
| 				break; | ||||
| 		case 'd':	dev_name = optarg;		break; | ||||
| 		case 'g':	to_gray = 1;			break; | ||||
| @ -234,8 +238,10 @@ cumul.count = 0; | ||||
| type = V4L2_BUF_TYPE_VIDEO_CAPTURE; | ||||
| xioctl(fd, VIDIOC_STREAMON, &type); | ||||
| 
 | ||||
| #if 0 | ||||
| if (verbosity)	fprintf(stderr,"pid %d grabbing %d picz...\n", | ||||
| 					getpid(), nbre_capt); | ||||
| #endif | ||||
| 
 | ||||
| for (i = 0; i < nbre_capt; i++) { | ||||
| 	do	{ | ||||
| @ -331,7 +337,7 @@ if (verbosity) { | ||||
| 	} | ||||
| switch (contrast) { | ||||
| 	case CONTRAST_NONE: | ||||
| 		fprintf(stderr, "contrast: none\n"); | ||||
| 		// if (verbosity) fprintf(stderr, "contrast: none\n");
 | ||||
| 		break; | ||||
| 	case CONTRAST_SQRT: | ||||
| 		fimg_square_root(&cumul, NULL, maxvalue); | ||||
| @ -342,6 +348,9 @@ switch (contrast) { | ||||
| 	case CONTRAST_COS01: | ||||
| 		fimg_cos_01(&cumul, NULL, maxvalue); | ||||
| 		break; | ||||
| 	case CONTRAST_COS010: | ||||
| 		fimg_cos_010(&cumul, NULL, maxvalue); | ||||
| 		break; | ||||
| 	default: | ||||
| 		fprintf(stderr, "bad contrast method\n"); | ||||
| 		break; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 tonton Th
						tonton Th