「lmrcImageOrientationSearchBySimultaneousMinimization(API)」の版間の差分
提供: Eospedia
(→API) |
(→API) |
||
| 行103: | 行103: | ||
<tr> | <tr> | ||
<td>1</td> | <td>1</td> | ||
| − | <td>- | + | <td>linfo->ThresholdCalculationArea/delU以下はカット</td> |
</tr> | </tr> | ||
</table> | </table> | ||
2015年3月23日 (月) 04:53時点における版
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);
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 |
double lmrcImageOneLineSinogramCorrelationAdditionalWeight(mrcImage* in, mrcImage* ref, int mode);