Changeset 1693
- Timestamp:
- Sep 6, 2004, 2:52:16 PM (22 years ago)
- Location:
- trunk/doc/pslib
- Files:
-
- 3 edited
-
ChangeLogSDRS.tex (modified) (1 diff)
-
psLibADD.tex (modified) (6 diffs)
-
psLibSDRS.tex (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/doc/pslib/ChangeLogSDRS.tex
r1691 r1693 255 255 arbitrary direction, instead of merging the data along a particular 256 256 dimension. 257 \item added \code{psVector *coords} to the API for \code{psImageCut}. 257 258 \item Added \code{psLibVersion} (bug 156). 258 259 \item Added specification of iterator to \code{psMetadataSetIterator}. -
trunk/doc/pslib/psLibADD.tex
r1689 r1693 1 %%% $Id: psLibADD.tex,v 1.3 7 2004-09-03 21:05:42 price Exp $1 %%% $Id: psLibADD.tex,v 1.38 2004-09-07 00:52:16 eugene Exp $ 2 2 \documentclass[panstarrs]{panstarrs} 3 3 … … 1065 1065 (5,5). 1066 1066 1067 \subparagraph{ BilinearInterpolation ({\tt PS\_RESAMPLE\_SINC})}1068 1069 \subparagraph{ BilinearInterpolation ({\tt PS\_RESAMPLE\_LAGRANGE})}1067 \subparagraph{Sinc Interpolation ({\tt PS\_RESAMPLE\_SINC})} 1068 1069 \subparagraph{Lagrange Interpolation ({\tt PS\_RESAMPLE\_LAGRANGE})} 1070 1070 1071 1071 \paragraph{Image Cuts and Slices} … … 1109 1109 sum is renormalized by the ratio (12.57/16.00). 1110 1110 1111 \subparagraph{Radial Cuts} 1112 1113 Consider an image with pixels $x_i,y_i$ and a reference coordinate 1114 $x_c, y_c$. We want to construct a radial cut by measuring statistics 1115 for pixels in a sequence of radial annulii $r_s < r < r_e$. For each 1116 annulus, we need to select the pixels which fall within this annulus. 1117 The coordinates of the center of pixel $i,j$ are $i+0.5,j+0.5$. A 1118 given pixel has a distance from the reference coordinate of $dX = x_c 1119 - i - 0.5, dY = y_c - j - 0.5$. The pixels to be used for a given 1120 radial annulus are all of those pixels for which $r_s < \sqrt{dX^2 + 1121 dY^2} < r_e$. This is more efficiently calculated by comparing the 1122 square of the radii and distances. All pixels which satisfy the above 1123 condition are included in a specific annular radius. All average 1124 quantities are calculated directly from the pixel ensemble 1125 statistics. 1126 1127 \subparagraph{Arbitrary Linear Cuts} 1128 1129 Select the pixels which lie along a line following steps of 1 pixel 1130 length: 1131 1132 \begin{verbatim} 1133 1134 dX = xe - xs; 1135 dY = ye - ys; 1136 L = hypot (dX, dY); 1137 dX = dX / L; 1138 dY = dY / L; 1139 1140 REALLOCATE (xvec[0].elements, float, MAX (L, 1)); 1141 REALLOCATE (yvec[0].elements, float, MAX (L, 1)); 1142 xvec[0].Nelements = L; 1143 yvec[0].Nelements = L; 1144 1145 V = (float *)buf[0].matrix.buffer; 1146 for (i = 0; i < L; i++) { 1147 xi = xs + i*dX - 0.5; 1148 yi = ys + i*dY - 0.5; 1149 xvec[0].elements[i] = i; 1150 yvec[0].elements[i] = V[xi + Nx*yi]; 1151 } 1152 \end{verbatim} 1153 1111 1154 \paragraph{Image Rotation} 1112 1155 … … 1157 1200 % 1158 1201 \begin{eqnarray} 1159 \sin \theta =\sin \delta \cos \delta_p - \cos \delta \sin \delta_p \sin (\alpha - \alpha_p)1160 \cos \theta \sin (\phi - \phi_p) =\cos \delta \cos \delta_p \sin (\alpha - \alpha_p) + \sin \delta \sin \delta_p1161 \cos \theta \cos (\phi - \phi_p) =\cos \delta \cos (\alpha - \alpha_p)1202 \sin \theta & = & \sin \delta \cos \delta_p - \cos \delta \sin \delta_p \sin (\alpha - \alpha_p) 1203 \cos \theta \sin (\phi - \phi_p) & = & \cos \delta \cos \delta_p \sin (\alpha - \alpha_p) + \sin \delta \sin \delta_p 1204 \cos \theta \cos (\phi - \phi_p) & = & \cos \delta \cos (\alpha - \alpha_p) 1162 1205 \end{eqnarray} 1163 1206 % … … 1403 1446 \subsubsection{Offset} 1404 1447 1405 Coordinate offsets can either spherical offsets or linear offsets.1448 Coordinate offsets can be either spherical offsets or linear offsets. 1406 1449 1407 1450 A spherical offset is performed by adding the components of the … … 1542 1585 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1543 1586 1544 \subsubsection{Offsets} 1545 1546 \tbd{write down Offset calculation (from Bugzilla)} 1547 \tbd{define RadialCut} 1548 \tbd{define ImageCut} 1549 \tbd{define SINC, BICUBIC interpolation} 1587 \subsubsection{Missing and Todo} 1588 1589 \tbd{define SINC, LAGRANGE interpolation} 1590 1550 1591 \tbd{define sunrise, sunset, sun position} 1592 1551 1593 \tbd{define moonrise, moonset, moon position, moon phase} 1594 1552 1595 \tbd{define planet functions} 1553 \tbd{clean up psProjections} 1596 1554 1597 \tbd{clean up FITS I/O issues} 1598 1555 1599 \tbd{define Brent's method \& minimization bracketing} 1556 1600 -
trunk/doc/pslib/psLibSDRS.tex
r1692 r1693 1 %%% $Id: psLibSDRS.tex,v 1.10 8 2004-09-04 04:29:14 price Exp $1 %%% $Id: psLibSDRS.tex,v 1.109 2004-09-07 00:52:16 eugene Exp $ 2 2 \documentclass[panstarrs,spec]{panstarrs} 3 3 … … 2341 2341 2342 2342 \begin{verbatim} 2343 psImage *psImageSubsection( constpsImage *image, const char *section);2343 psImage *psImageSubsection(psImage *image, const char *section); 2344 2344 \end{verbatim} 2345 2345 Similar to \code{psImageSubset}, but uses an image \code{section}, of … … 2364 2364 2365 2365 \begin{verbatim} 2366 psImage *psImageTrim(psImage *image, int x0, int x1, int y0, int y1);2366 psImage *psImageTrim(psImage *image, int x0, int y0, int x1, int y1); 2367 2367 \end{verbatim} 2368 2368 Trim the specified \code{image} in-place, which involves shuffling the … … 2418 2418 2419 2419 \begin{verbatim} 2420 psVector *psImageCut(psVector *out, const psImage *input, 2421 const psImage *mask, unsigned int maskVal, 2422 float xs, float ys, float xe, float ye, 2423 unsigned int nSamples, psImageInterpolateMode mode); 2424 \end{verbatim} 2425 Extract pixels along a line segment, \code{(xs,ys)} to \code{(xe,ye)}, 2426 on the image to a vector (array of the appropriate data type). The 2427 line segment is sampled \code{nSamples} times, hence the output vector 2428 contains \code{nSamples} elements. The interpolation method used to 2429 derive the output vector value at each sample along the line segment 2430 is specified by \code{mode}. If the \code{mask} is non-\code{NULL}, 2431 then pixels for which the corresponding mask value is \code{maskVal} 2432 are not included in the interpolation. This function must be defined 2433 for the following types: \code{psS8}, \code{psU16}, \code{psF32}, 2420 psVector *psImageCut(psVector *out, 2421 psVector *coords, 2422 const psImage *input, 2423 const psImage *mask, 2424 unsigned int maskVal, 2425 float x0, 2426 float y0, 2427 float x1, 2428 float y1, 2429 unsigned int nSamples, 2430 psImageInterpolateMode mode); 2431 \end{verbatim} 2432 Extract pixels along a line segment, \code{(x0,y0)} to \code{(x1,y1)}, 2433 on the image to a vector of the same data type. The line segment is 2434 sampled \code{nSamples} times, hence the output vector contains 2435 \code{nSamples} elements. The interpolation method used to derive the 2436 output vector value at each sample along the line segment is specified 2437 by \code{mode}. If the \code{mask} is non-\code{NULL}, then pixels 2438 for which the corresponding mask value is \code{maskVal} are not 2439 included in the interpolation. This function must be defined for the 2440 following types: \code{psS8}, \code{psU16}, \code{psF32}, 2434 2441 \code{psF64}. 2435 2442 2436 2443 \begin{verbatim} 2437 psVector *psImageRadialCut(psVector *out, const psImage *input, 2444 psVector *psImageRadialCut(psVector *out, 2445 const psImage *input, 2438 2446 const psImage *mask, 2439 2447 unsigned int maskVal, 2440 float x, float y, 2441 const psVector *radii, const psStats *stats); 2448 float x, 2449 float y, 2450 const psVector *radii, 2451 const psStats *stats); 2442 2452 \end{verbatim} 2443 2453 Extract radial region data to a vector. A vector is constructed where … … 2612 2622 is specified by \code{x0,y0}, while the upper right-hand corner of the 2613 2623 requested region is specified by \code{x1,y1}. A negative value for 2614 either of \code{x1} or \code{y 2} specifies the size of the region to2624 either of \code{x1} or \code{y1} specifies the size of the region to 2615 2625 be read counting down from the end of the array. 2616 2626 … … 3395 3405 The \code{psMetadataAdd} routine is required to check that all 3396 3406 metadata names are unique unless the type is already qualified as 3397 \code{PS_META_ NON_UNIQUE}; in this case the data are added to the3407 \code{PS_META_ITEM_SET}; in this case the data are added to the 3398 3408 corresponding \code{psMetadataItem.items} list. 3399 3409 … … 3440 3450 Care should be taken not to leak memory when appending an item for 3441 3451 which the key already exists in the metadata (and is not 3442 \code{PS_META_ NON_UNIQUE}).3452 \code{PS_META_ITEM_SET}). 3443 3453 % 3444 3454 \begin{verbatim} … … 4036 4046 4037 4047 \end{document} 4038 4039 4040 An example of the usage of the metadata APIs is as follows:4041 \begin{verbatim}4042 for (int i = 0; i < 10; i += 5) {4043 float sqrti = sqrt(i);4044 psMetadataAdd(ms, PS_LIST_TAIL, psMetadataItemAlloc(PS_META_INT, &i, NULL, "const.%d", i));4045 psMetadataAdd(ms, PS_LIST_TAIL, psMetadataItemAlloc(PS_META_FLOAT, &sqrti,4046 "square root", "const.sqrt%d", i));4047 }4048 psMetadataAdd(ms, psMetadataItemAlloc(PS_META_STR, "Bonjour", "French", "lang.hello"));4049 /*4050 * Remove a key4051 */4052 psMetadataItemFree(psMetadataRemove(ms, PS_LIST_UNKNOWN, "lang.hello"));4053 /*4054 * Print all metadata4055 */4056 fprintf(stdout, "------\n");4057 psMetadataSetIterator(ms, 1, PS_LIST_HEAD);4058 while ((meta = psMetadataGetNext(ms, NULL, 1)) != NULL) {4059 psMetadataItemPrint(stdout, meta, "");4060 }4061 /*4062 * Look up a key by name4063 */4064 fprintf(stdout, "------\n");4065 fprintf(stdout, "Looking up by name:\n");4066 meta = psMetadataLookup(ms, "const.5");4067 if (meta != NULL) {4068 psMetadataItemPrint(stdout, meta, "");4069 }4070 \end{verbatim}4071 4072 \subsubsection{Naming convention for Metadata}4073 4074 The \code{psMetadataItem} struct includes a name. This name should be of4075 the form \code{name1.name2.name3}$\cdots$, e.g.\hfil\break4076 \null\qquad\qquad\code{IPP.phase1.ota12.biassec}.4077 4078 We must set in place a system for assigning the top-level `domains'4079 to responsible individuals, and for gathering a complete list of4080 all metadata names in use throughout the project.4081 4082 \paragraph{Support for Multiple Values for a Given Name}4083 4084 \begin{verbatim}4085 psMetadataAdd(ms, PS_LIST_UNKNOWN, psMetadataItemAlloc(PS_META_STR | PS_META_NON_UNIQUE,4086 "Bonjour", "French", "lang.hello"));4087 psMetadataAdd(ms, PS_LIST_UNKNOWN, psMetadataItemAlloc(PS_META_STR | PS_META_NON_UNIQUE,4088 "Aloha", "Hawaiian", "lang.hello"));4089 psMetadataAdd(ms, PS_LIST_UNKNOWN, psMetadataItemAlloc(PS_META_STR | PS_META_NON_UNIQUE,4090 "Good Morning", "English", "lang.hello"));4091 /*4092 * Print all metadata starting "lang"4093 */4094 psMetadataSetIterator(ms, 2, PS_LIST_HEAD);4095 while ((meta = psMetadataGetNext(ms, "lang", 2)) != NULL) {4096 psMetadataItemPrint(stdout, meta, "");4097 }4098 \end{verbatim}
Note:
See TracChangeset
for help on using the changeset viewer.
