Changeset 41341 for trunk/Ohana/src/opihi/cmd.data/medimage_commands.c
- Timestamp:
- Apr 16, 2020, 2:04:27 PM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/opihi/cmd.data/medimage_commands.c
r41340 r41341 15 15 int medimage_add (int argc, char **argv) { 16 16 17 int N; 17 18 Buffer *image; 19 Buffer *var = NULL; 20 21 if ((N = get_argument (argc, argv, "-variance"))) { 22 remove_argument (N, &argc, argv); 23 if ((var = SelectBuffer (argv[N], OLDBUFFER, TRUE)) == NULL) return (FALSE); 24 remove_argument (N, &argc, argv); 25 } 18 26 19 27 if (argc != 3) { 20 gprint (GP_ERR, "USAGE: medimage add (name) (image) \n");28 gprint (GP_ERR, "USAGE: medimage add (name) (image) [-variance variance]\n"); 21 29 gprint (GP_ERR, " add the given image to the set of images to be medianed\n"); 30 gprint (GP_ERR, " optionally supply variance image (for weighted calculations)\n"); 22 31 return FALSE; 23 32 } 24 33 25 34 if ((image = SelectBuffer (argv[2], OLDBUFFER, TRUE)) == NULL) return (FALSE); 35 36 if (var) { 37 if ((var->matrix.Naxis[0] != image->matrix.Naxis[0]) || 38 (var->matrix.Naxis[1] != image->matrix.Naxis[1])) { 39 gprint (GP_ERR, "variance buffer does not match image buffer dimensions\n"); 40 return FALSE; 41 } 42 } 26 43 27 44 MedImageType *median = FindMedImage (argv[1]); … … 46 63 // new image should match existing medimage dimensions 47 64 65 // AddMedImage (median, image, var); 48 66 int Ninput = median->Ninput; 49 67 median->Ninput ++; 50 REALLOCATE (median->buffers, float *, median->Ninput); 68 REALLOCATE (median->flx, float *, median->Ninput); 69 REALLOCATE (median->var, float *, median->Ninput); 51 70 52 ALLOCATE (median-> buffers[Ninput], float, median->Nx*median->Ny);53 memcpy (median-> buffers[Ninput], image->matrix.buffer, sizeof(float)*median->Nx*median->Ny);71 ALLOCATE (median->flx[Ninput], float, median->Nx*median->Ny); 72 memcpy (median->flx[Ninput], image->matrix.buffer, sizeof(float)*median->Nx*median->Ny); 54 73 55 return TRUE; 56 } 57 58 int medimage_calc (int argc, char **argv) { 59 60 int ix, iy, n, N; 61 Buffer *output; 62 63 int CALC_MEAN = FALSE; 64 if ((N = get_argument (argc, argv, "-mean"))) { 65 CALC_MEAN = TRUE; 66 remove_argument (N, &argc, argv); 67 } 68 69 if (argc != 3) { 70 gprint (GP_ERR, "USAGE: medimage calc (name) (output) [-mean]\n"); 71 gprint (GP_ERR, " calculate the median image for the median image set\n"); 72 return FALSE; 73 } 74 75 MedImageType *median = FindMedImage (argv[1]); 76 if (!median) { 77 gprint (GP_ERR, "median image %s not found\n", argv[1]); 78 return FALSE; 79 } 80 81 if ((output = SelectBuffer (argv[2], ANYBUFFER, TRUE)) == NULL) return (FALSE); 82 83 int Ninput = median->Ninput; 84 int Nx = median->Nx; 85 int Ny = median->Ny; 86 87 float *value = NULL; 88 ALLOCATE (value, float, Ninput); 89 90 gfits_free_matrix (&output->matrix); 91 gfits_free_header (&output->header); 92 if (!CreateBuffer (output, Nx, Ny, -32, 0.0, 1.0)) return FALSE; 93 94 float *outvalue = (float *) output->matrix.buffer; 95 96 for (iy = 0; iy < Ny; iy++) { 97 for (ix = 0; ix < Nx; ix++) { 98 99 int N = 0; 100 int Npix = ix + Nx*iy; 101 for (n = 0; n < Ninput; n++) { 102 float v = median->buffers[n][Npix]; 103 if (!isfinite(v)) continue; 104 value[N] = v; 105 N++; 106 } 107 if (N == 0) continue; 108 109 if (CALC_MEAN) { 110 float sum = 0.0; 111 for (n = 0; n < N; n++) { 112 sum += value[n]; 113 } 114 outvalue[Npix] = sum / (float) N; 115 } else { 116 fsort (value, N); 117 outvalue[Npix] = value[(int)(0.5*N)]; 118 } 119 } 74 median->var[Ninput] = NULL; 75 if (var) { 76 ALLOCATE (median->var[Ninput], float, median->Nx*median->Ny); 77 memcpy (median->var[Ninput], var->matrix.buffer, sizeof(float)*median->Nx*median->Ny); 120 78 } 121 79 … … 124 82 125 83 /* 126 int medimage_save (int argc, char **argv) {84 int medimage_save (int argc, char **argv) { 127 85 128 int N;86 int N; 129 87 130 int APPEND = FALSE;131 if ((N = get_argument (argc, argv, "-append"))) {132 APPEND = TRUE;133 remove_argument (N, &argc, argv);134 }88 int APPEND = FALSE; 89 if ((N = get_argument (argc, argv, "-append"))) { 90 APPEND = TRUE; 91 remove_argument (N, &argc, argv); 92 } 135 93 136 if (argc != 3) {137 gprint (GP_ERR, "USAGE: medimage save (name) (filename) [-append]\n");138 return FALSE;139 }94 if (argc != 3) { 95 gprint (GP_ERR, "USAGE: medimage save (name) (filename) [-append]\n"); 96 return FALSE; 97 } 140 98 141 if (!SaveMedImage(argv[2], argv[1], APPEND)) {142 gprint (GP_ERR, "failed to save medimage %s\n", argv[1]);143 return (FALSE);144 }145 return TRUE;146 }99 if (!SaveMedImage(argv[2], argv[1], APPEND)) { 100 gprint (GP_ERR, "failed to save medimage %s\n", argv[1]); 101 return (FALSE); 102 } 103 return TRUE; 104 } 147 105 148 int medimage_load (int argc, char **argv) {106 int medimage_load (int argc, char **argv) { 149 107 150 if (argc != 3) {151 gprint (GP_ERR, "USAGE: medimage load (name) (filename)\n");152 return FALSE;153 }108 if (argc != 3) { 109 gprint (GP_ERR, "USAGE: medimage load (name) (filename)\n"); 110 return FALSE; 111 } 154 112 155 if (!LoadMedImage(argv[2], argv[1])) {156 gprint (GP_ERR, "failed to load medimage %s\n", argv[1]);157 return (FALSE);158 }159 return TRUE;160 }113 if (!LoadMedImage(argv[2], argv[1])) { 114 gprint (GP_ERR, "failed to load medimage %s\n", argv[1]); 115 return (FALSE); 116 } 117 return TRUE; 118 } 161 119 */ 162 120
Note:
See TracChangeset
for help on using the changeset viewer.
