mirror of
https://github.com/eddyem/SBIG_340.git
synced 2025-12-06 10:45:10 +03:00
Substract darks before debayer
This commit is contained in:
parent
9a49eca6aa
commit
312830e9d0
@ -521,10 +521,49 @@ int store_image(imstorage *img){
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef LIBRAW
|
#ifdef LIBRAW
|
||||||
|
static imstorage *dark = NULL;
|
||||||
|
static double lastdtime = 0.;
|
||||||
if(img->imtype != IMTYPE_DARK){ // store debayer only if image type isn't dark
|
if(img->imtype != IMTYPE_DARK){ // store debayer only if image type isn't dark
|
||||||
int lowval = glob_avr - 3*glob_std;
|
int lowval = glob_avr - 3*glob_std;
|
||||||
if(glob_min > lowval) lowval = glob_min;
|
if(glob_min > lowval) lowval = glob_min;
|
||||||
|
if(dark) do{
|
||||||
|
if(dtime() - lastdtime > 3600.){ // not more than 1 hour
|
||||||
|
putlog("Dark too old");
|
||||||
|
FREE(dark->imdata);
|
||||||
|
FREE(dark);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(fabs(dark->exptime/img->exptime - 1.) > 0.05){
|
||||||
|
putlog("Exposures too different, dark: %gs, image: %gs", dark->exptime, img->exptime);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(dark->W != img->W || dark->H != img->H){
|
||||||
|
putlog("Dark and image have different sizes");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// all OK, extract dark
|
||||||
|
uint16_t *iptr = img->imdata, *dptr = dark->imdata;
|
||||||
|
size_t s, S = img->W * img->H;
|
||||||
|
for(s = 0; s < S; ++s, ++iptr, ++dptr){
|
||||||
|
uint16_t i = *iptr, d = *dptr;
|
||||||
|
if(i > d) *iptr = i - d;
|
||||||
|
else *iptr = 0;
|
||||||
|
}
|
||||||
|
putlog("Dark extracted");
|
||||||
|
lowval = 0;
|
||||||
|
}while(0);
|
||||||
if(write_debayer(img, (uint16_t)lowval)) status |= 8; // and save colour image
|
if(write_debayer(img, (uint16_t)lowval)) status |= 8; // and save colour image
|
||||||
|
}else{ // save last dark
|
||||||
|
lastdtime = dtime();
|
||||||
|
if(!dark)
|
||||||
|
dark = MALLOC(imstorage, 1);
|
||||||
|
else
|
||||||
|
FREE(dark->imdata);
|
||||||
|
memcpy(dark, img, sizeof(imstorage));
|
||||||
|
size_t S = img->W*img->H;
|
||||||
|
dark->imdata = MALLOC(uint16_t, S);
|
||||||
|
memcpy(dark->imdata, img->imdata, sizeof(uint16_t)*S);
|
||||||
|
putlog("Save last dark image");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
putlog("Save image, status=%d", status);
|
putlog("Save image, status=%d", status);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user