[argyllcms] [Possible bug in Spyd2.c] Inconsistant readings from Spyder3

  • From: howdy555@xxxxxxxxx
  • To: argyllcms@xxxxxxxxxxxxx
  • Date: Fri, 6 Mar 2009 10:19:41 +0100

Hello again!

As I wrote in the last post I have found a possible bug in Spyd2.c.
Spyder3 has problems with reading a very dark patch and can sometimes
return garbage:
To confirm the bug try reading a completely black patch a few (10?)
times with spotread and you will see that the results are something
like (for X axis):0.2, 0.19,0.2, 0.17 [so far OK], 0.01 [Stupid reading!],
0.2, 0.19 [etc.]. The problem is IMHO caused by too small reading time in 
spyd2.c. When I
added (file: Spyd2.c):

#ifdef DO_ADAPTIVE
                if (i > 0)
                        break;                  /* Done adaptive */
                /* Decide whether to go around again */
                /* --- BEGIN CHANGE --- */
                if (bxyz < 1.0) {
                        nframes *= 16;
                        if (p->debug) fprintf(stderr,"Integration time is 16 
times longer\n");
                } else
                /* --- END CHANGE ---/*
                if (bxyz < 5.0) {
                        nframes *= 2;                                 /* 
Tripple total intergration time */
                        if (p->debug) fprintf(stderr,"Tripling integration 
time\n");
                } else if (bxyz < 10.0) {
                        nframes *= 1;                                 /* Double 
total intergration time */
                        if (p->debug) fprintf(stderr,"Doubling integration 
time\n");
                } else if (bxyz < 20.0) {
                        nframes = ((nframes * 1))/2;          /* 1.5 times 
intergration time */
                        if (p->debug) fprintf(stderr,"Extra 50%% integration 
time\n");
                } else {
                        break;                  /* No need for another readign 
*/
                }
#else /* !DO_ADAPTIVE */
                fprintf(stderr,"!!!! Spyder 2 DO_ADAPTIVE is off !!!!\n");
                break;
#endif /* !DO_ADAPTIVE */
        }

the problem seems to disappear and readings seem to be slightly
better.

Could anyone test the current implementation? Is it possible to add
the test to detect such readings (e.g. by reading the same patch twice
and discarding both results if the difference is too large) and redo
the measurement (returning an average of 2 readings to increase
accuracy)?

The problem manifests itself only for very dark patches (or at least I
was unable to reproduce it for lighter ones).


Other related posts: