2 # mrcImageEdgeImageGet : $Revision$
5 # Usage : mrcImageEdgeImageGet
15 #define GLOBAL_DECLARATION
16 #include "../inc/config.h"
21 #include "eosString.h"
24 typedef struct lmrcImageEdgeImageGetInfo {
27 } lmrcImageEdgeImageGetInfo;
29 typedef enum lmrcImageEdgeImageGetMode {
30 lmrcImageEdgeImageGetModeFour=0,
31 lmrcImageEdgeImageGetModeNine=1
32 } lmrcImageEdgeImageGetMode;
34 extern void lmrcImageEdgeImageGet(
37 lmrcImageEdgeImageGetInfo* linfo,
38 lmrcImageEdgeImageGetMode mode
41 extern void lmrcImageEdgeImageGetFour(
44 lmrcImageEdgeImageGetInfo* linfo,
45 lmrcImageEdgeImageGetMode mode
48 extern void lmrcImageEdgeImageGetNine (
51 lmrcImageEdgeImageGetInfo* linfo,
52 lmrcImageEdgeImageGetMode mode
55 extern void lmrcImageEdgeImageGetInit(
58 lmrcImageEdgeImageGetInfo* linfo,
59 lmrcImageEdgeImageGetMode mode
63 main(int argc, char* argv[])
65 mrcImageEdgeImageGetInfo info;
66 lmrcImageEdgeImageGetInfo linfo;
71 char filename[STRING_MAX_LENGTH];
74 argCheck(&info, argc, argv);
77 DEBUGPRINT("Program Start\n");
78 linfo.Size = info.Size;
80 mrcFileRead(&in, info.In, "in main", 0);
82 DEBUGPRINT2("%p %p\n", &out, out);
83 lmrcImageEdgeImageGet(&in, &out, &linfo, info.mode);
84 DEBUGPRINT2("%p %p\n", &out, out);
86 DEBUGPRINT1("numImage: %d\n", linfo.numImage);
87 DEBUGPRINT1("out: %p\n", out);
88 for(i=0; i<linfo.numImage; i++) {
89 sprintf(filename, "%s.%03d", info.Out, i);
91 DEBUGPRINT2("out[%03d]: %d\n", i, out[i].HeaderMode);
92 mrcFileWrite(&(out[i]), filename, "in main", 0);
100 fprintf(stderr, "----- Additional Usage -----\n");
101 fprintf(stderr, "mode: \n");
102 fprintf(stderr, " %4d: 4 Edge (x-y plane) from Image(0-3)\n", lmrcImageEdgeImageGetModeFour);
103 fprintf(stderr, " %4d: 8 Edge (x-y plane) + centre from Image(0-8)\n", lmrcImageEdgeImageGetModeNine);
108 lmrcImageEdgeImageGet(mrcImage* in, mrcImage** out, lmrcImageEdgeImageGetInfo* linfo, lmrcImageEdgeImageGetMode mode)
110 DEBUGPRINT1("lmrcImageEdgeImageGet Mode: %d\n", mode);
112 case lmrcImageEdgeImageGetModeFour: {
113 lmrcImageEdgeImageGetFour(in, out, linfo, mode);
116 case lmrcImageEdgeImageGetModeNine: {
117 lmrcImageEdgeImageGetNine(in, out, linfo, mode);
121 fprintf(stderr, "Not supported Mode: %d\n", mode);
128 lmrcImageEdgeImageGetInit(mrcImage* in, mrcImage** out, lmrcImageEdgeImageGetInfo* linfo, lmrcImageEdgeImageGetMode mode)
133 DEBUGPRINT1("numImage: %d\n", linfo->numImage);
134 DEBUGPRINT2("p: %p %p\n", out, *out);
135 *out = (mrcImage*)memoryAllocate(sizeof(mrcImage)*linfo->numImage, "in lmrcImageEdgeImageGetInit");
136 DEBUGPRINT2("p: %p %p\n", out, *out);
138 DEBUGPRINT3("p: out %p *out %p pout %p\n", out, *out, pout);
139 for(i=0; i<linfo->numImage; i++) {
140 DEBUGPRINT3("p: out %p *out %p pout %p\n", out, *out, pout);
141 mrcDefaultHeaderValueSet(&(pout[i]));
142 pout[i].HeaderN.x = MIN(in->HeaderN.x, linfo->Size);
143 pout[i].HeaderN.y = MIN(in->HeaderN.y, linfo->Size);
144 pout[i].HeaderN.z = MIN(in->HeaderN.z, linfo->Size);
145 pout[i].HeaderMode = in->HeaderMode;
146 DEBUGPRINT1("%d\n", pout[i].HeaderMode);
147 DEBUGPRINT4("%d: %d %d %d\n", i, in->HeaderN.x, in->HeaderN.y, in->HeaderN.z);
148 DEBUGPRINT4("%d: %d %d %d\n", i, pout[i].HeaderN.x, pout[i].HeaderN.y, pout[i].HeaderN.z);
149 mrcInit(&(pout[i]), NULL);
154 lmrcImageEdgeImageGetFour(mrcImage* in, mrcImage** out, lmrcImageEdgeImageGetInfo* linfo, lmrcImageEdgeImageGetMode mode)
156 mrcImageParaTypeReal srcx, srcy, srcz;
157 mrcImageParaTypeReal dstx, dsty, dstz;
158 mrcImageParaTypeReal offsetx, offsety, offsetz;
165 lmrcImageEdgeImageGetInit(in, out, linfo, mode);
168 DEBUGPRINT("ROI Get \n");
169 for(i=0; i<linfo->numImage; i++) {
170 DEBUGPRINT2("i: %d p: %p\n", i, &(pout[i]));
172 for(i=0; i<linfo->numImage; i++) {
173 DEBUGPRINT2("i: %d p: %p\n", i, &(pout[i]));
174 offsetx = (i%2)?MAX(in->HeaderN.x - linfo->Size, 0):(0);
175 offsety = (i/2)?MAX(in->HeaderN.y - linfo->Size, 0):(0);
176 offsetz = MAX(pout[i].HeaderN.z, pout[i].HeaderN.z/2 - linfo->Size/2);
178 DEBUGPRINT1("%d\n", out[i]->HeaderMode);
179 DEBUGPRINT4("%d: %d %d %d\n", i, pout[i].HeaderN.x, pout[i].HeaderN.y, pout[i].HeaderN.z);
181 for(dstz=0; dstz<pout[i].HeaderN.z; dstz++) {
182 for(dsty=0; dsty<pout[i].HeaderN.y; dsty++) {
183 for(dstx=0; dstx<pout[i].HeaderN.x; dstx++) {
184 srcx = offsetx + dstx;
185 srcy = offsety + dsty;
186 srcz = offsetz + dstz;
187 mrcPixelDataGet(in, srcx, srcy, srcz, &data, mrcPixelRePart, mrcPixelHowNearest);
188 mrcPixelDataSet(&(pout[i]), dstx, dsty, dstz, data, mrcPixelRePart);
196 lmrcImageEdgeImageGetNine(mrcImage* in, mrcImage** out, lmrcImageEdgeImageGetInfo* linfo, lmrcImageEdgeImageGetMode mode)
198 mrcImageParaTypeReal srcx, srcy, srcz;
199 mrcImageParaTypeReal dstx, dsty, dstz;
200 mrcImageParaTypeReal offsetx, offsety, offsetz;
207 lmrcImageEdgeImageGetInit(in, out, linfo, mode);
210 DEBUGPRINT("ROI Get \n");
211 for(i=0; i<linfo->numImage; i++) {
217 offsetx = MAX((in->HeaderN.x - linfo->Size)/2, 0);
220 offsetx = MAX( in->HeaderN.x - linfo->Size, 0);
224 fprintf(stderr, "Something wrong: mod(%d,3)=%d \n", i, i%3);
232 offsety = MAX((in->HeaderN.y - linfo->Size)/2, 0);
235 offsety = MAX( in->HeaderN.y - linfo->Size, 0);
239 fprintf(stderr, "Something wrong: %d/3=%d\n", i, i/3);
243 offsetz = MAX(pout[i].HeaderN.z, pout[i].HeaderN.z/2 - linfo->Size/2);
245 DEBUGPRINT1("%d\n", pout[i].HeaderMode);
246 DEBUGPRINT4("%d: %d %d %d\n", i, pout[i].HeaderN.x, pout[i].HeaderN.y, pout[i].HeaderN.z);
248 for(dstz=0; dstz<pout[i].HeaderN.z; dstz++) {
249 for(dsty=0; dsty<pout[i].HeaderN.y; dsty++) {
250 for(dstx=0; dstx<pout[i].HeaderN.x; dstx++) {
251 srcx = offsetx + dstx;
252 srcy = offsety + dsty;
253 srcz = offsetz + dstz;
254 mrcPixelDataGet(in, srcx, srcy, srcz, &data, mrcPixelRePart, mrcPixelHowNearest);
255 mrcPixelDataSet(&(pout[i]), dstx, dsty, dstz, data, mrcPixelRePart);