• R/O
  • HTTP
  • SSH
  • HTTPS

base: Commit

This repository is a base of Eos.


Commit MetaInfo

Revisión10da2e95c5b15654dd70b8dafaf4f382ed1a92ae (tree)
Tiempo2015-11-14 14:04:52
AutorTakuo Yasunaga <yasunaga@bio....>
CommiterTakuo Yasunaga

Log Message

mrcImageFeatureCalc: modified
modified: include/lmrcImageFeatureCalc.h
modified: src/Objects/DataManip/mrcImage/src/lmrcImageFeatureCalc.c
modified: src/Objects/DataManip/mrcImage/src/lmrcImageFeatureCalc.h
modified: src/Objects/DataManip/mrcImage/src/lmrcImageSurfaceAreaCalc.c

Cambiar Resumen

Diferencia incremental

--- a/include/lmrcImageFeatureCalc.h
+++ b/include/lmrcImageFeatureCalc.h
@@ -77,6 +77,14 @@ typedef struct lmrcImageFeatureEach {
7777 int flagCircularity;
7878 double circularity;
7979
80+ // Complexity
81+ int flagComplexity;
82+ double complexity;
83+
84+ // Complexity
85+ int flagDiameter;
86+ double diameter;
87+
8088 // PCA
8189 float lamda[3];
8290
@@ -116,6 +124,8 @@ extern void lmrcImageSurfaceAreaCalcUsage(FILE* fpt);
116124
117125
118126 extern void lmrcImageCircularityCalc(lmrcImageFeatureList* linfo, int mode);
127+extern void lmrcImageComplexityCalc(lmrcImageFeatureList* linfo, int mode);
128+extern void lmrcImageDiameterCalc(lmrcImageFeatureList* linfo, int mode);
119129
120130 extern int lmrcImageChainCodeSearch(int* chain, mrcImageParaTypeRealCoord* next, double* dL, mrcImage* in, mrcImageParaTypeRealCoord ori, int chainCodeStart, int mode);
121131
--- a/src/Objects/DataManip/mrcImage/src/lmrcImageFeatureCalc.c
+++ b/src/Objects/DataManip/mrcImage/src/lmrcImageFeatureCalc.c
@@ -35,6 +35,18 @@ lmrcImageFeaturePrint(FILE* fpt, lmrcImageFeatureList* linfo, int mode)
3535 if(linfo->each[0].flagCircularity) {
3636 fprintf(fpt, " %12s", "circularity");
3737 }
38+ if(!linfo->each[0].flagComplexity) {
39+ lmrcImageComplexityCalc(linfo, 0);
40+ }
41+ if(linfo->each[0].flagComplexity) {
42+ fprintf(fpt, " %12s", "complexity");
43+ }
44+ if(!linfo->each[0].flagDiameter) {
45+ lmrcImageDiameterCalc(linfo, 0);
46+ }
47+ if(linfo->each[0].flagDiameter) {
48+ fprintf(fpt, " %12s", "diameter");
49+ }
3850 fprintf(fpt, "\n");
3951 for(i=0; i<=linfo->Number; i++) {
4052 fprintf(fpt, "%06d %10.4f %10.4f %10.4f %12.4f %6d %6d %6d",
@@ -55,6 +67,12 @@ lmrcImageFeaturePrint(FILE* fpt, lmrcImageFeatureList* linfo, int mode)
5567 if(linfo->each[i].flagCircularity) {
5668 fprintf(fpt, " %12.4f", linfo->each[i].circularity);
5769 }
70+ if(linfo->each[i].flagComplexity) {
71+ fprintf(fpt, " %12.4f", linfo->each[i].complexity);
72+ }
73+ if(linfo->each[i].flagDiameter) {
74+ fprintf(fpt, " %12.4f", linfo->each[i].diameter);
75+ }
5876 fprintf(fpt, "\n");
5977 }
6078 }
@@ -91,6 +109,68 @@ lmrcImageCircularityCalc(lmrcImageFeatureList* linfo, int mode)
91109 }
92110
93111 void
112+lmrcImageComplexityCalc(lmrcImageFeatureList* linfo, int mode)
113+{
114+ int i;
115+
116+ if(linfo->each[0].flagPerimeter) {
117+ for(i=0; i<=linfo->Number; i++) {
118+ if(0<linfo->each[i].perimeter) {
119+ linfo->each[i].complexity=SQR(linfo->each[i].perimeter)/linfo->each[i].area;
120+ } else {
121+ linfo->each[i].complexity=1e4;
122+ }
123+ linfo->each[i].flagComplexity=1;
124+ }
125+ } else if(linfo->each[0].flagSurfaceArea) {
126+ for(i=0; i<=linfo->Number; i++) {
127+ if(0<linfo->each[i].surfaceArea) {
128+ linfo->each[i].complexity=CUBIC(linfo->each[i].surfaceArea)/SQR(linfo->each[i].area);
129+ } else {
130+ linfo->each[i].complexity=1e4;
131+ }
132+ linfo->each[i].flagComplexity=1;
133+ }
134+ } else {
135+ fprintf(stderr, "Cannot calculate complexity because of no perimeter/surfaceArea\n");
136+ for(i=0; i<=linfo->Number; i++) {
137+ linfo->each[i].flagComplexity=0;
138+ }
139+ }
140+}
141+
142+void
143+lmrcImageDiameterCalc(lmrcImageFeatureList* linfo, int mode)
144+{
145+ int i;
146+
147+ if(linfo->each[0].flagPerimeter) {
148+ for(i=0; i<=linfo->Number; i++) {
149+ if(0<linfo->each[i].perimeter) {
150+ linfo->each[i].diameter=sqrt(linfo->each[i].area/M_PI);
151+ } else {
152+ linfo->each[i].diameter=1e4;
153+ }
154+ linfo->each[i].flagDiameter=1;
155+ }
156+ } else if(linfo->each[0].flagSurfaceArea) {
157+ for(i=0; i<=linfo->Number; i++) {
158+ if(0<linfo->each[i].surfaceArea) {
159+ linfo->each[i].diameter=pow(linfo->each[i].area/(4./3.*M_PI), 1.0/3.0);
160+ } else {
161+ linfo->each[i].diameter=1e4;
162+ }
163+ linfo->each[i].flagDiameter=1;
164+ }
165+ } else {
166+ fprintf(stderr, "Cannot calculate diameter because of no perimeter/surfaceArea\n");
167+ for(i=0; i<=linfo->Number; i++) {
168+ linfo->each[i].flagDiameter=0;
169+ }
170+ }
171+}
172+
173+void
94174 lmrcImageBasicFeatureCalc(mrcImage* gc, lmrcImageFeatureList* linfo, mrcImage* label, int mode)
95175 {
96176 int x, y, z;
@@ -229,7 +309,7 @@ lmrcImagePerimeterCalc(mrcImage* out, mrcImage* in, lmrcImagePerimeterCalcInfo*
229309 linfo->flagArea = 1;
230310 label = linfo->Label = memoryAllocate(sizeof(mrcImage), "in lmrcImagePerimeterCalc");
231311 area = linfo->Area = memoryAllocate(sizeof(mrcImage), "in lmrcImagePerimeterCalc");
232- lmrcImageCalcArea(area, label, in, 0);
312+ lmrcImageCalcArea(area, label, in, linfo->Neighbor, 0);
233313 }
234314 lmrcImageLabelingOrder(label, 1);
235315
--- a/src/Objects/DataManip/mrcImage/src/lmrcImageFeatureCalc.h
+++ b/src/Objects/DataManip/mrcImage/src/lmrcImageFeatureCalc.h
@@ -77,6 +77,14 @@ typedef struct lmrcImageFeatureEach {
7777 int flagCircularity;
7878 double circularity;
7979
80+ // Complexity
81+ int flagComplexity;
82+ double complexity;
83+
84+ // Complexity
85+ int flagDiameter;
86+ double diameter;
87+
8088 // PCA
8189 float lamda[3];
8290
@@ -116,6 +124,8 @@ extern void lmrcImageSurfaceAreaCalcUsage(FILE* fpt);
116124
117125
118126 extern void lmrcImageCircularityCalc(lmrcImageFeatureList* linfo, int mode);
127+extern void lmrcImageComplexityCalc(lmrcImageFeatureList* linfo, int mode);
128+extern void lmrcImageDiameterCalc(lmrcImageFeatureList* linfo, int mode);
119129
120130 extern int lmrcImageChainCodeSearch(int* chain, mrcImageParaTypeRealCoord* next, double* dL, mrcImage* in, mrcImageParaTypeRealCoord ori, int chainCodeStart, int mode);
121131
--- a/src/Objects/DataManip/mrcImage/src/lmrcImageSurfaceAreaCalc.c
+++ b/src/Objects/DataManip/mrcImage/src/lmrcImageSurfaceAreaCalc.c
@@ -54,7 +54,7 @@ lmrcImageSurfaceAreaCalc(mrcImage* out, mrcImage* bin, lmrcImageSurfaceAreaCalcI
5454 } else {
5555 area = linfo->Area = memoryAllocate(sizeof(mrcImage), "in lmrcImageSurfaceAreaCalc");
5656 label = linfo->Label = memoryAllocate(sizeof(mrcImage), "in lmrcImageSurfaceAreaCalc");
57- lmrcImageCalcArea(area, label, bin, 0);
57+ lmrcImageCalcArea(area, label, bin, linfo->Neighbor, 0);
5858 DEBUGPRINT("lmrcImageLabelingOrder Start\n");
5959 lmrcImageLabelingOrder(label, 0);
6060 }
Show on old repository browser