lFETOrientationSearchByFeatureAlignment(API)
DataManip/transform/src/lFETOrientationSearchByFeatureAlignmentはFETOrientationSearchByFeatureAlignmentのためのAPI です。
定数
#define SphereDevNum 2100
構造体
typedef struct lFETOrientationSearchByFeatureAlignmentInfo{ FILE* In; FILE* In2; int flagInType; // 0:Sinogram 1:FET int flagIn2; FILE* Out; int ldn; double srl; int flagInA, flagOutA, flagOut2D, flagOutLOG; int itmax, devmax, mitmax, mdevmax; FILE* InA; FILE* OutA; FILE* Out2D; FILE* OutLOG; int mode; }lFETOrientationSearchByFeatureAlignmentInfo;
座標
typedef struct lFETFeatureAlignmentCoord{ double x, y, z; }lFETFeatureAlignmentCoord;
特徴量
typedef struct lFETFeatureAlignmentFeature{ double t, w, a, k; }lFETFeatureAlignmentFeature;
メンバ | 説明 |
---|---|
t | |
w | 幅 |
a | 歪度 |
k | 尖度 |
typedef struct lFETFeatureAlignmentSpherePointInfo{ lFETFeatureAlignmentCoord self; lFETFeatureAlignmentFeature fets; lFETFeatureAlignmentFeature nfets; int nnum; }lFETFeatureAlignmentSpherePointInfo;
typedef struct lFETFeatureAlignmentImageInfo{ char imagename[256]; lFETFeatureAlignmentFeature* fets; double lenmax; double lenmin; double lensum; int posmax; int posmin; int flagLX; double interAngle; lFETFeatureAlignmentCoord norm, base, yoys; //lFETFeatureAlignmentImageInfoClass group; lFETFeatureAlignmentSpherePointInfo* spt[2]; int next; }lFETFeatureAlignmentImageInfo;
typedef struct lFETFeatureAlignmentImageQSInfo{ lFETFeatureAlignmentFeature** corset; int** cset; int* lxseries; int* nseries; int seed; int num; }lFETFeatureAlignmentImageQSInfo;
typedef struct lFETFeatureAlignmentSphereSquareInfo{ lFETFeatureAlignmentSpherePointInfo** sq; int center; }lFETFeatureAlignmentSphereSquareInfo;
curSwitch: 0, 1: データ切り替えのためのスイッチとして使用
typedef struct lFETFeatureAlignmentSphereInfo{ lFETFeatureAlignmentSphereSquareInfo sq6[2][6]; int curSwitch; int mode; }lFETFeatureAlignmentSphereInfo;
typedef struct lFETFeatureAlignmentInfo{ lFETFeatureAlignmentImageInfo* images; int imagey; int imagenum; double llong; double lmiddle; double lmiddles; double lshort; int ldn; double srl; double corave; FILE* OutLOG; //int groupnum[9]; //int groups[9]; int seedImage, smallImage; lFETFeatureAlignmentSphereInfo sph; //lFETFeatureAlignmentSpherePointInfo* spt; int mode; }lFETFeatureAlignmentInfo;
typedef struct lFETFeatureAlignment_multiselectInfo{ lFETFeatureAlignmentImageInfo* images; double max; }lFETFeatureAlignment_multiselectInfo;
typedef struct lFETFeatureAlignment_i11LMLXsInitInfo{ int lmList[10]; int lxList[10]; int pos[10][10]; //int rev[10][10]; double cvalue[10]; double cor[10][10][2]; }lFETFeatureAlignment_i11LMLXsInitInfo;
typedef struct lFETFeatureAlignment_i2LMsLXsInitInfo{ int ser[2][5][10]; int num[2]; }lFETFeatureAlignment_i2LMsLXsInitInfo;
typedef struct lFETFeatureAlignment_i1LssInitInfo{ lFETFeatureAlignmentImageInfo* images[10]; int** angle[10]; int** nums[10]; int** max; }lFETFeatureAlignment_i1LssInitInfo;
typedef struct lFETFeatureAlignment_initmSelecterInfo{ int mode; FILE* InA; int itmax,devmax,mitmax,mdevmax; lFETFeatureAlignmentInfo* faInfo; lFETFeatureAlignment_multiselectInfo multi; lFETFeatureAlignment_i11LMLXsInitInfo i11LMLXs; lFETFeatureAlignment_i2LMsLXsInitInfo i2LMsLXs; lFETFeatureAlignment_i1LssInitInfo i1Lss; }lFETFeatureAlignment_initmSelecterInfo;
API
メイン
extern void lFETOrientationSearchByFeatureAlignment(lFETOrientationSearchByFeatureAlignmentInfo in, int mode);
in->modeにより初期データを設定方法を選択できます。(参照:FETOrientationSearchByFeatureAlignment#-m の詳細)
初期設定
sphの初期設定を行います。
extern void lFETFeatureAlignmentSphereInit(lFETFeatureAlignmentSphereInfo* sph, int mode);
info->sphにて特徴量の設定を行います。
extern void lFETFeatureAlignmentSphereFeatureSet(lFETFeatureAlignmentInfo* info);
sphの分割データ(self, fets)をsph->curSwitchの切り替えて格納します。元のデータは解放します。(sph->curSwitchは新しい格納場所を指します)
extern void lFETFeatureAlignmentSphereDevide(lFETFeatureAlignmentSphereInfo* sph);
4 images selected by 90degree rule
extern void lFETFeatureAlignmentInitSet_i2PCA(lFETFeatureAlignmentInfo* info);
1 image of image has largest radius
info->seedImageをシードとする
extern void lFETFeatureAlignmentInitSet_i1L(lFETFeatureAlignmentInfo* info);
flagLX == targetをシードとする
extern void lFETFeatureAlignmentInitSet_i1Ls(lFETFeatureAlignmentInfo* info, int target);
extern void lFETFeatureAlignmentInitPreSet_i1Lss(lFETFeatureAlignmentInfo* info, lFETFeatureAlignment_i1LssInitInfo* out, int target); extern void lFETFeatureAlignmentInitSet_i1Lss(lFETFeatureAlignmentInfo* info, lFETFeatureAlignment_i1LssInitInfo* out, int mode); extern void lFETFeatureAlignmentInitPreSet_i2LMsLXs(lFETFeatureAlignmentInfo* info, lFETFeatureAlignment_i2LMsLXsInitInfo* initInfo); extern void lFETFeatureAlignmentInitSet_i2LMsLXs(lFETFeatureAlignmentInfo* info, lFETFeatureAlignment_i2LMsLXsInitInfo* initInfo, int targetM, int targetS); extern void lFETFeatureAlignmentInitSet_i2LM(lFETFeatureAlignmentInfo* info); extern void lFETFeatureAlignmentInitSet_i21LMLX(lFETFeatureAlignmentInfo* info);
all images with random angles consist
extern void lFETFeatureAlignmentInitSet_random(lFETFeatureAlignmentInfo* info);
2 images of image has largest radius
extern void lFETFeatureAlignmentInitSet_i2LXs(lFETFeatureAlignmentInfo* info, int target); extern void lFETFeatureAlignmentInitPreSet_i11LMLXs(lFETFeatureAlignmentInfo* info, lFETFeatureAlignment_i11LMLXsInitInfo* out); extern void lFETFeatureAlignmentInitSet_i11LMLXs(lFETFeatureAlignmentInfo* info, lFETFeatureAlignment_i11LMLXsInitInfo* initInfo, int target);
イテレーション
inから参照データリストを作成し、outへ格納します。
extern int lFETFeatureAlignmentSphereRefGenerate(lFETFeatureAlignmentInfo* in, lFETFeatureAlignmentImageInfo* out);
sphの縮退データをsph->curSwitchの切り替えて格納します。元のデータは解放します。(sph->curSwitchは新しい格納場所を指します)
extern void lFETFeatureAlignmentSphereDegenerate(lFETFeatureAlignmentSphereInfo* sph);
sphのある向きの特徴量を中心の特徴量にします。ある向きは(x, y, z)=(10, 7, 5)としています。
extern void lFETFeatureAlignmentSphereRandDisturb(lFETFeatureAlignmentSphereInfo* sph);
演算 ・コピー
aの要素をbのメンバへコピーします。
extern void lFETFAfeaturecpy1(lFETFeatureAlignmentFeature* b, double* a);
以下の対応でコピーします。
bのメンバ | aの要素 |
---|---|
b->w | a[0] |
b->a | a[1] |
b->k | a[2] |
aのメンバをbのメンバへ加えます。(w, a, k)
extern void lFETFAfeatureAdd(lFETFeatureAlignmentFeature* b, lFETFeatureAlignmentFeature* a);
2つの座標a, b間の距離を返します。
extern double lFETFAcalcCoordDistance(lFETFeatureAlignmentCoord a, lFETFeatureAlignmentCoord b);
4つの座標a, b, c, dを合計し、正規化した座標を返します。
extern lFETFeatureAlignmentCoord lFETFAcalcCoordSum(lFETFeatureAlignmentCoord a, lFETFeatureAlignmentCoord b, lFETFeatureAlignmentCoord c, lFETFeatureAlignmentCoord d);
aの座標とmodeを掛けた値をbの要素へ格納します。
extern void lFATFAcoordcpy2(lFETFeatureAlignmentCoord* a, double* b, int mode);
以下の対応で格納します。
bの要素 | 値 |
---|---|
b[0] | a->x*mode |
b[1] | a->y*mode |
b[2] | a->z*mode |
aの要素とmodeを掛けた値をbの座標へ格納します。
extern void lFETFAcoordcpy1(lFETFeatureAlignmentCoord* b, double* a, int mode);
以下の対応で格納します。
bのメンバ | 値 |
---|---|
x | a[0]*mode |
y | a[1]*mode |
z | a[2]*mode |
aとbの外積をansへ格納します。(2軸に直交するベクトルを算出)
extern void lFETFAvectorProduct1(double* a, double* b, double* ans);