lmrcImageClusterAnalysis(API)

提供: Eospedia
2015年3月3日 (火) 02:23時点におけるKinoshita (トーク | 投稿記録)による版

移動: 案内検索

DataManip/mrcImage/src/lmrcImageClusterAnalysismrcImageClusterAnalysisのためのAPI です。

定数

構造体

typedef enum lmrcImageClusterAnalysisMode {
	lmrcImageClusterAnalysisModeCorrelation    = 0,
	lmrcImageClusterAnalysisModeEuclidDistance = 1,
	lmrcImageClusterAnalysisModeWardMethod     = 2,
	lmrcImageClusterAnalysisModeWardMethodLinearCorrelation     = 3,
	lmrcImageClusterAnalysisModeLinearCorrelation     = 4
} lmrcImageClusterAnalysisMode;
#ifdef GLOBAL_DECLARATION
char* lmrcImageClusterAnalysisModeMessage[] = {
	"By Correlation",
	"By Euclid Distance",
	"By Ward Method (default) : Euclid Length (no rotation) or its square (rotation)",
	"By Ward Method using Linear Correlation : (1 - Correlation)/(1 + Correlation)",
	"By Linear Correlation :                   (1 - Correlation)/(1 + Correlation)",
	NULL
};
#endif
typedef struct lmrcImageClusterAnalysisInfo {
	lmrcImageClusterAnalysisMode mode;          /* ClusterAnalysisMode */
	int flagIteration;                          /* */
	int flagAutoRotation; 
	char** filename;                            /* filename */
	int correlationMode;                        /* correlationMode */
	mrcImage* averagedImage;
	lmrcImageAutoRotationCorrelationInfo arInitial;

	int flagPVM;

	int flagLogIn;
	FILE* fptLogIn;
	int previousFileNumber;

	int   flagLog;
	FILE* fptLog;  /* All Log */

	int   flagLog2;
	FILE* fptLog2; /* Cluster Node Log */

	/* Output */
	float** Distance;
	
} lmrcImageClusterAnalysisInfo;

API

クラスター解析

void lmrcImageClusterAnalysis(int* group, mrcImage* in, int finalclusternum, int N, lmrcImageClusterAnalysisInfo* linfo);

平均画像のマージ(in1に上書きします)

void lmrcImageClusterMerge(mrcImage* in1, mrcImage* in2, int* index, int* averagednum, int m, int n, int* N);

画像間の距離

2画像in1, in2間の距離を算出し、disへ格納します。

void lmrcImageDistanceCalc(float* dis, mrcImage* in1, mrcImage* in2, int mode);
mode 距離の算出方法
lmrcImageClusterAnalysisModeCorrelation
lmrcImageClusterAnalysisModeEuclidDistance
lmrcImageClusterAnalysisModeLinearCorrelation
float lmrcImageDistanceCalcByWardMethod(mrcImage* in1, mrcImage* in2, int num1, int num2, int mode);
float lmrcImageDistanceCalcWithAutoRotation(mrcImage* out, mrcImage* cor, mrcImage* in1, mrcImage* in2, lmrcImageAutoRotationCorrelationInfo* linfo, int lmode, int mode);
float lmrcImageDistanceCalcByWardMethodWithAutoRotation(mrcImage* out, mrcImage* cor, mrcImage* in1, mrcImage* in2, int num1, int num2,  lmrcImageAutoRotationCorrelationInfo* linfo, int lmode, int mode);
float lmrcImageClusterAnalysisByIteration(int* group, mrcImage* in, int clusternum, int N, int mode);

ファイル入出力

ログの書き出し

void lmrcImageClusterAnalysisDistanceToLog(FILE* fpt, int n, int m, int prevM, int prevN, float distance);

ログの読み込み

void lmrcImageClusterAnalysisDistanceFromLog(int* skip, float* distance, FILE* fpt);