「lmrcImageOrientationSearchBySimultaneousMinimization(API)」の版間の差分
(→API) |
(→API) |
||
行201: | 行201: | ||
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日 (月) 07:10時点における版
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
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);
linfo->dthetaからphi, thetaの角度の組み合わせ数を返します。
int lJcalculation(lmrcImageOrientationSearchBySimultaneousMinimizationInfo* linfo, int mode);
linfo->dthetaからphi, thetaの角度の組み合わせを算出し、planerotationAngleへ格納します。
void lPlaneRotationAngleSet(lmrcImageOrientationSearchBySimultaneousMinimizationInfo* linfo, PlaneRotationAngle* planerotationAngle, 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 |
void lCommonLineDataSetInPlaneRotation(lmrcImageOrientationSearchBySimultaneousMinimizationInfo* linfo, CommonLineData* commonlinedata, CommonLineData* commonlinedataWithPlaneRotation, int PlaneRotationNum, int CommonLineNum, int i, int* PlaneRotationFileNum, mrcImage* ref, int mode);
Workcommonlinedataの各要素のメンバの内、angleRef, angleOhter, numをそれぞれlinfoの各要素へ格納します。
また、面内回転によって重なる画像数を返します。
int lCommonLinesDataSet(lmrcImageOrientationSearchBySimultaneousMinimizationInfo* linfo, CommonLineData* Workcommonlinedata, CommonLineData* commonlinedata, int mode);
void lInitialDataFileRead(lmrcImageOrientationSearchBySimultaneousMinimizationInfo* linfo, FILE* fpt, int mode);
入力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 |