Changeset 41340 for trunk/Ohana/src/opihi/cmd.data/medimage_commands.c
- Timestamp:
- Apr 16, 2020, 1:54:47 PM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/opihi/cmd.data/medimage_commands.c
r41164 r41340 15 15 int medimage_add (int argc, char **argv) { 16 16 17 int N;18 17 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 } 26 27 if (argc != 3) { 28 gprint (GP_ERR, "USAGE: medimage add (name) (image) [-variance variance]\n"); 18 19 if (argc != 3) { 20 gprint (GP_ERR, "USAGE: medimage add (name) (image)\n"); 29 21 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");31 22 return FALSE; 32 23 } 33 24 34 25 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 }43 26 44 27 MedImageType *median = FindMedImage (argv[1]); … … 63 46 // new image should match existing medimage dimensions 64 47 65 // AddMedImage (median, image, var);66 48 int Ninput = median->Ninput; 67 49 median->Ninput ++; 68 REALLOCATE (median->flx, float *, median->Ninput); 69 REALLOCATE (median->var, float *, median->Ninput); 70 71 ALLOCATE (median->flx[Ninput], float, median->Nx*median->Ny); 72 memcpy (median->flx[Ninput], image->matrix.buffer, sizeof(float)*median->Nx*median->Ny); 73 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); 50 REALLOCATE (median->buffers, float *, median->Ninput); 51 52 ALLOCATE (median->buffers[Ninput], float, median->Nx*median->Ny); 53 memcpy (median->buffers[Ninput], image->matrix.buffer, sizeof(float)*median->Nx*median->Ny); 54 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 } 78 120 } 79 121 … … 82 124 83 125 /* 84 int medimage_save (int argc, char **argv) {85 86 int N;87 88 int APPEND = FALSE;89 if ((N = get_argument (argc, argv, "-append"))) {90 APPEND = TRUE;91 remove_argument (N, &argc, argv);92 }93 94 if (argc != 3) {95 gprint (GP_ERR, "USAGE: medimage save (name) (filename) [-append]\n");96 return FALSE;97 }98 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 }105 106 int medimage_load (int argc, char **argv) {107 108 if (argc != 3) {109 gprint (GP_ERR, "USAGE: medimage load (name) (filename)\n");110 return FALSE;111 }112 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 }126 int medimage_save (int argc, char **argv) { 127 128 int N; 129 130 int APPEND = FALSE; 131 if ((N = get_argument (argc, argv, "-append"))) { 132 APPEND = TRUE; 133 remove_argument (N, &argc, argv); 134 } 135 136 if (argc != 3) { 137 gprint (GP_ERR, "USAGE: medimage save (name) (filename) [-append]\n"); 138 return FALSE; 139 } 140 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 } 147 148 int medimage_load (int argc, char **argv) { 149 150 if (argc != 3) { 151 gprint (GP_ERR, "USAGE: medimage load (name) (filename)\n"); 152 return FALSE; 153 } 154 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 } 119 161 */ 120 162
Note:
See TracChangeset
for help on using the changeset viewer.
