forked from tTh/FloatImg
first version of displacement mapping
This commit is contained in:
parent
f04f37ce43
commit
3e820c8298
|
@ -5,7 +5,8 @@ DEPS = ../floatimg.h Makefile
|
||||||
OBJS = fimg-png.o fimg-tiff.o misc-plots.o filtrage.o utils.o \
|
OBJS = fimg-png.o fimg-tiff.o misc-plots.o filtrage.o utils.o \
|
||||||
fimg-libpnm.o rampes.o sfx0.o geometry.o rotate.o \
|
fimg-libpnm.o rampes.o sfx0.o geometry.o rotate.o \
|
||||||
equalize.o fimg-fits.o saturation.o histogram.o \
|
equalize.o fimg-fits.o saturation.o histogram.o \
|
||||||
hsv.o classif.o contour2x2.o qsortrgb.o exporter.o
|
hsv.o classif.o contour2x2.o qsortrgb.o exporter.o \
|
||||||
|
displacement.o
|
||||||
|
|
||||||
#---------------------------------------------------------------
|
#---------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -19,6 +20,9 @@ t: t.c $(DEPS) ../libfloatimg.a
|
||||||
../libfloatimg.a: $(OBJS)
|
../libfloatimg.a: $(OBJS)
|
||||||
$(AR) r $@ $?
|
$(AR) r $@ $?
|
||||||
|
|
||||||
|
displacement.o: displacement.c
|
||||||
|
gcc $(COPT) -c $<
|
||||||
|
|
||||||
fimg-png.o: fimg-png.c $(DEPS)
|
fimg-png.o: fimg-png.c $(DEPS)
|
||||||
gcc $(COPT) -c $<
|
gcc $(COPT) -c $<
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,91 @@
|
||||||
|
/*
|
||||||
|
* displacement.c
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
#include "../floatimg.h"
|
||||||
|
|
||||||
|
extern int verbosity;
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------- */
|
||||||
|
/* --------------------------------------------------------------------- */
|
||||||
|
/* nouveau 24 octobre 2020, pendant le masque-flamme coronavidique */
|
||||||
|
|
||||||
|
int fimg_displacement_0(FloatImg *psrc, FloatImg *pdst, int flags)
|
||||||
|
{
|
||||||
|
int x, y, foo;
|
||||||
|
float minmax[6];
|
||||||
|
float rgb[3];
|
||||||
|
float dltr, dltg, dltb; /* delta des minmax */
|
||||||
|
float dispx, dispy;
|
||||||
|
|
||||||
|
int dstx, dsty;
|
||||||
|
int in, out;
|
||||||
|
|
||||||
|
#if DEBUG_LEVEL
|
||||||
|
fprintf(stderr, ">>> %s ( %p %p 0x%04x )\n", __func__, psrc, pdst, flags);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (FIMG_TYPE_RGB != psrc->type) {
|
||||||
|
fprintf(stderr, "%s: bad src type %d\n", __func__, psrc->type);
|
||||||
|
return -7;
|
||||||
|
}
|
||||||
|
if (fimg_images_not_compatible(psrc, pdst)) {
|
||||||
|
fprintf(stderr, "%s: bad dst type %d\n", __func__, pdst->type);
|
||||||
|
return -8;
|
||||||
|
}
|
||||||
|
|
||||||
|
foo = fimg_get_minmax_rgb(psrc, minmax);
|
||||||
|
if (verbosity) {
|
||||||
|
fimg_print_minmax(minmax, (char *)__func__);
|
||||||
|
}
|
||||||
|
|
||||||
|
dltr = minmax[1] - minmax[0];
|
||||||
|
dltg = minmax[3] - minmax[2];
|
||||||
|
dltb = minmax[5] - minmax[4];
|
||||||
|
|
||||||
|
in = out = 0;
|
||||||
|
|
||||||
|
for (y=0; y<psrc->height; y++) {
|
||||||
|
|
||||||
|
for (x=0; x<psrc->width; x++) {
|
||||||
|
|
||||||
|
fimg_get_rgb(psrc, x, y, rgb);
|
||||||
|
|
||||||
|
dispx = (float)x + (rgb[1]/dltg * 10.0);
|
||||||
|
dispy = (float)y + (rgb[2]/dltb * 10.0);
|
||||||
|
dstx = (int)roundf(dispx - 5.0);
|
||||||
|
dsty = (int)roundf(dispy - 5.0);
|
||||||
|
|
||||||
|
if ( (dstx < 0) || (dsty < 0) ||
|
||||||
|
(dstx >= psrc->width) ||
|
||||||
|
(dsty >= psrc->height) )
|
||||||
|
{
|
||||||
|
/* OUT OF DESTINATION PICTURE */
|
||||||
|
out++;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
rgb[1] = rgb[2] = rgb[0];
|
||||||
|
fimg_put_rgb(pdst, dstx, dsty, rgb);
|
||||||
|
// fprintf(stderr, "%5d %5d %f\n", dstx, dsty, rgb[1]);
|
||||||
|
in++;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (verbosity > 2) {
|
||||||
|
fprintf(stderr, "%4d / %4d\n", y, psrc->height);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(stderr, "%s -------> in %d out %d\n", __func__, in, out);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
/* --------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
|
43
funcs/t.c
43
funcs/t.c
|
@ -14,6 +14,39 @@ int verbosity;
|
||||||
|
|
||||||
float global_fvalue;
|
float global_fvalue;
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------- */
|
||||||
|
/* nouveau 24 octobre 2020, pendant le masque-flamme coronavidique */
|
||||||
|
|
||||||
|
int fimg_displacement_0(FloatImg *psrc, FloatImg *pdst, int flags);
|
||||||
|
|
||||||
|
int essai_displacement(char *infile, char *outfile)
|
||||||
|
{
|
||||||
|
int foo;
|
||||||
|
FloatImg src, dst;
|
||||||
|
|
||||||
|
fprintf(stderr, "%s : loading %s\n", __func__, infile);
|
||||||
|
foo = fimg_create_from_dump(infile, &src);
|
||||||
|
if (foo) {
|
||||||
|
fprintf(stderr, "%s: error loading '%s'\n", __func__, infile);
|
||||||
|
return foo;
|
||||||
|
}
|
||||||
|
|
||||||
|
fimg_clone(&src, &dst, 1);
|
||||||
|
|
||||||
|
foo = fimg_displacement_0(&src, &dst, 0);
|
||||||
|
if (foo) {
|
||||||
|
fprintf(stderr, "%s: err %d in disp map 0\n", __func__, foo);
|
||||||
|
return foo;
|
||||||
|
}
|
||||||
|
|
||||||
|
foo = fimg_export_picture(&dst, outfile, 0);
|
||||||
|
if (foo) {
|
||||||
|
fprintf(stderr, "%s : err %d saving result\n", __func__, foo);
|
||||||
|
return foo;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
/* --------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------- */
|
||||||
/*
|
/*
|
||||||
* nouveau 7 octobre 2020 pendant sonoptic
|
* nouveau 7 octobre 2020 pendant sonoptic
|
||||||
|
@ -557,7 +590,8 @@ return 0;
|
||||||
}
|
}
|
||||||
/* --------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------- */
|
||||||
enum nCmd { Equalize=1, Rotate, Sfx0, F3x3, MIRE, Wfits, Wpng, Wtiff,
|
enum nCmd { Equalize=1, Rotate, Sfx0, F3x3, MIRE, Wfits, Wpng, Wtiff,
|
||||||
Histo, Hsv, Classif, Ctr2x2, Qsortrgb };
|
Histo, Hsv, Classif, Ctr2x2, Qsortrgb,
|
||||||
|
Displace };
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char *name;
|
char *name;
|
||||||
int Cmd;
|
int Cmd;
|
||||||
|
@ -577,6 +611,7 @@ Command commands[] = {
|
||||||
{ "classif", Classif },
|
{ "classif", Classif },
|
||||||
{ "ctr2x2", Ctr2x2 },
|
{ "ctr2x2", Ctr2x2 },
|
||||||
{ "qsortrgb", Qsortrgb },
|
{ "qsortrgb", Qsortrgb },
|
||||||
|
{ "displace", Displace },
|
||||||
{ NULL, 0 }
|
{ NULL, 0 }
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
@ -620,10 +655,11 @@ int foo, opt;
|
||||||
char *filename, *command, *outfile;
|
char *filename, *command, *outfile;
|
||||||
|
|
||||||
fprintf(stderr, "++++++++ test des fonctions pid=%d\n", getpid());
|
fprintf(stderr, "++++++++ test des fonctions pid=%d\n", getpid());
|
||||||
|
fprintf(stderr, "++++++++ compiled "__DATE__" at " __TIME__ "\n");
|
||||||
|
|
||||||
global_fvalue = 1.0;
|
global_fvalue = 1.0;
|
||||||
outfile = "out.pnm";
|
outfile = "out.pnm";
|
||||||
|
command = "none";
|
||||||
|
|
||||||
while ((opt = getopt(argc, argv, "hk:o:p:v")) != -1) {
|
while ((opt = getopt(argc, argv, "hk:o:p:v")) != -1) {
|
||||||
switch(opt) {
|
switch(opt) {
|
||||||
|
@ -690,6 +726,9 @@ switch(opt) {
|
||||||
case Qsortrgb:
|
case Qsortrgb:
|
||||||
foo = essai_qsort_rgb(filename, outfile);
|
foo = essai_qsort_rgb(filename, outfile);
|
||||||
break;
|
break;
|
||||||
|
case Displace:
|
||||||
|
foo = essai_displacement(filename, outfile);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
fprintf(stderr, "%s : bad command\n", command);
|
fprintf(stderr, "%s : bad command\n", command);
|
||||||
exit(1);
|
exit(1);
|
||||||
|
|
|
@ -6,7 +6,7 @@ out=out.fimg
|
||||||
maxi=49
|
maxi=49
|
||||||
W="640"
|
W="640"
|
||||||
H="480"
|
H="480"
|
||||||
grabopt=" -s 640x480 -vv -p 0 -n 400 -c pow2 "
|
grabopt=" -s 640x480 -vv -p 0 -n 300 -c cos01 "
|
||||||
|
|
||||||
mkdir /tmp/V
|
mkdir /tmp/V
|
||||||
|
|
||||||
|
@ -20,9 +20,11 @@ do
|
||||||
grabvidseq -$grabopt -o $src
|
grabvidseq -$grabopt -o $src
|
||||||
|
|
||||||
fval=$(echo "$foo / $maxi" | bc -l)
|
fval=$(echo "$foo / $maxi" | bc -l)
|
||||||
./t -vv -k 0.333 -o $out classif $src
|
./t -vv -k 0.333 -o $out displace $src
|
||||||
echo $foo ' => ' $fval
|
|
||||||
|
|
||||||
|
# fimgstats $out
|
||||||
|
|
||||||
|
echo $foo ' => ' $fval
|
||||||
dst=$(printf "/tmp/V/%03d.png" $foo)
|
dst=$(printf "/tmp/V/%03d.png" $foo)
|
||||||
echo $dst
|
echo $dst
|
||||||
montage $src $out -tile 1x2 -geometry $G $dst
|
montage $src $out -tile 1x2 -geometry $G $dst
|
||||||
|
|
Loading…
Reference in New Issue