「lmrcImageOrientationSearchBySimultaneousMinimization(API)」の版間の差分
(→API) |
(→API) |
||
| (同じ利用者による、間の6版が非表示) | |||
| 行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, | ||
| 行103: | 行155: | ||
<tr> | <tr> | ||
<td>1</td> | <td>1</td> | ||
| − | <td>- | + | <td>linfo->ThresholdCalculationArea/delU以下はカット</td> |
</tr> | </tr> | ||
</table> | </table> | ||
| 行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> | <br> | ||
| 行147: | 行190: | ||
<br> | <br> | ||
| − | + | === 1Dデータの抽出 === | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
入力in(実画像)から角度angle[radian]の成分のみを取り出し、outへ格納します。 | 入力in(実画像)から角度angle[radian]の成分のみを取り出し、outへ格納します。 | ||
void | void | ||
| 行197: | 行225: | ||
<br> | <br> | ||
| + | === 相関 === | ||
| + | 入力inの参照refに対する重み付き相関値を返します。OhtsuMethodによる二値化データを閾値として使用しています。 | ||
double | double | ||
lmrcImageOneLineSinogramCorrelationAdditionalWeight(mrcImage* in, mrcImage* ref, int mode); | lmrcImageOneLineSinogramCorrelationAdditionalWeight(mrcImage* in, mrcImage* ref, int mode); | ||
| + | modeによって相関方法を選択できます。 | ||
| + | <table border=1> | ||
| + | <tr> | ||
| + | <th>mode</th> | ||
| + | <th>相関方法</th> | ||
| + | </tr> | ||
| + | <tr> | ||
| + | <td>2</td> | ||
| + | <td>multiply</td> | ||
| + | </tr> | ||
| + | <tr> | ||
| + | <td>3</td> | ||
| + | <td>difference</td> | ||
| + | </tr> | ||
| + | </table> | ||
| + | <br> | ||
2015年3月23日 (月) 08:12時点における最新版
DataManip/transform/src/lmrcImageOrientationSearchBySimultaneousMinimizationはmrcImageOrientationSearchBySimultaneousMinimizationのための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 |