166#define NOTDEF -1024.0
169#define M_3_2_PI 4.71238898038
172#define M_2__PI 6.28318530718
204 fprintf(stderr,
"LSD Error: %s\n",msg);
211#define RELATIVE_ERROR_FACTOR 100.0
226 double abs_diff,aa,bb,abs_max;
231 abs_diff = fabs(
a-
b);
234 abs_max = aa > bb ? aa : bb;
241 if( abs_max < DBL_MIN ) abs_max = DBL_MIN;
250static double dist(
double x1,
double y1,
double x2,
double y2)
252 return sqrt( (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1) );
294 if( in == NULL || in->
values == NULL )
295 error(
"free_ntuple_list: invalid n-tuple input.");
309 if( dim == 0 )
error(
"new_ntuple_list: 'dim' must be positive.");
313 if( n_tuple == NULL )
error(
"not enough memory.");
321 n_tuple->
values = (
double *) malloc(
sizeof(
double) * dim * n_tuple->
max_size);
322 if( n_tuple->
values == NULL )
error(
"not enough memory.");
333 if( n_tuple == NULL || n_tuple->
values == NULL || n_tuple->
max_size == 0 )
334 error(
"enlarge_ntuple_list: invalid n-tuple.");
340 n_tuple->
values = (
double *) realloc( (
void *) n_tuple->
values,
342 if( n_tuple->
values == NULL )
error(
"not enough memory.");
349 double v4,
double v5,
double v6,
double v7 )
352 if(
out == NULL )
error(
"add_7tuple: invalid n-tuple input.");
353 if(
out->dim != 7 )
error(
"add_7tuple: the n-tuple must be a 7-tuple.");
357 if(
out->values == NULL )
error(
"add_7tuple: invalid n-tuple input.");
360 out->values[
out->size *
out->dim + 0 ] = v1;
361 out->values[
out->size *
out->dim + 1 ] = v2;
362 out->values[
out->size *
out->dim + 2 ] = v3;
363 out->values[
out->size *
out->dim + 3 ] = v4;
364 out->values[
out->size *
out->dim + 4 ] = v5;
365 out->values[
out->size *
out->dim + 5 ] = v6;
366 out->values[
out->size *
out->dim + 6 ] = v7;
397 if(
i == NULL ||
i->data == NULL )
398 error(
"free_image_char: invalid input image.");
411 if( xsize == 0 || ysize == 0 )
error(
"new_image_char: invalid image size.");
415 if( image == NULL )
error(
"not enough memory.");
416 image->
data = (
unsigned char *) calloc( (
size_t) (xsize*ysize),
417 sizeof(
unsigned char) );
418 if( image->
data == NULL )
error(
"not enough memory.");
421 image->
xsize = xsize;
422 image->
ysize = ysize;
432 unsigned char fill_value )
435 unsigned int N = xsize*ysize;
439 if( image == NULL || image->
data == NULL )
440 error(
"new_image_char_ini: invalid image.");
443 for(
i=0;
i<
N;
i++) image->
data[
i] = fill_value;
471 if( xsize == 0 || ysize == 0 )
error(
"new_image_int: invalid image size.");
475 if( image == NULL )
error(
"not enough memory.");
476 image->
data = (
int *) calloc( (
size_t) (xsize*ysize),
sizeof(
int) );
477 if( image->
data == NULL )
error(
"not enough memory.");
480 image->
xsize = xsize;
481 image->
ysize = ysize;
494 unsigned int N = xsize*ysize;
498 for(
i=0;
i<
N;
i++) image->
data[
i] = fill_value;
523 if(
i == NULL ||
i->data == NULL )
524 error(
"free_image_double: invalid input image.");
537 if( xsize == 0 || ysize == 0 )
error(
"new_image_double: invalid image size.");
541 if( image == NULL )
error(
"not enough memory.");
542 image->
data = (
double *) calloc( (
size_t) (xsize*ysize),
sizeof(
double) );
543 if( image->
data == NULL )
error(
"not enough memory.");
546 image->
xsize = xsize;
547 image->
ysize = ysize;
557 unsigned int ysize,
double * data )
562 if( xsize == 0 || ysize == 0 )
563 error(
"new_image_double_ptr: invalid image size.");
564 if( data == NULL )
error(
"new_image_double_ptr: NULL data pointer.");
568 if( image == NULL )
error(
"not enough memory.");
571 image->
xsize = xsize;
572 image->
ysize = ysize;
599 error(
"gaussian_kernel: invalid n-tuple 'kernel'.");
600 if( sigma <= 0.0 )
error(
"gaussian_kernel: 'sigma' must be positive.");
607 val = ( (
double)
i - mean ) / sigma;
608 kernel->values[
i] = exp( -0.5 * val * val );
659 unsigned int N,
M,
h,
n,
x,y,
i;
660 int xc,yc,j,double_x_size,double_y_size;
661 double sigma,xx,yy,sum,prec;
664 if( in == NULL || in->
data == NULL || in->
xsize == 0 || in->
ysize == 0 )
665 error(
"gaussian_sampler: invalid image.");
666 if( scale <= 0.0 )
error(
"gaussian_sampler: 'scale' must be positive.");
667 if( sigma_scale <= 0.0 )
668 error(
"gaussian_sampler: 'sigma_scale' must be positive.");
671 if( in->
xsize * scale > (
double) UINT_MAX ||
672 in->
ysize * scale > (
double) UINT_MAX )
673 error(
"gaussian_sampler: the output image size exceeds the handled size.");
674 N = (
unsigned int) ceil( in->
xsize * scale );
675 M = (
unsigned int) ceil( in->
ysize * scale );
680 sigma = scale < 1.0 ? sigma_scale / scale : sigma_scale;
690 h = (
unsigned int) ceil( sigma * sqrt( 2.0 * prec * log(10.0) ) );
695 double_x_size = (int) (2 * in->
xsize);
696 double_y_size = (int) (2 * in->
ysize);
709 xc = (int) floor( xx + 0.5 );
714 for(y=0;y<aux->
ysize;y++)
722 while( j < 0 ) j += double_x_size;
723 while( j >= double_x_size ) j -= double_x_size;
724 if( j >= (
int) in->
xsize ) j = double_x_size-1-j;
733 for(y=0;y<
out->ysize;y++)
743 yc = (int) floor( yy + 0.5 );
756 while( j < 0 ) j += double_y_size;
757 while( j >= double_y_size ) j -= double_y_size;
758 if( j >= (
int) in->
ysize ) j = double_y_size-1-j;
762 out->data[
x + y *
out->xsize ] = sum;
796 struct coorlist ** list_p,
void ** mem_p,
800 unsigned int n,
p,
x,y,adr,
i;
801 double com1,com2,gx,gy,norm,norm2;
810 double max_grad = 0.0;
814 error(
"ll_angle: invalid image.");
815 if(
threshold < 0.0 )
error(
"ll_angle: 'threshold' must be positive.");
819 if(
n_bins == 0 )
error(
"ll_angle: 'n_bins' must be positive.");
833 *
mem_p = (
void *) list;
839 error(
"not enough memory.");
871 (*modgrad)->data[
adr] = norm;
881 if( norm > max_grad ) max_grad = norm;
889 norm = (*modgrad)->data[
y*
p+
x];
892 i = (
unsigned int) (norm * (
double)
n_bins / max_grad);
943 error(
"isaligned: invalid image 'angles'.");
945 error(
"isaligned: (x,y) out of the image.");
946 if( prec < 0.0 )
error(
"isaligned: 'prec' must be positive.");
961 if( theta < 0.0 ) theta = -theta;
965 if( theta < 0.0 ) theta = -theta;
968 return theta <= prec;
979 if(
a < 0.0 )
a = -
a;
1025 static double q[7] = { 75122.6331530, 80916.6278952, 36308.2951477,
1026 8687.24529705, 1168.92649479, 83.8676043424,
1028 double a = (
x+0.5) * log(
x+5.5) - (
x+5.5);
1034 a -= log(
x + (
double)
n );
1059 return 0.918938533204673 + (
x-0.5)*log(
x) -
x
1060 + 0.5*
x*log(
x*
sinh(1/
x) + 1/(810.0*
pow(
x,6.0)) );
1068#define log_gamma(x) ((x)>15.0?log_gamma_windschitl(x):log_gamma_lanczos(x))
1073#define TABSIZE 100000
1142 error(
"nfa: wrong n, k or p values.");
1145 if(
n==0 || k==0 )
return -
logNT;
1167 if( (
double) k > (
double)
n *
p )
1245 if( in == NULL ||
out == NULL )
error(
"rect_copy: invalid 'in' or 'out'.");
1336static double inter_low(
double x,
double x1,
double y1,
double x2,
double y2)
1339 if( x1 > x2 || x < x1 || x > x2 )
1340 error(
"inter_low: unsuitable input, 'x1>x2' or 'x<x1' or 'x>x2'.");
1345 return y1 + (
x-x1) * (y2-y1) / (x2-x1);
1358static double inter_hi(
double x,
double x1,
double y1,
double x2,
double y2)
1361 if( x1 > x2 || x < x1 || x > x2 )
1362 error(
"inter_hi: unsuitable input, 'x1>x2' or 'x<x1' or 'x>x2'.");
1367 return y1 + (
x-x1) * (y2-y1) / (x2-x1);
1375 if( iter == NULL )
error(
"ri_del: NULL iterator.");
1387 if(
i == NULL )
error(
"ri_end: NULL iterator.");
1392 return (
double)(
i->x) >
i->vx[2];
1403 if(
i == NULL )
error(
"ri_inc: NULL iterator.");
1412 while( (
double) (
i->y) >
i->ye && !
ri_end(
i) )
1435 if( (
double)
i->x <
i->vx[3] )
1455 if( (
double)
i->x <
i->vx[1] )
1456 i->ye =
inter_hi((
double)
i->x,
i->vx[0],
i->vy[0],
i->vx[1],
i->vy[1]);
1458 i->ye =
inter_hi((
double)
i->x,
i->vx[1],
i->vy[1],
i->vx[2],
i->vy[2]);
1461 i->y = (int) ceil(
i->ys);
1477 if(
r == NULL )
error(
"ri_ini: invalid rectangle.");
1481 if(
i == NULL )
error(
"ri_ini: Not enough memory.");
1485 vx[0] =
r->x1 -
r->dy *
r->width / 2.0;
1486 vy[0] =
r->y1 +
r->dx *
r->width / 2.0;
1487 vx[1] =
r->x2 -
r->dy *
r->width / 2.0;
1488 vy[1] =
r->y2 +
r->dx *
r->width / 2.0;
1489 vx[2] =
r->x2 +
r->dy *
r->width / 2.0;
1490 vy[2] =
r->y2 -
r->dx *
r->width / 2.0;
1491 vx[3] =
r->x1 +
r->dy *
r->width / 2.0;
1492 vy[3] =
r->y1 -
r->dx *
r->width / 2.0;
1500 if(
r->x1 <
r->x2 &&
r->y1 <=
r->y2 ) offset = 0;
1501 else if(
r->x1 >=
r->x2 &&
r->y1 <
r->y2 ) offset = 1;
1502 else if(
r->x1 >
r->x2 &&
r->y1 >=
r->y2 ) offset = 2;
1508 i->vx[
n] = vx[(offset+
n)%4];
1509 i->vy[
n] = vy[(offset+
n)%4];
1528 i->x = (int) ceil(
i->vx[0]) - 1;
1529 i->y = (int) ceil(
i->vy[0]);
1530 i->ys =
i->ye = -DBL_MAX;
1548 if( rec == NULL )
error(
"rect_nfa: invalid rectangle.");
1549 if( angles == NULL )
error(
"rect_nfa: invalid 'angles'.");
1553 if(
i->x >= 0 &&
i->y >= 0 &&
1554 i->x < (
int) angles->
xsize &&
i->y < (int) angles->
ysize )
1562 return nfa(pts,alg,rec->
p,logNT);
1630 double lambda,theta,
weight;
1637 if( reg == NULL )
error(
"get_theta: invalid region.");
1638 if( reg_size <= 1 )
error(
"get_theta: region size <= 1.");
1639 if( modgrad == NULL || modgrad->
data == NULL )
1640 error(
"get_theta: invalid 'modgrad'.");
1641 if( prec < 0.0 )
error(
"get_theta: 'prec' must be positive.");
1644 for(
i=0;
i<reg_size;
i++)
1652 error(
"get_theta: null inertia matrix.");
1655 lambda = 0.5 * ( Ixx + Iyy - sqrt( (Ixx-Iyy)*(Ixx-Iyy) + 4.0*Ixy*Ixy ) );
1658 theta = fabs(Ixx)>fabs(Iyy) ? atan2(lambda-Ixx,Ixy) : atan2(Ixy,lambda-Iyy);
1672 double prec,
double p,
struct rect * rec )
1674 double x,y,dx,dy,l,w,theta,
weight,sum,l_min,l_max,w_min,w_max;
1678 if( reg == NULL )
error(
"region2rect: invalid region.");
1679 if( reg_size <= 1 )
error(
"region2rect: region size <= 1.");
1680 if( modgrad == NULL || modgrad->
data == NULL )
1681 error(
"region2rect: invalid image 'modgrad'.");
1682 if( rec == NULL )
error(
"region2rect: invalid 'rec'.");
1695 for(
i=0;
i<reg_size;
i++)
1702 if( sum <= 0.0 )
error(
"region2rect: weights sum equal to zero.");
1707 theta =
get_theta(reg,reg_size,
x,y,modgrad,reg_angle,prec);
1723 l_min = l_max = w_min = w_max = 0.0;
1724 for(
i=0;
i<reg_size;
i++)
1729 if( l > l_max ) l_max = l;
1730 if( l < l_min ) l_min = l;
1731 if( w > w_max ) w_max = w;
1732 if( w < w_min ) w_min = w;
1736 rec->
x1 =
x + l_min * dx;
1737 rec->
y1 = y + l_min * dy;
1738 rec->
x2 =
x + l_max * dx;
1739 rec->
y2 = y + l_max * dy;
1740 rec->
width = w_max - w_min;
1764 int * reg_size,
double * reg_angle,
image_char used,
1771 if(
x < 0 || y < 0 || x >= (
int) angles->
xsize || y >= (
int) angles->
ysize )
1772 error(
"region_grow: (x,y) out of the image.");
1773 if( angles == NULL || angles->
data == NULL )
1774 error(
"region_grow: invalid image 'angles'.");
1775 if( reg == NULL )
error(
"region_grow: invalid 'reg'.");
1776 if( reg_size == NULL )
error(
"region_grow: invalid pointer 'reg_size'.");
1777 if( reg_angle == NULL )
error(
"region_grow: invalid pointer 'reg_angle'.");
1778 if( used == NULL || used->
data == NULL )
1779 error(
"region_grow: invalid image 'used'.");
1785 *reg_angle = angles->
data[
x+y*angles->
xsize];
1786 sumdx = cos(*reg_angle);
1787 sumdy = sin(*reg_angle);
1791 for(
i=0;
i<*reg_size;
i++)
1792 for(xx=reg[
i].
x-1; xx<=reg[
i].
x+1; xx++)
1793 for(yy=reg[
i].y-1; yy<=reg[
i].
y+1; yy++)
1794 if( xx>=0 && yy>=0 && xx<(
int)used->
xsize && yy<(
int)used->
ysize &&
1796 isaligned(xx,yy,angles,*reg_angle,prec) )
1800 reg[*reg_size].
x = xx;
1801 reg[*reg_size].
y = yy;
1805 sumdx += cos( angles->
data[xx+yy*angles->
xsize] );
1806 sumdy += sin( angles->
data[xx+yy*angles->
xsize] );
1807 *reg_angle = atan2(sumdy,sumdx);
1816 double logNT,
double log_eps )
1848 if( (
r.width -
delta) >= 0.5 )
1866 if( (
r.width -
delta) >= 0.5 )
1888 if( (
r.width -
delta) >= 0.5 )
1938 if(
reg ==
NULL )
error(
"reduce_region_radius: invalid pointer 'reg'.");
1940 error(
"reduce_region_radius: invalid pointer 'reg_size'.");
1941 if(
prec < 0.0 )
error(
"reduce_region_radius: 'prec' must be positive.");
1942 if(
rec ==
NULL )
error(
"reduce_region_radius: invalid pointer 'rec'.");
1944 error(
"reduce_region_radius: invalid image 'used'.");
1946 error(
"reduce_region_radius: invalid image 'angles'.");
2014 if(
reg ==
NULL )
error(
"refine: invalid pointer 'reg'.");
2016 if(
prec < 0.0 )
error(
"refine: 'prec' must be positive.");
2017 if(
rec ==
NULL )
error(
"refine: invalid pointer 'rec'.");
2019 error(
"refine: invalid image 'used'.");
2021 error(
"refine: invalid image 'angles'.");
2089 double * img,
int X,
int Y,
2106 unsigned int xsize,ysize;
2112 if( img ==
NULL ||
X <= 0 || Y <= 0 )
error(
"invalid image input.");
2113 if( scale <= 0.0 )
error(
"'scale' value must be positive.");
2115 if(
quant < 0.0 )
error(
"'quant' value must be positive.");
2117 error(
"'ang_th' value must be in the range (0,180).");
2119 error(
"'density_th' value must be in the range [0,1].");
2120 if(
n_bins <= 0 )
error(
"'n_bins' value must be positive.");
2157 logNT = 5.0 * (
log10( (
double) xsize ) +
log10( (
double) ysize ) ) / 2.0
2212 rec.x1 += 0.5;
rec.y1 += 0.5;
2213 rec.x2 += 0.5;
rec.y2 += 0.5;
2218 rec.x1 /= scale;
rec.y1 /= scale;
2219 rec.x2 /= scale;
rec.y2 /= scale;
2251 error(
"region image to big to fit in INT sizes.");
2261 error(
"too many detections to fit in an INT.");
2276 double * img,
int X,
int Y,
double scale,
2298static double *
lsd_scale(
int *
n_out,
double * img,
int X,
int Y,
double scale)
2306static double *
lsd(
int *
n_out,
double * img,
int X,
int Y)
2324#undef RELATIVE_ERROR_FACTOR
static image_int new_image_int(unsigned int xsize, unsigned int ysize)
Definition ashift_lsd.c:466
static ntuple_list new_ntuple_list(unsigned int dim)
Definition ashift_lsd.c:304
static void region2rect(struct point *reg, int reg_size, image_double modgrad, double reg_angle, double prec, double p, struct rect *rec)
Definition ashift_lsd.c:1670
static double get_theta(struct point *reg, int reg_size, double x, double y, image_double modgrad, double reg_angle, double prec)
Definition ashift_lsd.c:1627
static double * LineSegmentDetection(int *n_out, double *img, int X, int Y, double scale, double sigma_scale, double quant, double ang_th, double log_eps, double density_th, int n_bins, int **reg_img, int *reg_x, int *reg_y)
Definition ashift_lsd.c:2088
#define NOTDEF
Definition ashift_lsd.c:166
static double dist(double x1, double y1, double x2, double y2)
Definition ashift_lsd.c:250
static void enlarge_ntuple_list(ntuple_list n_tuple)
Definition ashift_lsd.c:330
static int ri_end(rect_iter *i)
Definition ashift_lsd.c:1384
static void region_grow(int x, int y, image_double angles, struct point *reg, int *reg_size, double *reg_angle, image_char used, double prec)
Definition ashift_lsd.c:1763
static void free_ntuple_list(ntuple_list in)
Definition ashift_lsd.c:292
static image_double ll_angle(image_double in, double threshold, struct coorlist **list_p, void **mem_p, image_double *modgrad, unsigned int n_bins)
Definition ashift_lsd.c:795
struct image_double_s * image_double
static double angle_diff(double a, double b)
Definition ashift_lsd.c:974
static double log_gamma_windschitl(double x)
Definition ashift_lsd.c:1057
static image_double gaussian_sampler(image_double in, double scale, double sigma_scale)
Definition ashift_lsd.c:654
static image_char new_image_char(unsigned int xsize, unsigned int ysize)
Definition ashift_lsd.c:406
#define RELATIVE_ERROR_FACTOR
Definition ashift_lsd.c:211
static rect_iter * ri_ini(struct rect *r)
Definition ashift_lsd.c:1470
static image_int new_image_int_ini(unsigned int xsize, unsigned int ysize, int fill_value)
Definition ashift_lsd.c:490
static double rect_improve(struct rect *rec, image_double angles, double logNT, double log_eps)
Definition ashift_lsd.c:1815
#define TABSIZE
Definition ashift_lsd.c:1073
static void add_7tuple(ntuple_list out, double v1, double v2, double v3, double v4, double v5, double v6, double v7)
Definition ashift_lsd.c:348
static image_double new_image_double(unsigned int xsize, unsigned int ysize)
Definition ashift_lsd.c:532
static void gaussian_kernel(ntuple_list kernel, double sigma, double mean)
Definition ashift_lsd.c:591
struct ntuple_list_s * ntuple_list
struct image_int_s * image_int
static int refine(struct point *reg, int *reg_size, image_double modgrad, double reg_angle, double prec, double p, struct rect *rec, image_char used, image_double angles, double density_th)
Definition ashift_lsd.c:2006
#define NOTUSED
Definition ashift_lsd.c:175
static void rect_copy(struct rect *in, struct rect *out)
Definition ashift_lsd.c:1242
static double rect_nfa(struct rect *rec, image_double angles, double logNT)
Definition ashift_lsd.c:1541
#define M_2__PI
Definition ashift_lsd.c:172
static double nfa(int n, int k, double p, double logNT)
Definition ashift_lsd.c:1134
static void error(char *msg)
Definition ashift_lsd.c:202
static image_char new_image_char_ini(unsigned int xsize, unsigned int ysize, unsigned char fill_value)
Definition ashift_lsd.c:431
static void ri_del(rect_iter *iter)
Definition ashift_lsd.c:1373
static double * inv
Definition ashift_lsd.c:1077
static void free_image_char(image_char i)
Definition ashift_lsd.c:395
static double inter_hi(double x, double x1, double y1, double x2, double y2)
Definition ashift_lsd.c:1358
#define TRUE
Definition ashift_lsd.c:162
#define FALSE
Definition ashift_lsd.c:158
static double angle_diff_signed(double a, double b)
Definition ashift_lsd.c:986
#define USED
Definition ashift_lsd.c:178
static image_double new_image_double_ptr(unsigned int xsize, unsigned int ysize, double *data)
Definition ashift_lsd.c:556
static double inter_low(double x, double x1, double y1, double x2, double y2)
Definition ashift_lsd.c:1336
struct image_char_s * image_char
static double log_gamma_lanczos(double x)
Definition ashift_lsd.c:1023
static void free_image_double(image_double i)
Definition ashift_lsd.c:521
static int double_equal(double a, double b)
Definition ashift_lsd.c:224
static int isaligned(int x, int y, image_double angles, double theta, double prec)
Definition ashift_lsd.c:936
#define M_3_2_PI
Definition ashift_lsd.c:169
static int reduce_region_radius(struct point *reg, int *reg_size, image_double modgrad, double reg_angle, double prec, double p, struct rect *rec, image_char used, image_double angles, double density_th)
Definition ashift_lsd.c:1928
static void ri_inc(rect_iter *i)
Definition ashift_lsd.c:1400
#define log_gamma(x)
Definition ashift_lsd.c:1068
static const dt_aligned_pixel_simd_t const dt_adaptation_t const float p
Definition chromatic_adaptation.h:315
static float kernel(const float *x, const float *y)
Definition colorchecker.c:469
const float i
Definition colorspaces_inline_conversions.h:669
const float h
Definition colorspaces_inline_conversions.h:1366
const float g
Definition colorspaces_inline_conversions.h:925
const float threshold
Definition colorspaces_inline_conversions.h:340
static const dt_colormatrix_t M
Definition colorspaces_inline_conversions.h:933
const float r
Definition colorspaces_inline_conversions.h:1324
const float b
Definition colorspaces_inline_conversions.h:1326
const float a
Definition colorspaces_inline_conversions.h:1292
static const dt_colormatrix_t dt_aligned_pixel_t out
Definition colorspaces_inline_conversions.h:184
const float n
Definition colorspaces_inline_conversions.h:929
const float delta
Definition colorspaces_inline_conversions.h:722
float dt_aligned_pixel_simd_t __attribute__((vector_size(16), aligned(16)))
Multi-tap smudge source sample with directional jitter.
Definition darktable.h:448
#define dt_free(ptr)
Definition darktable.h:380
static void weight(const float *c1, const float *c2, const float sharpen, dt_aligned_pixel_t weight)
Definition eaw.c:33
static const float x
Definition iop_profile.h:239
#define M_LN10
Definition math.h:40
#define M_PI
Definition math.h:45
#define N
Definition noiseprofile.c:159
Definition ashift_lsd.c:184
int x
Definition ashift_lsd.c:185
int y
Definition ashift_lsd.c:185
struct coorlist * next
Definition ashift_lsd.c:186
Definition ashift_lsd.c:387
unsigned int xsize
Definition ashift_lsd.c:389
unsigned int ysize
Definition ashift_lsd.c:389
unsigned char * data
Definition ashift_lsd.c:388
Definition ashift_lsd.c:513
unsigned int xsize
Definition ashift_lsd.c:515
unsigned int ysize
Definition ashift_lsd.c:515
double * data
Definition ashift_lsd.c:514
Definition ashift_lsd.c:458
unsigned int xsize
Definition ashift_lsd.c:460
unsigned int ysize
Definition ashift_lsd.c:460
int * data
Definition ashift_lsd.c:459
Definition ashift_lsd.c:282
unsigned int dim
Definition ashift_lsd.c:285
unsigned int size
Definition ashift_lsd.c:283
double * values
Definition ashift_lsd.c:286
unsigned int max_size
Definition ashift_lsd.c:284
Definition ashift_lsd.c:192
int y
Definition ashift_lsd.c:192
int x
Definition ashift_lsd.c:192
Definition ashift_lsd.c:1319
int x
Definition ashift_lsd.c:1323
double ye
Definition ashift_lsd.c:1322
Definition ashift_lsd.c:1229
double dx
Definition ashift_lsd.c:1234
double theta
Definition ashift_lsd.c:1233
double dy
Definition ashift_lsd.c:1234
double y2
Definition ashift_lsd.c:1230
double x1
Definition ashift_lsd.c:1230
double x2
Definition ashift_lsd.c:1230
double y1
Definition ashift_lsd.c:1230
double p
Definition ashift_lsd.c:1236
double x
Definition ashift_lsd.c:1232
double width
Definition ashift_lsd.c:1231
double prec
Definition ashift_lsd.c:1235
double y
Definition ashift_lsd.c:1232
typedef double((*spd)(unsigned long int wavelength, double TempK))