2 # mrcImageFeatureCalc : $Revision$
5 # Usage : mrcImageFeatureCalc
15 #define GLOBAL_DECLARATION
16 #include "../inc/config.h"
20 #include "lmrcImageFeatureCalc.h"
24 typedef struct lmrcImageFeatureCalcInfo {
27 } lmrcImageFeatureCalcInfo;
29 typedef enum lmrcImageFeatureCalcMode {
32 } lmrcImageFeatureCalcMode;
36 main(int argc, char* argv[])
38 mrcImageFeatureCalcInfo info;
39 lmrcImageFeatureList linfo;
44 mrcImage densityWeightedArea;
45 lmrcImagePerimeterCalcInfo lperi;
47 lmrcImageSurfaceAreaCalcInfo lsurface;
53 argCheck(&info, argc, argv);
56 DEBUGPRINT("Program Start\n");
58 mrcFileRead(&in, info.In, "in main", 0);
59 if(info.flagInDensity) {
60 mrcFileRead(&density, info.InDensity, "in main", 0);
63 DEBUGPRINT("lmrcImageLabeling\n");
64 lmrcImageLabeling(&label, &in, info.neighbor, 1);
66 DEBUGPRINT("lmrcImageBasicFeatureCalc\n");
68 lmrcImageBasicFeatureCalc(&out, &linfo, &label, info.mode);
70 if(info.flagOutPerimeter || info.flagOutChain) {
73 switch(info.neighbor) {
77 lmrcImagePerimeterCalc(&peri, &in, &lperi, 1);
82 lmrcImagePerimeterCalc(&peri, &in, &lperi, 0);
86 fprintf(stderr, "Not supported neighbor: %ld\n", info.neighbor);
87 fprintf(stderr, "Use 6-neighbor\n");
88 lmrcImagePerimeterCalc(&peri, &in, &lperi, 1);
92 for(i=0; i<=linfo.Number; i++) {
93 mrcPixelDataGet(&peri,
94 linfo.each[i].bottomLeft.x,
95 linfo.each[i].bottomLeft.y,
96 linfo.each[i].bottomLeft.z,
97 &linfo.each[i].perimeter,
100 linfo.each[i].flagPerimeter = 1;
102 if(info.flagOutPerimeter) {
103 mrcFileWrite(&peri, info.OutPerimeter, "in main", 0);
105 if(info.flagOutChain) {
106 mrcFileWrite(lperi.ChainCode, info.OutChain, "in main", 0);
109 fprintf(stderr, "Not supported for 3D image\n");
113 if(info.flagOutSurfaceArea) {
115 lsurface.Neighbor = info.neighbor;
116 if(lsurface.Neighbor==0) {
117 lsurface.Neighbor = 6;
120 lsurface.flagArea = 0;
121 DEBUGPRINT("lmrcImageSurfaceAreaCalc Start\n");
122 lmrcImageSurfaceAreaCalc(&surfaceArea, &in, &lsurface, 0);
123 DEBUGPRINT("lmrcImageSurfaceAreaCalc End\n");
124 for(i=0; i<=linfo.Number; i++) {
125 mrcPixelDataGet(&surfaceArea,
126 linfo.each[i].bottomLeft.x,
127 linfo.each[i].bottomLeft.y,
128 linfo.each[i].bottomLeft.z,
129 &linfo.each[i].surfaceArea,
132 linfo.each[i].flagSurfaceArea = 1;
134 mrcFileWrite(&surfaceArea, info.OutSurfaceArea, "in main", 0);
136 fprintf(stderr, "Not supported for 2D image\n");
140 DEBUGPRINT("lmrcImageFeaturePrint\n");
141 lmrcImageFeaturePrint(info.fptOut, &linfo, info.mode);
143 mrcFileWrite(&out, info.OutGC, "in main", 0);
145 if(info.flagOutLabel) {
146 mrcFileWrite(&label, info.OutLabel, "in main", 0);
148 if(info.flagOutDensityWeightedArea) {
149 mrcFileWrite(&densityWeightedArea, info.OutDensityWeightedArea, "in main", 0);
157 fprintf(stderr, "----- Additional Usage -----\n");
158 fprintf(stderr, "Mode\n");