「lmrcImageClusterAnalysis(API)」の版間の差分

提供: Eospedia
移動: 案内検索
(画像間の距離)
行70: 行70:
 
<tr>
 
<tr>
 
<td>lmrcImageClusterAnalysisModeEuclidDistance</td>
 
<td>lmrcImageClusterAnalysisModeEuclidDistance</td>
<td></td>
+
<td>lmrcImageEuclidDistanceCalc2から算出</td>
 
</tr>
 
</tr>
 
<tr>
 
<tr>
 
<td>lmrcImageClusterAnalysisModeWardMethod</td>
 
<td>lmrcImageClusterAnalysisModeWardMethod</td>
<td></td>
+
<td>lmrcImageEuclidDistanceCalc2から算出して二乗する</td>
 
</tr>
 
</tr>
 
<tr>
 
<tr>
 
<td>lmrcImageClusterAnalysisModeWardMethodLinearCorrelation</td>
 
<td>lmrcImageClusterAnalysisModeWardMethodLinearCorrelation</td>
<td></td>
+
<td>d=lmrcImageLinearCorrelation2から算出し、exp(SQR(d-1.0)/(1/log(1e4)))-1.0とする</td>
 
</tr>
 
</tr>
 
<tr>
 
<tr>
 
<td>lmrcImageClusterAnalysisModeLinearCorrelation</td>
 
<td>lmrcImageClusterAnalysisModeLinearCorrelation</td>
<td></td>
+
<td>上記と同じ</td>
 
</tr>
 
</tr>
 
</table>
 
</table>

2015年3月3日 (火) 02:59時点における版

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 lmrcImageCorrelationinSpaceから算出して-1を掛ける
lmrcImageClusterAnalysisModeEuclidDistance lmrcImageEuclidDistanceCalc2から算出
lmrcImageClusterAnalysisModeWardMethod lmrcImageEuclidDistanceCalc2から算出して二乗する
lmrcImageClusterAnalysisModeWardMethodLinearCorrelation d=lmrcImageLinearCorrelation2から算出し、exp(SQR(d-1.0)/(1/log(1e4)))-1.0とする
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);
mode 距離の算出方法
lmrcImageClusterAnalysisModeCorrelation
lmrcImageClusterAnalysisModeEuclidDistance
lmrcImageClusterAnalysisModeLinearCorrelation


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);