3 # The latest update : %G% at %U%
5 #%Z% mrcImageAbnormalValueRemove ver %I%
8 #%Z% Usage : mrcImageAbnormalValueRemove
12 static char __sccs_id[] = "%Z%mrcImageAbnormalValueRemove ver%I%; Date:%D% %Z%";
17 #define GLOBAL_DECLARATION
18 #include "../inc/config.h"
25 typedef struct lmrcImageAbnormalValueRemoveInfo {
26 float cutValueOverSigma;
31 mrcImageInformation ImageInfo;
33 } lmrcImageAbnormalValueRemoveInfo;
35 typedef enum lmrcImageAbnormalValueRemoveMode {
36 lmrcImageAbnormalValueModeDefault = 0,
37 lmrcImageAbnormalValueModeNear = 1,
38 lmrcImageAbnormalValueModeRandom = 2,
39 lmrcImageAbnormalValueModeMean = 3
40 } lmrcImageAbnormalValueRemoveMode;
42 typedef enum lmrcImageAbnormalValueRemoveAreaPattern {
43 lmrcImageAbnormalValueModeAllArea = 0,
44 lmrcImageAbnormalValueModeHighValueArea = 1,
45 lmrcImageAbnormalValueModeLowValueArea = 2
46 } lmrcImageAbnormalValueRemoveAreaPattern;
49 lmrcImageAbnormalValueRemove(mrcImage* out,
51 lmrcImageAbnormalValueRemoveInfo* linfo,
52 lmrcImageAbnormalValueRemoveAreaPattern pattern,
53 lmrcImageAbnormalValueRemoveMode mode);
56 lmrcImageAbnormalValueRemoveAllArea(mrcImage* out,
58 lmrcImageAbnormalValueRemoveInfo* linfo,
59 lmrcImageAbnormalValueRemoveMode mode);
62 lmrcImageAbnormalValueRemoveHighValueArea(mrcImage* out,
64 lmrcImageAbnormalValueRemoveInfo* linfo,
65 lmrcImageAbnormalValueRemoveMode mode);
68 lmrcImageAbnormalValueRemoveLowValueArea(mrcImage* out,
70 lmrcImageAbnormalValueRemoveInfo* linfo,
71 lmrcImageAbnormalValueRemoveMode mode);
74 main(int argc, char* argv[])
78 mrcImageAbnormalValueRemoveInfo info;
79 lmrcImageAbnormalValueRemoveInfo linfo;
82 argCheck(&info, argc, argv);
85 linfo.cutValueOverSigma = info.cutValue;
86 linfo.flagUnsigned = info.flagUnsignedMax;
87 linfo.UnsignedMax = info.UnsignedMax;
88 linfo.UnsignedHalf= info.UnsignedHalf;
89 linfo.Threshold = info.Threshold;
91 linfo.paramOut = info.fptOutParams;
93 DEBUGPRINT("Program Start\n");
94 mrcFileRead(&in, info.In, "in main", 0);
96 out.Header = in.Header;
97 out.HeaderMode = mrcFloatImage;
100 lmrcImageAbnormalValueRemove(&out, &in, &linfo, info.Pattern, info.mode);
102 mrcFileWrite(&out, info.Out, "in main", 0);
110 fprintf(stderr, "----- Additional Usage -----\n");
111 fprintf(stderr, "----- Mode: \n");
112 fprintf(stderr, " %d: Random Value \n", lmrcImageAbnormalValueModeDefault);
113 fprintf(stderr, " %d: Near Value \n", lmrcImageAbnormalValueModeNear);
114 fprintf(stderr, " %d: Random Value using SD and mean within Normal Area\n", lmrcImageAbnormalValueModeRandom);
115 fprintf(stderr, " %d: Mean Value using SD and mean within Normal Area\n", lmrcImageAbnormalValueModeMean);
116 fprintf(stderr, "----- Area Pattern \n");
117 fprintf(stderr, " %d: All area\n", lmrcImageAbnormalValueModeAllArea);
118 fprintf(stderr, " %d: HIgh value area\n", lmrcImageAbnormalValueModeHighValueArea);
119 fprintf(stderr, " %d: Low value area\n", lmrcImageAbnormalValueModeLowValueArea);
123 lmrcImageAbnormalValueRemove(mrcImage* out,
125 lmrcImageAbnormalValueRemoveInfo* linfo,
126 lmrcImageAbnormalValueRemoveAreaPattern pattern,
127 lmrcImageAbnormalValueRemoveMode mode)
130 mrcImageParaTypeReal x, y, z;
131 double data, dst, tmpD;
133 if(linfo->flagUnsigned){
134 tmp.Header = in->Header;
135 tmp.HeaderMode = mrcFloatImage;
137 for(z=0; z<in->HeaderN.z; z++) {
138 for(y=0; y<in->HeaderN.y; y++) {
139 for(x=0; x<in->HeaderN.x; x++) {
140 mrcPixelDataGet(in, x, y, z, &data, mrcPixelRePart, mrcPixelHowNearest);
141 if(linfo->UnsignedHalf <= data) {
142 data -= linfo->UnsignedMax;
147 mrcPixelDataSet(&tmp, x, y, z, data, mrcPixelRePart);
152 case lmrcImageAbnormalValueModeAllArea: {
153 linfo->ImageInfo.mode = meanOfAll;
154 lmrcImageInformation(&(linfo->ImageInfo), in);
155 fprintf(linfo->paramOut, "AbnormalMode: AllArea\n");
156 fprintf(linfo->paramOut, "ImageInformation(mean,sd): %g %g\n", linfo->ImageInfo.mean, linfo->ImageInfo.sd);
157 fprintf(linfo->paramOut, "CutValue: %g\n", linfo->cutValueOverSigma);
158 fprintf(linfo->paramOut, "NormalArea(mean-sd,mean+sd): %g %g\n", linfo->ImageInfo.mean-linfo->ImageInfo.sd, linfo->ImageInfo.mean+ linfo->ImageInfo.sd);
159 lmrcImageAbnormalValueRemoveAllArea(out, in, linfo, mode);
162 case lmrcImageAbnormalValueModeHighValueArea: {
163 linfo->ImageInfo.mode = meanOfHighValueArea;
164 linfo->ImageInfo.thresHigh = linfo->Threshold;
165 lmrcImageInformation(&(linfo->ImageInfo), in);
166 fprintf(linfo->paramOut, "AbnormalMode: HighValueArea\n");
167 fprintf(linfo->paramOut, "ImageInformation(mean,sd): %g %g\n", linfo->ImageInfo.meanOfHighValueArea, linfo->ImageInfo.sdOfHighValueArea);
168 fprintf(linfo->paramOut, "CutValue: %g\n", linfo->cutValueOverSigma);
169 fprintf(linfo->paramOut, "NormalArea(thres,mean+sd): %g %g\n", linfo->ImageInfo.thresOfHighValueArea,
170 linfo->ImageInfo.meanOfHighValueArea+linfo->cutValueOverSigma*linfo->ImageInfo.sdOfHighValueArea);
171 lmrcImageAbnormalValueRemoveHighValueArea(out, in, linfo, mode);
174 case lmrcImageAbnormalValueModeLowValueArea: {
175 linfo->ImageInfo.mode = meanOfLowValueArea;
176 linfo->ImageInfo.thresLow = linfo->Threshold;
177 lmrcImageInformation(&(linfo->ImageInfo), in);
178 fprintf(linfo->paramOut, "AbnormalMode: LowValueArea\n");
179 fprintf(linfo->paramOut, "ImageInformation(mean,sd): %g %g\n", linfo->ImageInfo.mean, linfo->ImageInfo.sd);
180 fprintf(linfo->paramOut, "CutValue: %g\n", linfo->cutValueOverSigma);
181 fprintf(linfo->paramOut, "NormalArea(mean-cutValue*sd,thres): %g %g\n", linfo->ImageInfo.meanOfLowValueArea-linfo->cutValueOverSigma*linfo->ImageInfo.sdOfLowValueArea,
182 linfo->ImageInfo.thresOfLowValueArea);
183 lmrcImageAbnormalValueRemoveLowValueArea(out, in, linfo, mode);
187 fprintf(stderr, "Not supported pattern: %d\n", pattern);
194 lmrcImageAbnormalValueRemoveAllArea(mrcImage* out,
196 lmrcImageAbnormalValueRemoveInfo* linfo,
197 lmrcImageAbnormalValueRemoveMode mode)
199 mrcImageInformation inInfo;
201 mrcImageParaTypeReal x, y, z;
202 double data, dst, tmpD;
204 inInfo = linfo->ImageInfo;
206 case lmrcImageAbnormalValueModeDefault: {
207 for(z=0; z<in->HeaderN.z; z++) {
208 for(y=0; y<in->HeaderN.y; y++) {
209 for(x=0; x<in->HeaderN.x; x++) {
210 mrcPixelDataGet(in, x, y, z, &data, mrcPixelRePart, mrcPixelHowNearest);
211 if(data < inInfo.mean - linfo->cutValueOverSigma*inInfo.sd
212 || inInfo.mean + linfo->cutValueOverSigma*inInfo.sd < data) {
213 dst = inInfo.mean + inInfo.sd*randomNormalGet(2);
214 switch(out->HeaderMode) {
219 DEBUGPRINT1("data is negative: %lf\n", data);
225 fprintf(linfo->paramOut,"AbnormalValue: %f -> %f at %f %f %f\n", data, dst, x, y, z);
232 case lmrcImageAbnormalValueModeRandom: {
233 double sum, mean, SD;
236 for(z=0; z<in->HeaderN.z; z++) {
237 for(y=0; y<in->HeaderN.y; y++) {
238 for(x=0; x<in->HeaderN.x; x++) {
239 mrcPixelDataGet(in, x, y, z, &data, mrcPixelRePart, mrcPixelHowNearest);
240 if(inInfo.mean - linfo->cutValueOverSigma*inInfo.sd < data
241 && data < inInfo.mean + linfo->cutValueOverSigma*inInfo.sd ) {
251 fprintf(stderr, "No data within proper area\n");
253 for(z=0; z<in->HeaderN.z; z++) {
254 for(y=0; y<in->HeaderN.y; y++) {
255 for(x=0; x<in->HeaderN.x; x++) {
256 mrcPixelDataGet(in, x, y, z, &data, mrcPixelRePart, mrcPixelHowNearest);
257 if(inInfo.mean - linfo->cutValueOverSigma*inInfo.sd < data
258 && data < inInfo.mean + linfo->cutValueOverSigma*inInfo.sd ) {
259 sum += SQR(data - mean);
266 for(z=0; z<in->HeaderN.z; z++) {
267 for(y=0; y<in->HeaderN.y; y++) {
268 for(x=0; x<in->HeaderN.x; x++) {
269 mrcPixelDataGet(in, x, y, z, &data, mrcPixelRePart, mrcPixelHowNearest);
270 if(data < mean - linfo->cutValueOverSigma*inInfo.sd
271 || mean + linfo->cutValueOverSigma*inInfo.sd < data) {
272 dst = mean + SD*randomNormalGet(2);
273 switch(out->HeaderMode) {
278 DEBUGPRINT1("data is negative: %lf\n", data);
284 fprintf(linfo->paramOut,"AbnormalValue: %f -> %f at %f %f %f\n", data, dst, x, y, z);
291 case lmrcImageAbnormalValueModeMean: {
292 double sum, mean, SD;
295 for(z=0; z<in->HeaderN.z; z++) {
296 for(y=0; y<in->HeaderN.y; y++) {
297 for(x=0; x<in->HeaderN.x; x++) {
298 mrcPixelDataGet(in, x, y, z, &data, mrcPixelRePart, mrcPixelHowNearest);
299 if(inInfo.mean - linfo->cutValueOverSigma*inInfo.sd < data
300 && data < inInfo.mean + linfo->cutValueOverSigma*inInfo.sd ) {
310 fprintf(stderr, "No data within proper area\n");
313 for(z=0; z<in->HeaderN.z; z++) {
314 for(y=0; y<in->HeaderN.y; y++) {
315 for(x=0; x<in->HeaderN.x; x++) {
316 mrcPixelDataGet(in, x, y, z, &data, mrcPixelRePart, mrcPixelHowNearest);
317 if(data < mean - linfo->cutValueOverSigma*inInfo.sd
318 || mean + linfo->cutValueOverSigma*inInfo.sd < data) {
320 switch(out->HeaderMode) {
325 DEBUGPRINT1("data is negative: %lf\n", data);
331 fprintf(linfo->paramOut,"AbnormalValue: %f -> %f at %f %f %f\n", data, dst, x, y, z);
338 case lmrcImageAbnormalValueModeNear: {
339 mrcImageParaTypeReal ox, oy, oz;
340 mrcImageParaTypeReal dx, dy, dz;
341 mrcImageParaTypeReal min, max;
342 mrcImageParaTypeReal minHalf, maxHalf;
344 mrcImageParaTypeInteger count;
345 mrcImageParaTypeInteger flag;
347 min = inInfo.mean - linfo->cutValueOverSigma*inInfo.sd;
348 minHalf = inInfo.mean - linfo->cutValueOverSigma*inInfo.sd/2.0;
349 max = inInfo.mean + linfo->cutValueOverSigma*inInfo.sd;
350 maxHalf = inInfo.mean + linfo->cutValueOverSigma*inInfo.sd/2.0;
352 for(z=0; z<in->HeaderN.z; z++) {
353 for(y=0; y<in->HeaderN.y; y++) {
354 for(x=0; x<in->HeaderN.x; x++) {
355 mrcPixelDataGet(in, x, y, z, &data, mrcPixelRePart, mrcPixelHowNearest);
357 if(data < min || max < data) {
358 DEBUGPRINT6("data %f out of range %f <-> %f at (%f, %f, %f) \n", data, min, max, x, y, z);
364 for(oz=z-dz; oz<=z+dz; oz++) {
365 for(oy=y-dy; oy<=y+dy; oy++) {
366 for(ox=x-dx; ox<=x+dx; ox++) {
367 if(SQR((ox-x)/dx)+SQR((oy-y)/dy)+SQR((oz-z)/dz)<=1) {
368 mrcPixelDataGet(in, ox, oy, oz, &tmpD, mrcPixelRePart, mrcPixelHowNearest);
369 if( min < tmpD && tmpD < max) {
380 DEBUGPRINT5("data %f count %d at (%f, %f, %f) \n", dst, count, x, y, z);
381 if(dst < minHalf || maxHalf < dst ) {
382 DEBUGPRINT("wider range +1 because of wide abnormal value\n");
390 DEBUGPRINT("wider range +1\n");
397 fprintf(linfo->paramOut,"AbnormalValue: %f -> %f at %f %f %f\n", data, dst, x, y, z);
405 fprintf(stderr, "Not supported mode: %d\n", mode);
410 mrcPixelDataSet(out, x, y, z, data, mrcPixelRePart);
416 lmrcImageAbnormalValueRemoveHighValueArea(mrcImage* out,
418 lmrcImageAbnormalValueRemoveInfo* linfo,
419 lmrcImageAbnormalValueRemoveMode mode)
421 mrcImageInformation inInfo;
423 mrcImageParaTypeReal x, y, z;
424 double data, dst, tmpD;
426 inInfo = linfo->ImageInfo;
428 case lmrcImageAbnormalValueModeDefault: {
429 for(z=0; z<in->HeaderN.z; z++) {
430 for(y=0; y<in->HeaderN.y; y++) {
431 for(x=0; x<in->HeaderN.x; x++) {
432 mrcPixelDataGet(in, x, y, z, &data, mrcPixelRePart, mrcPixelHowNearest);
433 if(inInfo.meanOfHighValueArea + linfo->cutValueOverSigma*inInfo.sdOfHighValueArea < data) {
434 dst = inInfo.meanOfHighValueArea + inInfo.sdOfHighValueArea*randomNormalGet(2);
435 switch(out->HeaderMode) {
445 fprintf(linfo->paramOut,"AbnormalValue: %f -> %f at %f %f %f\n", data, dst, x, y, z);
452 case lmrcImageAbnormalValueModeMean: {
457 for(z=0; z<in->HeaderN.z; z++) {
458 for(y=0; y<in->HeaderN.y; y++) {
459 for(x=0; x<in->HeaderN.x; x++) {
460 mrcPixelDataGet(in, x, y, z, &data, mrcPixelRePart, mrcPixelHowNearest);
461 if( inInfo.thresOfHighValueArea < data &&
462 data < inInfo.meanOfHighValueArea + linfo->cutValueOverSigma*inInfo.sdOfHighValueArea ) {
469 for(z=0; z<in->HeaderN.z; z++) {
470 for(y=0; y<in->HeaderN.y; y++) {
471 for(x=0; x<in->HeaderN.x; x++) {
472 mrcPixelDataGet(in, x, y, z, &data, mrcPixelRePart, mrcPixelHowNearest);
473 if(inInfo.meanOfHighValueArea + linfo->cutValueOverSigma*inInfo.sdOfHighValueArea < data) {
475 switch(out->HeaderMode) {
485 fprintf(linfo->paramOut,"AbnormalValue: %f -> %f at %f %f %f\n", data, dst, x, y, z);
492 case lmrcImageAbnormalValueModeNear: {
493 mrcImageParaTypeReal ox, oy, oz;
494 mrcImageParaTypeReal dx, dy, dz;
495 mrcImageParaTypeReal min, max;
496 mrcImageParaTypeReal minHalf, maxHalf;
498 mrcImageParaTypeInteger count;
499 mrcImageParaTypeInteger flag;
501 min = inInfo.thresOfHighValueArea;
502 minHalf = (inInfo.meanOfHighValueArea + min)/2.0;
503 max = inInfo.meanOfHighValueArea + linfo->cutValueOverSigma*inInfo.sdOfHighValueArea;
504 maxHalf = inInfo.meanOfHighValueArea + linfo->cutValueOverSigma*inInfo.sdOfHighValueArea/2.0;
506 for(z=0; z<in->HeaderN.z; z++) {
507 for(y=0; y<in->HeaderN.y; y++) {
508 for(x=0; x<in->HeaderN.x; x++) {
509 mrcPixelDataGet(in, x, y, z, &data, mrcPixelRePart, mrcPixelHowNearest);
511 DEBUGPRINT6("data %f out of range %f <-> %f at (%f, %f, %f) \n", data, min, max, x, y, z);
517 for(oz=z-dz; oz<=z+dz; oz++) {
518 for(oy=y-dy; oy<=y+dy; oy++) {
519 for(ox=x-dx; ox<=x+dx; ox++) {
520 if(SQR((ox-x)/dx)+SQR((oy-y)/dy)+SQR((oz-z)/dz)<=1) {
521 mrcPixelDataGet(in, ox, oy, oz, &tmpD, mrcPixelRePart, mrcPixelHowNearest);
533 DEBUGPRINT5("data %f count %d at (%f, %f, %f) \n", data, count, x, y, z);
534 if( maxHalf < data ) {
535 DEBUGPRINT("wider range +1 because of wide abnormal value\n");
543 DEBUGPRINT("wider range +1\n");
550 fprintf(linfo->paramOut,"AbnormalValue: %f -> %f at %f %f %f\n", data, dst, x, y, z);
557 case lmrcImageAbnormalValueModeRandom: {
558 double sum, mean, SD;
562 for(z=0; z<in->HeaderN.z; z++) {
563 for(y=0; y<in->HeaderN.y; y++) {
564 for(x=0; x<in->HeaderN.x; x++) {
565 mrcPixelDataGet(in, x, y, z, &data, mrcPixelRePart, mrcPixelHowNearest);
566 if(inInfo.thresOfHighValueArea < data
567 &&data < inInfo.meanOfHighValueArea + linfo->cutValueOverSigma*inInfo.sdOfHighValueArea) {
576 for(z=0; z<in->HeaderN.z; z++) {
577 for(y=0; y<in->HeaderN.y; y++) {
578 for(x=0; x<in->HeaderN.x; x++) {
579 mrcPixelDataGet(in, x, y, z, &data, mrcPixelRePart, mrcPixelHowNearest);
580 if(inInfo.thresOfHighValueArea < data
581 &&data < inInfo.meanOfHighValueArea + linfo->cutValueOverSigma*inInfo.sdOfHighValueArea) {
582 sum += SQR(data-mean);
589 for(z=0; z<in->HeaderN.z; z++) {
590 for(y=0; y<in->HeaderN.y; y++) {
591 for(x=0; x<in->HeaderN.x; x++) {
592 mrcPixelDataGet(in, x, y, z, &data, mrcPixelRePart, mrcPixelHowNearest);
593 if(mean + linfo->cutValueOverSigma*SD < data) {
594 dst = mean + SD*randomNormalGet(2);
595 switch(out->HeaderMode) {
600 DEBUGPRINT1("data is negative: %lf\n", data);
606 fprintf(linfo->paramOut,"AbnormalValue: %f -> %f at %f %f %f\n", data, dst, x, y, z);
614 fprintf(stderr, "Not supported mode: %d\n", mode);
619 mrcPixelDataSet(out, x, y, z, data, mrcPixelRePart);
625 lmrcImageAbnormalValueRemoveLowValueArea(mrcImage* out,
627 lmrcImageAbnormalValueRemoveInfo* linfo,
628 lmrcImageAbnormalValueRemoveMode mode)
630 mrcImageInformation inInfo;
632 mrcImageParaTypeReal x, y, z;
633 double data, dst, tmpD;
635 inInfo = linfo->ImageInfo;
637 case lmrcImageAbnormalValueModeDefault: {
638 for(z=0; z<in->HeaderN.z; z++) {
639 for(y=0; y<in->HeaderN.y; y++) {
640 for(x=0; x<in->HeaderN.x; x++) {
641 mrcPixelDataGet(in, x, y, z, &data, mrcPixelRePart, mrcPixelHowNearest);
642 if(data < inInfo.meanOfLowValueArea - linfo->cutValueOverSigma*inInfo.sdOfLowValueArea) {
643 dst = inInfo.meanOfLowValueArea + inInfo.sdOfLowValueArea*randomNormalGet(2);
644 switch(out->HeaderMode) {
654 fprintf(linfo->paramOut,"AbnormalValue: %f -> %f at %f %f %f\n", data, dst, x, y, z);
661 case lmrcImageAbnormalValueModeMean: {
666 for(z=0; z<in->HeaderN.z; z++) {
667 for(y=0; y<in->HeaderN.y; y++) {
668 for(x=0; x<in->HeaderN.x; x++) {
669 mrcPixelDataGet(in, x, y, z, &data, mrcPixelRePart, mrcPixelHowNearest);
670 if(inInfo.meanOfLowValueArea - linfo->cutValueOverSigma*inInfo.sdOfLowValueArea < data
671 && data < inInfo.thresOfLowValueArea ) {
679 for(z=0; z<in->HeaderN.z; z++) {
680 for(y=0; y<in->HeaderN.y; y++) {
681 for(x=0; x<in->HeaderN.x; x++) {
682 mrcPixelDataGet(in, x, y, z, &data, mrcPixelRePart, mrcPixelHowNearest);
683 if(data < inInfo.meanOfLowValueArea - linfo->cutValueOverSigma*inInfo.sdOfLowValueArea) {
685 switch(out->HeaderMode) {
695 fprintf(linfo->paramOut,"AbnormalValue: %f -> %f at %f %f %f\n", data, dst, x, y, z);
702 case lmrcImageAbnormalValueModeNear: {
703 mrcImageParaTypeReal ox, oy, oz;
704 mrcImageParaTypeReal dx, dy, dz;
705 mrcImageParaTypeReal min, max;
706 mrcImageParaTypeReal minHalf, maxHalf;
708 mrcImageParaTypeInteger count;
709 mrcImageParaTypeInteger flag;
711 min = inInfo.meanOfLowValueArea - linfo->cutValueOverSigma*inInfo.sdOfLowValueArea;
712 minHalf = (inInfo.meanOfLowValueArea + min)/2.0;
713 max = inInfo.thresOfLowValueArea;
714 maxHalf = (inInfo.meanOfLowValueArea + max)/2.0;
716 for(z=0; z<in->HeaderN.z; z++) {
717 for(y=0; y<in->HeaderN.y; y++) {
718 for(x=0; x<in->HeaderN.x; x++) {
719 mrcPixelDataGet(in, x, y, z, &data, mrcPixelRePart, mrcPixelHowNearest);
721 DEBUGPRINT6("data %f out of range %f <-> %f at (%f, %f, %f) \n", data, min, max, x, y, z);
727 for(oz=z-dz; oz<=z+dz; oz++) {
728 for(oy=y-dy; oy<=y+dy; oy++) {
729 for(ox=x-dx; ox<=x+dx; ox++) {
730 if(SQR((ox-x)/dx)+SQR((oy-y)/dy)+SQR((oz-z)/dz)<=1) {
731 mrcPixelDataGet(in, ox, oy, oz, &data, mrcPixelRePart, mrcPixelHowNearest);
732 if( min < data && data < max) {
743 DEBUGPRINT5("data %f count %d at (%f, %f, %f) \n", data, count, x, y, z);
745 DEBUGPRINT("wider range +1 because of wide abnormal value\n");
754 DEBUGPRINT("wider range +1\n");
761 fprintf(linfo->paramOut,"AbnormalValue: %f -> %f at %f %f %f\n", data, dst, x, y, z);
768 case lmrcImageAbnormalValueModeRandom: {
769 double sum, mean, SD;
773 for(z=0; z<in->HeaderN.z; z++) {
774 for(y=0; y<in->HeaderN.y; y++) {
775 for(x=0; x<in->HeaderN.x; x++) {
776 mrcPixelDataGet(in, x, y, z, &data, mrcPixelRePart, mrcPixelHowNearest);
777 if(data < inInfo.thresOfLowValueArea
778 &&inInfo.meanOfLowValueArea - linfo->cutValueOverSigma*inInfo.sdOfLowValueArea < data) {
787 for(z=0; z<in->HeaderN.z; z++) {
788 for(y=0; y<in->HeaderN.y; y++) {
789 for(x=0; x<in->HeaderN.x; x++) {
790 mrcPixelDataGet(in, x, y, z, &data, mrcPixelRePart, mrcPixelHowNearest);
791 if(data < inInfo.thresOfLowValueArea
792 &&inInfo.meanOfLowValueArea - linfo->cutValueOverSigma*inInfo.sdOfLowValueArea <data) {
793 sum += SQR(data-mean);
800 for(z=0; z<in->HeaderN.z; z++) {
801 for(y=0; y<in->HeaderN.y; y++) {
802 for(x=0; x<in->HeaderN.x; x++) {
803 mrcPixelDataGet(in, x, y, z, &data, mrcPixelRePart, mrcPixelHowNearest);
804 if(data < mean - linfo->cutValueOverSigma*SD) {
805 dst = mean + SD*randomNormalGet(2);
806 switch(out->HeaderMode) {
811 DEBUGPRINT1("data is negative: %lf\n", data);
817 fprintf(linfo->paramOut,"AbnormalValue: %f -> %f at %f %f %f\n", data, dst, x, y, z);
825 fprintf(stderr, "Not supported mode: %d\n", mode);
830 mrcPixelDataSet(out, x, y, z, data, mrcPixelRePart);