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

提供: Eospedia
移動: 案内検索
(API)
 
行62: 行62:
  
 
== API ==
 
== API ==
 +
=== ファイル読み込み ===
 +
ファイルfptから初期データを読み込みます。
 +
void
 +
lInitialDataFileRead(lmrcImageOrientationSearchBySimultaneousMinimizationInfo* linfo, FILE* fpt, int mode);
 +
各i行についてそれぞれの列に対応したデータをlinfo->angle[i]のメンバへ格納します。
 +
<table border=1>
 +
<tr>
 +
<th>列</th>
 +
<th>linfo->angle[i]のメンバ</th>
 +
</tr>
 +
<tr>
 +
<td>3</td>
 +
<td>phi</td>
 +
</tr>
 +
<tr>
 +
<td>4</td>
 +
<td>theta</td>
 +
</tr>
 +
<tr>
 +
<td>5</td>
 +
<td>psi</td>
 +
</tr>
 +
</table>
 +
<br>
 +
 +
=== 角度の組み合わせ ===
 +
linfo->dthetaからphi, thetaの角度の組み合わせ数を返します。
 +
int
 +
lJcalculation(lmrcImageOrientationSearchBySimultaneousMinimizationInfo* linfo, int mode);
 +
<br>
 +
 +
linfo->dthetaからphi, thetaの角度の組み合わせを算出し、planerotationAngleへ格納します。
 +
void
 +
lPlaneRotationAngleSet(lmrcImageOrientationSearchBySimultaneousMinimizationInfo* linfo, PlaneRotationAngle* planerotationAngle, int mode);
 +
<br>
 +
 +
commonlinedataによる角度の組み合わせとPlaneRotationFileNumによる面内回転を含む角度の組み合わせをcommonlinedataWithPlaneRotationへ格納します。
 +
void
 +
lCommonLineDataSetInPlaneRotation(lmrcImageOrientationSearchBySimultaneousMinimizationInfo* linfo, CommonLineData* commonlinedata,
 +
                                  CommonLineData* commonlinedataWithPlaneRotation, int PlaneRotationNum, int CommonLineNum, int i,
 +
                                  int* PlaneRotationFileNum, mrcImage* ref, int mode);
 +
commonlinedataWithPlaneRotationの0 ~ PlaneRotationNum - 1までの要素にcommonlinedataの組み合わせが格納され、以降の要素に面内回転を含めた角度の組み合わせが格納されます。<br>
 +
<br>
 +
 +
Workcommonlinedataの各要素のメンバの内、angleRef, angleOhter, numをそれぞれlinfoの各要素へ格納します。<br>
 +
また、面内回転によって重なる画像数を返します。
 +
int
 +
lCommonLinesDataSet(lmrcImageOrientationSearchBySimultaneousMinimizationInfo* linfo, CommonLineData* Workcommonlinedata, CommonLineData* commonlinedata, int mode);
 +
<br>
 +
 +
=== コモンライン ===
 +
Lの算出
 
  double
 
  double
 
  lLcalculation(lmrcImageOrientationSearchBySimultaneousMinimizationInfo* linfo, mrcImage* refOneLineFT, mrcImage* otherOneLineFT,  
 
  lLcalculation(lmrcImageOrientationSearchBySimultaneousMinimizationInfo* linfo, mrcImage* refOneLineFT, mrcImage* otherOneLineFT,  
行112: 行164:
 
  lAllCommonLineCalculation(lmrcImageOrientationSearchBySimultaneousMinimizationInfo* linfo, lCommonLineCalculationInfo* CommonLineInfo, int N,
 
  lAllCommonLineCalculation(lmrcImageOrientationSearchBySimultaneousMinimizationInfo* linfo, lCommonLineCalculationInfo* CommonLineInfo, int N,
 
                           PlaneRotationAngle* planerotationAngle, CommonLineData* Workcommonlinedata, int j, int mode);
 
                           PlaneRotationAngle* planerotationAngle, CommonLineData* Workcommonlinedata, int j, int mode);
<br>
 
 
linfo->dthetaからphi, thetaの角度の組み合わせ数を返します。
 
int
 
lJcalculation(lmrcImageOrientationSearchBySimultaneousMinimizationInfo* linfo, int mode);
 
<br>
 
 
linfo->dthetaからphi, thetaの角度の組み合わせを算出し、planerotationAngleへ格納します。
 
void
 
lPlaneRotationAngleSet(lmrcImageOrientationSearchBySimultaneousMinimizationInfo* linfo, PlaneRotationAngle* planerotationAngle, int mode);
 
 
<br>
 
<br>
  
行148: 行190:
 
<br>
 
<br>
  
commonlinedataによる角度の組み合わせとPlaneRotationFileNumによる面内回転を含む角度の組み合わせをcommonlinedataWithPlaneRotationへ格納します。
+
=== 1Dデータの抽出 ===
void
+
lCommonLineDataSetInPlaneRotation(lmrcImageOrientationSearchBySimultaneousMinimizationInfo* linfo, CommonLineData* commonlinedata,
+
                                  CommonLineData* commonlinedataWithPlaneRotation, int PlaneRotationNum, int CommonLineNum, int i,
+
                                  int* PlaneRotationFileNum, mrcImage* ref, int mode);
+
commonlinedataWithPlaneRotationの0 ~ PlaneRotationNum - 1までの要素にcommonlinedataの組み合わせが格納され、以降の要素に面内回転を含めた角度の組み合わせが格納されます。<br>
+
<br>
+
 
+
Workcommonlinedataの各要素のメンバの内、angleRef, angleOhter, numをそれぞれlinfoの各要素へ格納します。<br>
+
また、面内回転によって重なる画像数を返します。
+
int
+
lCommonLinesDataSet(lmrcImageOrientationSearchBySimultaneousMinimizationInfo* linfo, CommonLineData* Workcommonlinedata, CommonLineData* commonlinedata, int mode);
+
<br>
+
 
+
ファイルfptから初期データを読み込みます。
+
void
+
lInitialDataFileRead(lmrcImageOrientationSearchBySimultaneousMinimizationInfo* linfo, FILE* fpt, int mode);
+
各i行についてそれぞれの列に対応したデータをlinfo->angle[i]のメンバへ格納します。
+
<table border=1>
+
<tr>
+
<th>列</th>
+
<th>linfo->angle[i]のメンバ</th>
+
</tr>
+
<tr>
+
<td>3</td>
+
<td>phi</td>
+
</tr>
+
<tr>
+
<td>4</td>
+
<td>theta</td>
+
</tr>
+
<tr>
+
<td>5</td>
+
<td>psi</td>
+
</tr>
+
</table>
+
<br>
+
 
+
 
入力in(実画像)から角度angle[radian]の成分のみを取り出し、outへ格納します。
 
入力in(実画像)から角度angle[radian]の成分のみを取り出し、outへ格納します。
 
  void
 
  void
行220: 行225:
 
<br>
 
<br>
  
 +
=== 相関 ===
 
入力inの参照refに対する重み付き相関値を返します。OhtsuMethodによる二値化データを閾値として使用しています。
 
入力inの参照refに対する重み付き相関値を返します。OhtsuMethodによる二値化データを閾値として使用しています。
 
  double  
 
  double  

2015年3月23日 (月) 08:12時点における最新版

DataManip/transform/src/lmrcImageOrientationSearchBySimultaneousMinimizationmrcImageOrientationSearchBySimultaneousMinimizationのためのAPI です。

定数

#define WORDLEN  (1024)
#define PHIMIN   (0)
#define PHIMAX   (2*M_PI-(M_PI/180/2))
#define THETAMIN (0)
#define THETAMAX (M_PI)
#define PSIMIN   (0)
#define PSIMAX   (2*M_PI-(M_PI/180/2))

構造体

typedef struct EulerAngle {
	char* filename;

	float phi;
	float theta;
	float psi;
} EulerAngle;
typedef struct lmrcImageOrientationSearchBySimultaneousMinimizationInfo {
	int    filenum;
	char*  OutFileName;

	float  dtheta;
	float  dpsi;

	int    mode;
	int    initialrandomdata;
	int    modeinitialdata;
	int    ModeStartPoint;
	int    ModeAngularArea;
	int    ModeL;
	int    ModeThresholdAngular;
	int    ModeCalculationArea;
	int    ModeFix;
	double ThresholdCalculationArea;

	char*  LogFileName;
	char*  Log2FileName;
	char*  mrc2dFileName;
	char*  mrc3dFileName;

	int    MaxCount;
	char*  FileNameHeader;

	EulerAngle* angle;
} lmrcImageOrientationSearchBySimultaneousMinimizationInfo;
typedef struct PlaneRotationAngle {
	float theta;
	float phi;
} PlaneRotationAngle;
typedef struct CommonLineData {
	float angleRef;
	float angleOther;
	float angularweight;
	int   num;
	int   flag;
} CommonLineData;

API

ファイル読み込み

ファイルfptから初期データを読み込みます。

void
lInitialDataFileRead(lmrcImageOrientationSearchBySimultaneousMinimizationInfo* linfo, FILE* fpt, int mode);

各i行についてそれぞれの列に対応したデータをlinfo->angle[i]のメンバへ格納します。

linfo->angle[i]のメンバ
3 phi
4 theta
5 psi


角度の組み合わせ

linfo->dthetaからphi, thetaの角度の組み合わせ数を返します。

int
lJcalculation(lmrcImageOrientationSearchBySimultaneousMinimizationInfo* linfo, int mode);


linfo->dthetaからphi, thetaの角度の組み合わせを算出し、planerotationAngleへ格納します。

void
lPlaneRotationAngleSet(lmrcImageOrientationSearchBySimultaneousMinimizationInfo* linfo, PlaneRotationAngle* planerotationAngle, int mode);


commonlinedataによる角度の組み合わせとPlaneRotationFileNumによる面内回転を含む角度の組み合わせをcommonlinedataWithPlaneRotationへ格納します。

void
lCommonLineDataSetInPlaneRotation(lmrcImageOrientationSearchBySimultaneousMinimizationInfo* linfo, CommonLineData* commonlinedata,
                                  CommonLineData* commonlinedataWithPlaneRotation, int PlaneRotationNum, int CommonLineNum, int i,
                                  int* PlaneRotationFileNum, mrcImage* ref, int mode);

commonlinedataWithPlaneRotationの0 ~ PlaneRotationNum - 1までの要素にcommonlinedataの組み合わせが格納され、以降の要素に面内回転を含めた角度の組み合わせが格納されます。

Workcommonlinedataの各要素のメンバの内、angleRef, angleOhter, numをそれぞれlinfoの各要素へ格納します。
また、面内回転によって重なる画像数を返します。

int
lCommonLinesDataSet(lmrcImageOrientationSearchBySimultaneousMinimizationInfo* linfo, CommonLineData* Workcommonlinedata, CommonLineData* commonlinedata, int mode);


コモンライン

Lの算出

double
lLcalculation(lmrcImageOrientationSearchBySimultaneousMinimizationInfo* linfo, mrcImage* refOneLineFT, mrcImage* otherOneLineFT, 
			  mrcImage* refOneLineSino, mrcImage* otherOneLineSino, CommonLineData* commonlinedata, double delU, int Num, int mode);

linfo->ModeLによりLの算出方法を選択できます。

linfo->ModeL 説明
0 differential of length
1 differential of phase
2 addition to derivation1D (multiply)
3 addition to derivation1D (difference)


linfo->ModeCalculationAreaによりLの算出範囲を設定します。

linfo->ModeCalculationArea 説明
0 全ての範囲
1 linfo->ThresholdCalculationArea/delU以下はカット


CommonLineInfoから全てのコモンライン数を返します。

int
lAllCommonLineCalculation(lmrcImageOrientationSearchBySimultaneousMinimizationInfo* linfo, lCommonLineCalculationInfo* CommonLineInfo, int N,
                          PlaneRotationAngle* planerotationAngle, CommonLineData* Workcommonlinedata, int j, int mode);


commonlinedata[i].angleRefからコモンラインの重みを算出し、commonlinedata[i].angularweightに格納します。

void
lAngularWeightCalculation(lmrcImageOrientationSearchBySimultaneousMinimizationInfo* linfo, CommonLineData* commonlinedata, int CommonLineNum, int mode);

linfo->ModeThresholdAngularにより角度の閾値を設定できます。

linfo->ModeThresholdAngular 角度の閾値
0 1.0e-4
1 M_PI/180
2 linfo->dpsi


1Dデータの抽出

入力in(実画像)から角度angle[radian]の成分のみを取り出し、outへ格納します。

void
lmrcImageOneLineGet(mrcImage* out, mrcImage* in, float angle, int mode);


入力in(フーリエ画像)から角度angle[radian]の成分のみを取り出し、outへ格納します。

void
lmrcImageFTOneLineGet(mrcImage* out, mrcImage* in, float angle, int mode);


フーリエ画像から指定した角度[radian]の成分のみを取り出します。

void
lmrcImageOneLineFTCreate(lmrcImageOrientationSearchBySimultaneousMinimizationInfo* linfo, mrcImage* ref, mrcImage* other,
                         mrcImage* refOneLineFT, mrcImage* otherOneLineFT, float RefAngle, float OtherAngle, int mode);

入力、角度、出力は下記のようになっています。

入力 角度 出力
ref RefAngle refOneLineFT
other OtherAngle otherOneLineFT


相関

入力inの参照refに対する重み付き相関値を返します。OhtsuMethodによる二値化データを閾値として使用しています。

double 
lmrcImageOneLineSinogramCorrelationAdditionalWeight(mrcImage* in, mrcImage* ref, int mode);

modeによって相関方法を選択できます。

mode 相関方法
2 multiply
3 difference