解説クラスCopyClear(9ダッシュ)
解説クラスCopyClear(9ダッシュ)
2024年3月7
この講義は解説『解説クラスCopyClear(9)』の
直接の続きです!
解説『解説クラスCopyClear(9)』が余りに巨大
に成り過ぎたので編集作業が大変に成ったから、「(9)」
の直接の続きとします!
private: // 回転(補正無)
void makeRotateTable( // 画像回転用座標テーブル作成
double a, // 回転角:Radian
double x1, // S配列回転中心
double y1, // S配列回転中心
double x2, // D配列回転中心
double y2, // D配列回転中心
TypeXYI *base, // S配列BASExytbl
TypeXYI *offset, // S配列オフxytbl
int h, // D配列水平幅
int v, // D配列垂直幅
int dataSize ); // 画素サイズ
int checkRotateAB( // 回転用始終点検査
TypeXYI *base, // S配列BASExytbl
int offx, // S配列Offsetx
int offy, // S配列Offsety
int hs, // S配列水平幅
int vs, // S配列垂直幅
int h, // D配列水平幅
int& resX1, // D配列始点x座標:返値
int& resX2, // D配列終点x座標:返値
int step, // 検査ステップ
int sw=TRUE ); // 四捨五入SW(真:有効=省略時)
void rotateXByte( // 回転処理:X方向:BYTE
TypeXYI *base, // S配列BASExytbl
int offx, // S配列Offsetx
int offy, // S配列Offsety
BYTE *ps, // S配列 Ptr:始点
BYTE *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl ); // 増加幅:S
void rotateXByteColor( // 回転処理:X方向:BYTE
TypeXYI *base, // S配列BASExytbl
int offx, // S配列Offsetx
int offy, // S配列Offsety
BYTE *ps, // S配列 Ptr:始点
BYTE *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl ); // 増加幅:S
void rotateXByteExt( // 回転処理:X方向:BYTE
TypeXYI *base, // S配列BASExytbl
int offx, // S配列Offsetx
int offy, // S配列Offsety
BYTE *ps, // S配列 Ptr:始点
BYTE *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
void rotateByte( // 回転処理:BYTE
TypeXYI *base, // S配列BASExytbl
TypeXYI *off, // S配列オフxytbl
BYTE *ps, // S配列 Ptr:始点
int hs, // S配列水平幅
int vs, // S配列垂直幅
BYTE *pd, // D配列 Ptr
int h, // D配列水平幅
int v, // D配列垂直幅
int sl, // 増加幅:S
int dl, // 増加幅:D
int dataSize ); // 画素サイズ
void rotateXShort( // 回転処理:X方向:short
TypeXYI *base, // S配列BASExytbl
int offx, // S配列Offsetx
int offy, // S配列Offsety
short *ps, // S配列 Ptr:始点
short *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl ); // 増加幅:S
void rotateXShortColor( // 回転処理:X方向:short
TypeXYI *base, // S配列BASExytbl
int offx, // S配列Offsetx
int offy, // S配列Offsety
short *ps, // S配列 Ptr:始点
short *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl ); // 増加幅:S
void rotateXShortExt( // 回転処理:X方向:short
TypeXYI *base, // S配列BASExytbl
int offx, // S配列Offsetx
int offy, // S配列Offsety
short *ps, // S配列 Ptr:始点
short *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
void rotateShort( // 回転処理:short
TypeXYI *base, // S配列BASExytbl
TypeXYI *off, // S配列オフxytbl
short *ps, // S配列 Ptr:始点
int hs, // S配列水平幅
int vs, // S配列垂直幅
short *pd, // D配列 Ptr
int h, // D配列水平幅
int v, // D配列垂直幅
int sl, // 増加幅:S
int dl, // 増加幅:D
int dataSize ); // 画素サイズ
void rotateXLong( // 回転処理:X方向:long
TypeXYI *base, // S配列BASExytbl
int offx, // S配列Offsetx
int offy, // S配列Offsety
long *ps, // S配列 Ptr:始点
long *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl ); // 増加幅:S
void rotateXLongColor( // 回転処理:X方向:long
TypeXYI *base, // S配列BASExytbl
int offx, // S配列Offsetx
int offy, // S配列Offsety
long *ps, // S配列 Ptr:始点
long *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl ); // 増加幅:S
void rotateXLongExt( // 回転処理:X方向:long
TypeXYI *base, // S配列BASExytbl
int offx, // S配列Offsetx
int offy, // S配列Offsety
long *ps, // S配列 Ptr:始点
long *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
void rotateLong( // 回転処理:long
TypeXYI *base, // S配列BASExytbl
TypeXYI *off, // S配列オフxytbl
long *ps, // S配列 Ptr:始点
int hs, // S配列水平幅
int vs, // S配列垂直幅
long *pd, // D配列 Ptr
int h, // D配列水平幅
int v, // D配列垂直幅
int sl, // 増加幅:S
int dl, // 増加幅:D
int dataSize ); // 画素サイズ
void rotateXByteInterpolate( // 回転処理:X:BYTE:補間
TypeXYI *base, // S配列BASExytbl
int offx, // S配列Offsetx
int offy, // S配列Offsety
BYTE *ps, // S配列 Ptr:始点
BYTE *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
void rotateXShortInterpolate( // 回転処理:X:short:補間
TypeXYI *base, // S配列BASExytbl
int offx, // S配列Offsetx
int offy, // S配列Offsety
short *ps, // S配列 Ptr:始点
short *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
void rotateXLongInterpolate( // 回転処理:X:long:補間
TypeXYI *base, // S配列BASExytbl
int offx, // S配列Offsetx
int offy, // S配列Offsety
long *ps, // S配列 Ptr:始点
long *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
void rotateXFloatInterpolate( // 回転処理:X:単精度:補間
TypeXYI *base, // S配列BASExytbl
int offx, // S配列Offsetx
int offy, // S配列Offsety
float *ps, // S配列 Ptr:始点
float *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
void rotateXByteInterpolateCheck( // 回転処理:X:BYTE:補間&検査
int endX, // X座標最終
int endY, // Y座標最終
TypeXYI *base, // S配列BASExytbl
int offx, // S配列Offsetx
int offy, // S配列Offsety
BYTE *ps, // S配列 Ptr:始点
BYTE *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
void rotateXShortInterpolateCheck( // 回転処理:X:short:補間&検査
int endX, // X座標最終
int endY, // Y座標最終
TypeXYI *base, // S配列BASExytbl
int offx, // S配列Offsetx
int offy, // S配列Offsety
short *ps, // S配列 Ptr:始点
short *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
void rotateXLongInterpolateCheck( // 回転処理:X:long:補間&検査
int endX, // X座標最終
int endY, // Y座標最終
TypeXYI *base, // S配列BASExytbl
int offx, // S配列Offsetx
int offy, // S配列Offsety
long *ps, // S配列 Ptr:始点
long *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
void rotateXFloatInterpolateCheck( // 回転処理:X:単精度:補間&検査
int endX, // X座標最終
int endY, // Y座標最終
TypeXYI *base, // S配列BASExytbl
int offx, // S配列Offsetx
int offy, // S配列Offsety
float *ps, // S配列 Ptr:始点
float *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
void rotateByteInterpolate( // 回転処理:BYTE:補間
TypeXYI *base, // S配列BASExytbl
TypeXYI *off, // S配列オフxytbl
BYTE *ps, // S配列 Ptr:始点
int hs, // S配列水平幅
int vs, // S配列垂直幅
BYTE *pd, // D配列 Ptr
int h, // D配列水平幅
int v, // D配列垂直幅
int sl, // 増加幅:S
int dl, // 増加幅:D
int dataSize ); // 画素サイズ
void rotateShortInterpolate( // 回転処理:short:補間
TypeXYI *base, // S配列BASExytbl
TypeXYI *off, // S配列オフxytbl
short *ps, // S配列 Ptr:始点
int hs, // S配列水平幅
int vs, // S配列垂直幅
short *pd, // D配列 Ptr
int h, // D配列水平幅
int v, // D配列垂直幅
int sl, // 増加幅:S
int dl, // 増加幅:D
int dataSize ); // 画素サイズ
void rotateLongInterpolate( // 回転処理:long:補間
TypeXYI *base, // S配列BASExytbl
TypeXYI *off, // S配列オフxytbl
long *ps, // S配列 Ptr:始点
int hs, // S配列水平幅
int vs, // S配列垂直幅
long *pd, // D配列 Ptr
int h, // D配列水平幅
int v, // D配列垂直幅
int sl, // 増加幅:S
int dl, // 増加幅:D
int dataSize ); // 画素サイズ
void rotateFloatInterpolate( // 回転処理:単精度:補間
TypeXYI *base, // S配列BASExytbl
TypeXYI *off, // S配列オフxytbl
float *ps, // S配列 Ptr:始点
int hs, // S配列水平幅
int vs, // S配列垂直幅
float *pd, // D配列 Ptr
int h, // D配列水平幅
int v, // D配列垂直幅
int sl, // 増加幅:S
int dl, // 増加幅:D
int dataSize ); // 画素サイズ
private: // 回転(完全実数化)
void makeRotateTableReal( // 画像回転用座標テーブル作成
double a, // 回転角:Radian
double x1, // S配列回転中心
double y1, // S配列回転中心
double x2, // D配列回転中心
double y2, // D配列回転中心
TypeXYD *base, // S配列BASExytbl
TypeXYD *offset, // S配列オフxytbl
int h, // D配列水平幅
int v, // D配列垂直幅
int dataSize ); // 画素サイズ
int checkRotateABReal( // 回転用始終点検査
TypeXYD *base, // S配列BASExytbl
double offx, // S配列Offsetx
double offy, // S配列Offsety
int hs, // S配列水平幅
int vs, // S配列垂直幅
int h, // D配列水平幅
int& resX1, // D配列始点x座標:返値
int& resX2, // D配列終点x座標:返値
int step ); // 検査ステップ
void rotateXByteReal( // 回転処理:X:BYTE:実数
TypeXYD *base, // S配列BASExytbl
double offx, // S配列Offsetx
double offy, // S配列Offsety
BYTE *ps, // S配列 Ptr:始点
BYTE *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
void rotateXShortReal( // 回転処理:X:short:実数
TypeXYD *base, // S配列BASExytbl
double offx, // S配列Offsetx
double offy, // S配列Offsety
short *ps, // S配列 Ptr:始点
short *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
void rotateXLongReal( // 回転処理:X:long:実数
TypeXYD *base, // S配列BASExytbl
double offx, // S配列Offsetx
double offy, // S配列Offsety
long *ps, // S配列 Ptr:始点
long *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
void rotateXFloatReal( // 回転処理:X:単精度:実数
TypeXYD *base, // S配列BASExytbl
double offx, // S配列Offsetx
double offy, // S配列Offsety
float *ps, // S配列 Ptr:始点
float *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
void rotateXByteRealCheck( // 回転処理:X:BYTE:実数&検査
int endX, // X座標最終
int endY, // Y座標最終
TypeXYD *base, // S配列BASExytbl
double offx, // S配列Offsetx
double offy, // S配列Offsety
BYTE *ps, // S配列 Ptr:始点
BYTE *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
void rotateXShortRealCheck( // 回転処理:X:short:実数&検査
int endX, // X座標最終
int endY, // Y座標最終
TypeXYD *base, // S配列BASExytbl
double offx, // S配列Offsetx
double offy, // S配列Offsety
short *ps, // S配列 Ptr:始点
short *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
void rotateXLongRealCheck( // 回転処理:X:long:実数&検査
int endX, // X座標最終
int endY, // Y座標最終
TypeXYD *base, // S配列BASExytbl
double offx, // S配列Offsetx
double offy, // S配列Offsety
long *ps, // S配列 Ptr:始点
long *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
void rotateXFloatRealCheck( // 回転処理:X:単精度:実数&検査
int endX, // X座標最終
int endY, // Y座標最終
TypeXYD *base, // S配列BASExytbl
double offx, // S配列Offsetx
double offy, // S配列Offsety
float *ps, // S配列 Ptr:始点
float *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
void rotateByteReal( // 回転処理:BYTE:実数
TypeXYD *base, // S配列BASExytbl
TypeXYD *off, // S配列オフxytbl
BYTE *ps, // S配列 Ptr:始点
int hs, // S配列水平幅
int vs, // S配列垂直幅
BYTE *pd, // D配列 Ptr
int h, // D配列水平幅
int v, // D配列垂直幅
int sl, // 増加幅:S
int dl, // 増加幅:D
int dataSize ); // 画素サイズ
void rotateShortReal( // 回転処理:short:実数
TypeXYD *base, // S配列BASExytbl
TypeXYD *off, // S配列オフxytbl
short *ps, // S配列 Ptr:始点
int hs, // S配列水平幅
int vs, // S配列垂直幅
short *pd, // D配列 Ptr
int h, // D配列水平幅
int v, // D配列垂直幅
int sl, // 増加幅:S
int dl, // 増加幅:D
int dataSize ); // 画素サイズ
void rotateLongReal( // 回転処理:long:実数
TypeXYD *base, // S配列BASExytbl
TypeXYD *off, // S配列オフxytbl
long *ps, // S配列 Ptr:始点
int hs, // S配列水平幅
int vs, // S配列垂直幅
long *pd, // D配列 Ptr
int h, // D配列水平幅
int v, // D配列垂直幅
int sl, // 増加幅:S
int dl, // 増加幅:D
int dataSize ); // 画素サイズ
void rotateFloatReal( // 回転処理:単精度:実数
TypeXYD *base, // S配列BASExytbl
TypeXYD *off, // S配列オフxytbl
float *ps, // S配列 Ptr:始点
int hs, // S配列水平幅
int vs, // S配列垂直幅
float *pd, // D配列 Ptr
int h, // D配列水平幅
int v, // D配列垂直幅
int sl, // 増加幅:S
int dl, // 増加幅:D
int dataSize ); // 画素サイズ
private: // 正規化相関関数☆4×4素専用関数☆
double Ave4M( // 4×m画素平均値
BYTE* ptrA, // A配列:処理ポインタ
int incA, // A配列:増加幅
int m ); // 4×mのm
double Corr4M( // 4×M画素正規化相関
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int m ); // 4×MのM
double Corr4MFirst( // 4×M画素正規化相関:連続相関の最初
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int m, // 4×MのM
int& avA, // 返値:A配列の平均値
int& avB, // 返値:B配列の平均値
int& sumA ); // 返値:A配列の分散値(自己相関)
double Corr4MSecond( // 4×M画素正規化相関:連続相関の2番目以降
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int m, // 4×MのM
int avA, // A配列の平均値
int& avB, // 返値:B配列の平均値
int sumA ); // A配列の分散値(自己相関)
int Corr4MMyself( // 4×M画素正規化相関:自己相関(分散)
BYTE* ptrA, // A配列:処理ポインタ
int incA, // A配列:増加幅
int m ); // 4×MのM
int Corr4MMyself( // 4×M画素正規化相関:自己相関(分散)+平均
BYTE* ptrA, // A配列:処理ポインタ
int incA, // A配列:増加幅
int m, // 4×MのM
int& ave ); // 結果:平均値
double Corr44( // 4×4画素正規化相関
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB ); // B配列:増加幅
double Corr44First( // 4×4画素正規化相関:連続相関の最初
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int& avA, // 返値:A配列の平均値
int& avB, // 返値:B配列の平均値
int& sumA ); // 返値:A配列の分散値(自己相関)
double Corr44Second( // 4×4画素正規化相関:連続相関の2番目以降
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int avA, // A配列の平均値
int& avB, // 返値:B配列の平均値
int sumA ); // A配列の分散値(自己相関)
int Corr44Myself( // 4×4画素正規化相関:自己相関(分散)
BYTE* ptrA, // A配列:処理ポインタ
int incA ); // A配列:増加幅
int Corr44Myself( // 4×4画素正規化相関:自己相関(分散)+平均
BYTE* ptrA, // A配列:処理ポインタ
int incA, // A配列:増加幅
int& ave ); // 結果:平均値
private: // 正規化相関関数☆8×8と8×M画素専用関数☆
double Ave8M( // 8×m画素平均値
BYTE* ptrA, // A配列:処理ポインタ
int incA, // A配列:増加幅
int m ); // 8×mのm
double Corr8M( // 8×M画素正規化相関
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int m ); // 8×MのM
double Corr8MFirst( // 8×M画素正規化相関:連続相関の最初
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int m, // 8×MのM
int& avA, // 返値:A配列の平均値
int& avB, // 返値:B配列の平均値
int& sumA ); // 返値:A配列の分散値(自己相関)
double Corr8MSecond( // 8×M画素正規化相関:連続相関の2番目以降
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int m, // 8×MのM
int avA, // A配列の平均値
int& avB, // 返値:B配列の平均値
int sumA ); // A配列の分散値(自己相関)
int Corr8MMyself( // 8×M画素正規化相関:自己相関(分散)
BYTE* ptrA, // A配列:処理ポインタ
int incA, // A配列:増加幅
int m ); // 8×MのM
int Corr8MMyself( // 8×M画素正規化相関:自己相関(分散)+平均
BYTE* ptrA, // A配列:処理ポインタ
int incA, // A配列:増加幅
int m, // 8×MのM
int& ave ); // 結果:平均値
double Corr88( // 8×8画素正規化相関
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB ); // B配列:増加幅
double Corr88First( // 8×8画素正規化相関:連続相関の最初
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int& avA, // 返値:A配列の平均値
int& avB, // 返値:B配列の平均値
int& sumA ); // 返値:A配列の分散値(自己相関)
double Corr88Second( // 8×8画素正規化相関:連続相関の2番目以降
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int avA, // A配列の平均値
int& avB, // 返値:B配列の平均値
int sumA ); // A配列の分散値(自己相関)
int Corr88Myself( // 8×8画素正規化相関:自己相関(分散)
BYTE* ptrA, // A配列:処理ポインタ
int incA ); // A配列:増加幅
int Corr88Myself( // 8×8画素正規化相関:自己相関(分散)+平均
BYTE* ptrA, // A配列:処理ポインタ
int incA, // A配列:増加幅
int& ave ); // 結果:平均値
void Reduct88Ave( // 8×8画素正規化相関用画像圧縮:平均値
BYTE* ptrS, // 元配列 :処理ポインタ
BYTE* ptrD, // 圧縮後配列:処理ポインタ
int incS, // 元配列 :増加幅
int incD ); // 圧縮後配列:増加幅
void Reduct88Min( // 8×8画素正規化相関用画像圧縮:最小値
BYTE* ptrS, // 元配列 :処理ポインタ
BYTE* ptrD, // 圧縮後配列:処理ポインタ
int incS, // 元配列 :増加幅
int incD ); // 圧縮後配列:増加幅
void Reduct88Max( // 8×8画素正規化相関用画像圧縮:最大値
BYTE* ptrS, // 元配列 :処理ポインタ
BYTE* ptrD, // 圧縮後配列:処理ポインタ
int incS, // 元配列 :増加幅
int incD ); // 圧縮後配列:増加幅
void Reduct88Two( // 8×8画素正規化相関用画像圧縮:2番目
BYTE* ptrS, // 元配列 :処理ポインタ
BYTE* ptrD, // 圧縮後配列:処理ポインタ
int incS, // 元配列 :増加幅
int incD ); // 圧縮後配列:増加幅
void Reduct88Three( // 8×8画素正規化相関用画像圧縮:3番目
BYTE* ptrS, // 元配列 :処理ポインタ
BYTE* ptrD, // 圧縮後配列:処理ポインタ
int incS, // 元配列 :増加幅
int incD ); // 圧縮後配列:増加幅
void Reduct88Skip( // 8×8画素正規化相関用画像圧縮:間引き
BYTE* ptrS, // 元配列 :処理ポインタ
BYTE* ptrD, // 圧縮後配列:処理ポインタ
int incS, // 元配列 :増加幅
int incD ); // 圧縮後配列:増加幅
void VectorCorr88( // 8×8画素正規化相関による動線ベクトル算出
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int nOffsetH, // 水平方向オフセット(左右ずれ)
int nOffsetV, // 垂直方向オフセット(上下ずれ)
double* vecX, // X方向結果
double* vecY ); // Y方向結果
private: // 正規化相関関数☆n×m画素専用関数☆
double AveNM( // n×m画素平均値
BYTE* ptrA, // A配列:処理ポインタ
int incA, // A配列:増加幅
int n, // n×mのn
int m ); // n×mのm
double CorrNM( // n×m画素正規化相関
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int n, // n×mのn
int m ); // n×mのm
double CorrNMFirst( // n×m画素正規化相関:連続相関の最初
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int n, // n×mのn
int m, // n×mのm
int& avA, // 返値:A配列の平均値
int& avB, // 返値:B配列の平均値
int& sumA ); // 返値:A配列の分散値(自己相関)
double CorrNMSecond( // n×m画素正規化相関:連続相関の2番目以降
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int n, // n×mのn
int m, // n×mのm
int avA, // A配列の平均値
int& avB, // 返値:B配列の平均値
int sumA ); // A配列の分散値(自己相関)
double CorrNMCheck( // n×m画素正規化相関:正/反検査
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int n, // n×mのn
int m, // n×mのm
int avA, // A配列の平均値
int avB ); // B配列の平均値
int CorrNMMyself( // n×m画素正規化相関:自己相関(分散)
BYTE* ptrA, // A配列:処理ポインタ
int incA, // A配列:増加幅
int n, // n×mのn
int m ); // n×mのm
int CorrNMMyself( // n×m画素正規化相関:自己相関(分散)+平均
BYTE* ptrA, // A配列:処理ポインタ
int incA, // A配列:増加幅
int n, // n×mのn
int m, // n×mのm
int& ave ); // 結果:平均値
void ReductNMAve( // n×m画素正規化相関用画像圧縮:平均値
BYTE* ptrS, // 元配列 :処理ポインタ
BYTE* ptrD, // 圧縮後配列:処理ポインタ
int incS, // 元配列 :増加幅
int incD, // 圧縮後配列:増加幅
int n, // n×mのn
int m ); // n×mのm
void ReductNMMin( // n×m画素正規化相関用画像圧縮:最小値
BYTE* ptrS, // 元配列 :処理ポインタ
BYTE* ptrD, // 圧縮後配列:処理ポインタ
int incS, // 元配列 :増加幅
int incD, // 圧縮後配列:増加幅
int n, // n×mのn
int m ); // n×mのm
void ReductNMMax( // n×m画素正規化相関用画像圧縮:最大値
BYTE* ptrS, // 元配列 :処理ポインタ
BYTE* ptrD, // 圧縮後配列:処理ポインタ
int incS, // 元配列 :増加幅
int incD, // 圧縮後配列:増加幅
int n, // n×mのn
int m ); // n×mのm
void ReductNMTwo( // n×m画素正規化相関用画像圧縮:2番目
BYTE* ptrS, // 元配列 :処理ポインタ
BYTE* ptrD, // 圧縮後配列:処理ポインタ
int incS, // 元配列 :増加幅
int incD, // 圧縮後配列:増加幅
int n, // n×mのn
int m ); // n×mのm
void ReductNMThree( // n×m画素正規化相関用画像圧縮:3番目
BYTE* ptrS, // 元配列 :処理ポインタ
BYTE* ptrD, // 圧縮後配列:処理ポインタ
int incS, // 元配列 :増加幅
int incD, // 圧縮後配列:増加幅
int n, // n×mのn
int m ); // n×mのm
void ReductNMSkip( // n×m画素正規化相関用画像圧縮:間引き
BYTE* ptrS, // 元配列 :処理ポインタ
BYTE* ptrD, // 圧縮後配列:処理ポインタ
int incS, // 元配列 :増加幅
int incD, // 圧縮後配列:増加幅
int n, // n×mのn
int m ); // n×mのm
void VectorCorrNM( // n×m画素正規化相関による動線ベクトル算出
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int n, // n×mのn
int m, // n×mのm
int nOffsetH, // 水平方向オフセット(左右ずれ)
int nOffsetV, // 垂直方向オフセット(上下ずれ)
double* vecX, // X方向結果
double* vecY ); // Y方向結果
private: // 正規化相関関数☆n×m画素専用関数:n×mが大容量の場合☆
double CorrNMLarge( // n×m画素正規化相関
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int n, // n×mのn
int m ); // n×mのm
double CorrNMLargeFirst( // n×m画素正規化相関:連続相関の最初
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int n, // n×mのn
int m, // n×mのm
int& avA, // 返値:A配列の平均値
int& avB, // 返値:B配列の平均値
double& sumA ); // 返値:A配列の分散値(自己相関)
double CorrNMLargeSecond( // n×m画素正規化相関:連続相関の2番目以降
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int n, // n×mのn
int m, // n×mのm
int avA, // A配列の平均値
int& avB, // 返値:B配列の平均値
double sumA ); // A配列の分散値(自己相関)
double CorrNMLargeMyself( // n×m画素正規化相関:自己相関(分散)
BYTE* ptrA, // A配列:処理ポインタ
int incA, // A配列:増加幅
int n, // n×mのn
int m ); // n×mのm
private: // 正規化相関関数☆n×m画素専用関数:マスク付きの場合☆
// M配列=マスク
int CountNMMask( // n×m有効画素数算出
BYTE* ptrM, // M配列:処理ポインタ
int incM, // M配列:増加幅
int n, // n×mのn
int m ); // n×mのm
double AveNMMask( // n×m画素平均値
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrM, // M配列:処理ポインタ
int incA, // A配列:増加幅
int incM, // M配列:増加幅
int n, // n×mのn
int m, // n×mのm
int cnt ); // M配列(マスク画像)有効数
double CorrNMMask( // n×m画素正規化相関
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
BYTE* ptrM, // M配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int incM, // M配列:増加幅
int n, // n×mのn
int m, // n×mのm
int cnt ); // M配列(マスク画像)有効数
double CorrNMMaskFirst( // n×m画素正規化相関:連続相関の最初
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
BYTE* ptrM, // M配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int incM, // M配列:増加幅
int n, // n×mのn
int m, // n×mのm
int& avA, // 返値:A配列の平均値
int& avB, // 返値:B配列の平均値
double& sumA, // 返値:A配列の分散値(自己相関)
int cnt ); // M配列(マスク画像)有効数
double CorrNMMaskSecond( // n×m画素正規化相関:連続相関の2番目以降
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
BYTE* ptrM, // M配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int incM, // M配列:増加幅
int n, // n×mのn
int m, // n×mのm
int avA, // A配列の平均値
int& avB, // 返値:B配列の平均値
double sumA, // A配列の分散値(自己相関)
int cnt ); // M配列(マスク画像)有効数
double CorrNMMaskCheck( // n×m画素正規化相関:正/反検査
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
BYTE* ptrM, // M配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int incM, // M配列:増加幅
int n, // n×mのn
int m, // n×mのm
int avA, // A配列の平均値
int avB, // B配列の平均値
int cnt ); // M配列(マスク画像)有効数
double CorrNMMaskMyself( // n×m画素正規化相関:自己相関(分散)
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrM, // M配列:処理ポインタ
int incA, // A配列:増加幅
int incM, // M配列:増加幅
int n, // n×mのn
int m, // n×mのm
int cnt ); // M配列(マスク画像)有効数
private: // サーチ用小品
void measureXYstringFere( // 座標列からフェレ情報算出
TypeCorr bufxy[], // 座標格納ポインタ(サーチ用)
int n, // 座標個数
int& x, // X座標(結果格納)
int& y, // Y座標(結果格納)
int& h, // 水平幅(結果格納)
int& v ); // 垂直幅(結果格納)
void measureXYstringFere( // 座標列からフェレ情報算出
TypeCorrIX bufxy[], // 座標格納ポインタ(サーチ用)
int n, // 座標個数
int& x, // X座標(結果格納)
int& y, // Y座標(結果格納)
int& h, // 水平幅(結果格納)
int& v ); // 垂直幅(結果格納)
int excludeOverlapXYBase( // 重複座標の排除:255個まで対応:高速
TypeCorr bufxy[], // 座標格納ポインタ(サーチ用)
int n, // 座標個数
int xDistance, // X方向距離
int yDistance ); // Y方向距離
int excludeOverlapXYLarge( // 重複座標の排除:65535個まで対応
TypeCorr bufxy[], // 座標格納ポインタ(サーチ用)
int n, // 座標個数
int xDistance, // X方向距離
int yDistance ); // Y方向距離
int excludeOverlapXYSuper( // 重複座標の排除:65536個以上対応
TypeCorr bufxy[], // 座標格納ポインタ(サーチ用)
int n, // 座標個数
int xDistance, // X方向距離
int yDistance ); // Y方向距離
int excludeOverlapXY0Base( // 同座標の排除:255個まで対応:高速
TypeCorr bufxy[], // 座標格納ポインタ(サーチ用)
int n ); // 座標個数
int excludeOverlapXY0Large( // 同座標の排除:65535個まで対応
TypeCorr bufxy[], // 座標格納ポインタ(サーチ用)
int n ); // 座標個数
int excludeOverlapXY0Super( // 同座標の排除:65536個以上対応
TypeCorr bufxy[], // 座標格納ポインタ(サーチ用)
int n ); // 座標個数
int excludeOverlapXYBase( // 重複座標の排除:255個まで対応:高速
TypeCorrIX bufxy[], // 座標格納ポインタ(サーチ用)
int n, // 座標個数
int xDistance, // X方向距離
int yDistance ); // Y方向距離
int excludeOverlapXYLarge( // 重複座標の排除:65535個まで対応
TypeCorrIX bufxy[], // 座標格納ポインタ(サーチ用)
int n, // 座標個数
int xDistance, // X方向距離
int yDistance ); // Y方向距離
int excludeOverlapXYSuper( // 重複座標の排除:65536個以上対応
TypeCorrIX bufxy[], // 座標格納ポインタ(サーチ用)
int n, // 座標個数
int xDistance, // X方向距離
int yDistance ); // Y方向距離
int excludeOverlapXY0Base( // 同座標の排除:255個まで対応:高速
TypeCorrIX bufxy[], // 座標格納ポインタ(サーチ用)
int n ); // 座標個数
int excludeOverlapXY0Large( // 同座標の排除:65535個まで対応
TypeCorrIX bufxy[], // 座標格納ポインタ(サーチ用)
int n ); // 座標個数
int excludeOverlapXY0Super( // 同座標の排除:65536個以上対応
TypeCorrIX bufxy[], // 座標格納ポインタ(サーチ用)
int n ); // 座標個数
private: // 自己相関用小品
int makeCorrImageMyselfExtend( // 自己相関:拡張用座標作成
TypeArray* image, // 画像
TypeXY* bufXY, // 結果座標バッファー
int* bufL, // 結果バッファー:概要
int maxN, // 最大結果数
int nStepH, // 水平方向次点ステップ数
int nStepV, // 垂直方向次点ステップ数
double tA, // 最小概要しきい値
double tB, // 最大概要しきい値
int nOffsetH, // 水平方向オフセット
int nOffsetV ); // 垂直方向オフセット
(4-12-230)関数「void makeRotateTable(
double a,double x1,double y1,
double x2,double y2,
TypeXYI* base,TypeXYI*offset,
int h,int v,int dataSize);」
void makeRotateTable( // 画像回転用座標テーブル作成
double a, // 回転角:Radian
double x1, // S配列回転中心
double y1, // S配列回転中心
double x2, // D配列回転中心
double y2, // D配列回転中心
TypeXYI *base, // S配列BASExytbl
TypeXYI *offset, // S配列オフxytbl
int h, // D配列水平幅
int v, // D配列垂直幅
int dataSize ); // 画素サイズ
関数「RotateImage()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear320.cpp」が
対象】します!
(4-12-231)関数「int checkRotateAB(
TypeXYI* base,
int offx,int offy,int hs,int vs,int h,
int &resX1,int &resX2,
int step,int sw=TRUE);」
int checkRotateAB( // 回転用始終点検査
TypeXYI *base, // S配列BASExytbl
int offx, // S配列Offsetx
int offy, // S配列Offsety
int hs, // S配列水平幅
int vs, // S配列垂直幅
int h, // D配列水平幅
int& resX1, // D配列始点x座標:返値
int& resX2, // D配列終点x座標:返値
int step, // 検査ステップ
int sw=TRUE ); // 四捨五入SW(真:有効=省略時)
関数「rotateBYTE ()」のサブルーチンです!
関数「rotateShort ()」のサブルーチンです!
関数「rotateLong()」のサブルーチンです!
関数「RotateImage()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear320.cpp」が
対象】します!
(4-12-232)関数「void rotateXBYTE (
TypeXYI* base,int offx,int offy,
BYTE *ps,BYTE *pd,int len,int sl);」
void rotateXByte( // 回転処理:X方向:BYTE
TypeXYI *base, // S配列BASExytbl
int offx, // S配列Offsetx
int offy, // S配列Offsety
BYTE *ps, // S配列 Ptr:始点
BYTE *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl ); // 増加幅:S
関数「rotateBYTE ()」のサブルーチンです!
関数「RotateImage()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear320.cpp」が
対象】します!
(4-12-233)関数「void
rotateXByteColor(
TypeXYI* base,int offx,int offy,
BYTE *ps,BYTE *pd,int len,int sl);」
void rotateXByteColor( // 回転処理:X方向:BYTE
TypeXYI *base, // S配列BASExytbl
int offx, // S配列Offsetx
int offy, // S配列Offsety
BYTE *ps, // S配列 Ptr:始点
BYTE *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl ); // 増加幅:S
関数「rotateByte ()」のサブルーチンです!
関数「RotateImage()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear320.cpp」が
対象】します!
(4-12-234)関数「void rotateXByteExt(
TypeXY I*base,int offx,int offy,
BYTE *ps,BYTE *pd,int len,int sl,int dataSize);」
void rotateXByteExt( // 回転処理:X方向:BYTE
TypeXYI *base, // S配列BASExytbl
int offx, // S配列Offsetx
int offy, // S配列Offsety
BYTE *ps, // S配列 Ptr:始点
BYTE *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
関数「rotateByte ()」のサブルーチンです!
関数「RotateImage()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear320.cpp」が
対象】します!
(4-12-235)関数「void rotateByte (
TypeXYI* base,TypeXYI* off,
BYTE *ps,int hs,int vs,
BYTE *pd,int h,int v,
int sl,int dl,int dataSize);」
void rotateByte( // 回転処理:BYTE
TypeXYI *base, // S配列BASExytbl
TypeXYI *off, // S配列オフxytbl
BYTE *ps, // S配列 Ptr:始点
int hs, // S配列水平幅
int vs, // S配列垂直幅
BYTE *pd, // D配列 Ptr
int h, // D配列水平幅
int v, // D配列垂直幅
int sl, // 増加幅:S
int dl, // 増加幅:D
int dataSize ); // 画素サイズ
関数「RotateImage()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear320.cpp」が
対象】します!
(4-12-236)関数「void rotateXShort (
TypeXYI* base,int offx,int offy,
short *ps,short *pd,int len,int sl);」
void rotateXShort( // 回転処理:X方向:short
TypeXYI *base, // S配列BASExytbl
int offx, // S配列Offsetx
int offy, // S配列Offsety
short *ps, // S配列 Ptr:始点
short *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl ); // 増加幅:S
関数「rotateShort ()」のサブルーチンです!
関数「RotateImage()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear320.cpp」が
対象】します!
(4-12-237)関数「void rotateXShortColor(
TypeXYI* base,int offx,int offy,
short *ps,short *pd,int len,int sl);」
void rotateXShortColor( // 回転処理:X方向:short
TypeXYI *base, // S配列BASExytbl
int offx, // S配列Offsetx
int offy, // S配列Offsety
short *ps, // S配列 Ptr:始点
short *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl ); // 増加幅:S
関数「rotateShort ()」のサブルーチンです!
関数「RotateImage()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear320.cpp」が
対象】します!
(4-12-238)関数「void rotateXShortExt(
TypeXYI* base,int offx,int offy,
short *ps,short *pd,int len,int sl,int dataSize);」
void rotateXShortExt( // 回転処理:X方向:short
TypeXYI *base, // S配列BASExytbl
int offx, // S配列Offsetx
int offy, // S配列Offsety
short *ps, // S配列 Ptr:始点
short *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
関数「rotateShort ()」のサブルーチンです!
関数「RotateImage()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear320.cpp」が
対象】します!
(4-12-239)関数「void rotateShort(
TypeXYI* base,TypeXYI* off,
short *ps,int hs,int vs,short *pd,int h,int v,
int sl,int dl,int dataSize);」
void rotateShort( // 回転処理:short
TypeXYI *base, // S配列BASExytbl
TypeXYI *off, // S配列オフxytbl
short *ps, // S配列 Ptr:始点
int hs, // S配列水平幅
int vs, // S配列垂直幅
short *pd, // D配列 Ptr
int h, // D配列水平幅
int v, // D配列垂直幅
int sl, // 増加幅:S
int dl, // 増加幅:D
int dataSize ); // 画素サイズ
関数「RotateImage()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear320.cpp」が
対象】します!
(4-12-240)関数「void rotateXLong(
TypeXYI *base,int offx,int offy,
long *ps,long *pd,int len,int sl);」
void rotateXLong( // 回転処理:X方向:long
TypeXYI *base, // S配列BASExytbl
int offx, // S配列Offsetx
int offy, // S配列Offsety
long *ps, // S配列 Ptr:始点
long *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl ); // 増加幅:S
関数「rotateLong()」のサブルーチンです!
関数「RotateImage()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear320.cpp」が
対象】します!
(4-12-241)関数「void rotateXLongColor(
TypeXYI* base,int offx,int offy,
long *ps,long *pd,int len,int sl);」
void rotateXLongColor( // 回転処理:X方向:long
TypeXYI *base, // S配列BASExytbl
int offx, // S配列Offsetx
int offy, // S配列Offsety
long *ps, // S配列 Ptr:始点
long *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl ); // 増加幅:S
関数「rotateLong()」のサブルーチンです!
関数「RotateImage()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear320.cpp」が
対象】します!
(4-12-242)関数「void rotateXLongExt(
TypeXYI* base,int offx,int offy,
long *ps,long *pd,int len,int sl,int dataSize);」
void rotateXLongExt( // 回転処理:X方向:long
TypeXYI *base, // S配列BASExytbl
int offx, // S配列Offsetx
int offy, // S配列Offsety
long *ps, // S配列 Ptr:始点
long *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
関数「rotateLong()」のサブルーチンです!
関数「RotateImage()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear320.cpp」が
対象】します!
(4-12-243)関数「void rotateLong(
TypeXYI* base,TypeXYI* off,
long *ps,int hs,int vs,long *pd,int h,int v,
int sl,int dl,int dataSize);」
void rotateLong( // 回転処理:long
TypeXYI *base, // S配列BASExytbl
TypeXYI *off, // S配列オフxytbl
long *ps, // S配列 Ptr:始点
int hs, // S配列水平幅
int vs, // S配列垂直幅
long *pd, // D配列 Ptr
int h, // D配列水平幅
int v, // D配列垂直幅
int sl, // 増加幅:S
int dl, // 増加幅:D
int dataSize ); // 画素サイズ
関数「RotateImage()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear320.cpp」が
対象】します!
(4-12-244)関数「void
rotateXByteInterpolate(
TypeXYI* base,int offx,int offy,
BYTE *ps,BYTE *pd,int len,int sl,int dataSize);」
void rotateXByteInterpolate( // 回転処理:X:BYTE:補間
TypeXYI *base, // S配列BASExytbl
int offx, // S配列Offsetx
int offy, // S配列Offsety
BYTE *ps, // S配列 Ptr:始点
BYTE *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
関数「rotateByteInterpolate()」のサブルーチンです!
関数「RotateImageInterpolate()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear330.cpp」が
対象】します!
(4-12-245)関数「void
rotateXShortInterpolate(
TypeXYI* base,int offx,int offy,
short *ps,short *pd,int len,int sl,int dataSize);」
void rotateXShortInterpolate( // 回転処理:X:short:補間
TypeXYI *base, // S配列BASExytbl
int offx, // S配列Offsetx
int offy, // S配列Offsety
short *ps, // S配列 Ptr:始点
short *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
関数「rotateShortInterpolate()」のサブルーチンです!
関数「RotateImageInterpolate()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear330.cpp」が
対象】します!
(4-12-246)関数「void
rotateXLongInterpolate(
TypeXYI* base,int offx,int offy,
long *ps,long *pd,int len,int sl,int dataSize);」
void rotateXLongInterpolate( // 回転処理:X:long:補間
TypeXYI *base, // S配列BASExytbl
int offx, // S配列Offsetx
int offy, // S配列Offsety
long *ps, // S配列 Ptr:始点
long *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
関数「rotateLongInterpolate()」のサブルーチンです!
関数「RotateImageInterpolate()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear330.cpp」が
対象】します!
(4-12-247)関数「void
rotateXFloatInterpolate(
TypeXYI* base,int offx,int offy,
floatps,float*pd,int len,int sl,int dataSize);」
void rotateXFloatInterpolate( // 回転処理:X:単精度:補間
TypeXYI *base, // S配列BASExytbl
int offx, // S配列Offsetx
int offy, // S配列Offsety
float *ps, // S配列 Ptr:始点
float *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
関数「rotateFloatInterpolate()」のサブルーチンです!
関数「RotateImageInterpolate()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear330.cpp」が
対象】します!
(4-12-248)関数「void
rotateXByteInterpolateCheck(
int endX,int endY,
TypeXYI* base,int offx,int offy,
BYTE *ps,BYTE *pd,int len,int sl,int dataSize);」
void rotateXByteInterpolateCheck( // 回転処理:X:BYTE:補間&検査
int endX, // X座標最終
int endY, // Y座標最終
TypeXYI *base, // S配列BASExytbl
int offx, // S配列Offsetx
int offy, // S配列Offsety
BYTE *ps, // S配列 Ptr:始点
BYTE *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
関数「rotateByteInterpolate()」のサブルーチンです!
関数「RotateImageInterpolate()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear330.cpp」が
対象】します!
(4-12-249)関数「void
rotateXShortInterpolateCheck(
int endX,int endY,
TypeXYI* base,int offx,int offy,
short *ps,short *pd,int len,int sl,int dataSize);」
void rotateXShortInterpolateCheck( // 回転処理:X:short:補間&検査
int endX, // X座標最終
int endY, // Y座標最終
TypeXYI *base, // S配列BASExytbl
int offx, // S配列Offsetx
int offy, // S配列Offsety
short *ps, // S配列 Ptr:始点
short *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
関数「rotateshort Interpolate()」のサブルーチンです!
関数「RotateImageInterpolate()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear330.cpp」が
対象】します!
(4-12-250)関数「void
rotateXLongInterpolateCheck(
int endX,int endY,
TypeXYI* base,int offx,int offy,
long *ps,long *pd,int len,int sl,int dataSize);」
void rotateXLongInterpolateCheck( // 回転処理:X:long:補間&検査
int endX, // X座標最終
int endY, // Y座標最終
TypeXYI *base, // S配列BASExytbl
int offx, // S配列Offsetx
int offy, // S配列Offsety
long *ps, // S配列 Ptr:始点
long *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
関数「rotateLongInterpolate()」のサブルーチンです!
関数「RotateImageInterpolate()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear330.cpp」が
対象】します!
(4-12-251)関数「void
rotateXFloatInterpolateCheck(
int endX,int endY,
TypeXYI*base,int offx,int offy,
float* ps,float* pd,int len,int sl,int dataSize);」
void rotateXFloatInterpolateCheck( // 回転処理:X:単精度:補間&検査
int endX, // X座標最終
int endY, // Y座標最終
TypeXYI *base, // S配列BASExytbl
int offx, // S配列Offsetx
int offy, // S配列Offsety
float *ps, // S配列 Ptr:始点
float *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
関数「rotateFloatInterpolate()」のサブルーチンです!
関数「RotateImageInterpolate()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear330.cpp」が
対象】します!
(4-12-252)関数「void rotateByteInterpolate(
TypeXYI* base,TypeXYI* off,
BYTE *ps,int hs,int vs,BYTE *pd,
int h,int v,int sl,int dl,int dataSize);」
void rotateByteInterpolate( // 回転処理:BYTE:補間
TypeXYI *base, // S配列BASExytbl
TypeXYI *off, // S配列オフxytbl
BYTE *ps, // S配列 Ptr:始点
int hs, // S配列水平幅
int vs, // S配列垂直幅
BYTE *pd, // D配列 Ptr
int h, // D配列水平幅
int v, // D配列垂直幅
int sl, // 増加幅:S
int dl, // 増加幅:D
int dataSize ); // 画素サイズ
関数「RotateImageInterpolate()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear330.cpp」が
対象】します!
(4-12-253)関数「void rotateShortInterpolate(
TypeXYI* base,TypeXYI* off,
short *ps,int hs,int vs,short *pd,
int h,int v,int sl,int dl,int dataSize);」
void rotateShortInterpolate( // 回転処理:short:補間
TypeXYI *base, // S配列BASExytbl
TypeXYI *off, // S配列オフxytbl
short *ps, // S配列 Ptr:始点
int hs, // S配列水平幅
int vs, // S配列垂直幅
short *pd, // D配列 Ptr
int h, // D配列水平幅
int v, // D配列垂直幅
int sl, // 増加幅:S
int dl, // 増加幅:D
int dataSize ); // 画素サイズ
関数「RotateImageInterpolate()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear330.cpp」が
対象】します!
(4-12-254)関数「void rotateLongInterpolate(
TypeXYI* base,TypeXYI* off,
long *ps,int hs,int vs,long *pd,int h,int v,
int sl,int dl,int dataSize);」
void rotateLongInterpolate( // 回転処理:long:補間
TypeXYI *base, // S配列BASExytbl
TypeXYI *off, // S配列オフxytbl
long *ps, // S配列 Ptr:始点
int hs, // S配列水平幅
int vs, // S配列垂直幅
long *pd, // D配列 Ptr
int h, // D配列水平幅
int v, // D配列垂直幅
int sl, // 増加幅:S
int dl, // 増加幅:D
int dataSize ); // 画素サイズ
関数「RotateImageInterpolate()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear330.cpp」が
対象】します!
(4-12-255)関数「void rotateFloatInterpolate(
TypeXYI* base,TypeXYI* off,
float* ps,int hs,int vs,float* pd,int h,int v,
int sl,int dl,int dataSize);」
void rotateFloatInterpolate( // 回転処理:単精度:補間
TypeXYI *base, // S配列BASExytbl
TypeXYI *off, // S配列オフxytbl
float *ps, // S配列 Ptr:始点
int hs, // S配列水平幅
int vs, // S配列垂直幅
float *pd, // D配列 Ptr
int h, // D配列水平幅
int v, // D配列垂直幅
int sl, // 増加幅:S
int dl, // 増加幅:D
int dataSize ); // 画素サイズ
関数「RotateImageInterpolate()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear330.cpp」が
対象】します!
(4-12-256)関数「void makeRotateTableReal(
double a,
double x1,double y1,double x2,double y2,
TypeXYD* base,TypeXYD* offset,
int h,int v,int dataSize);」
void makeRotateTableReal( // 画像回転用座標テーブル作成
double a, // 回転角:Radian
double x1, // S配列回転中心
double y1, // S配列回転中心
double x2, // D配列回転中心
double y2, // D配列回転中心
TypeXYD *base, // S配列BASExytbl
TypeXYD *offset, // S配列オフxytbl
int h, // D配列水平幅
int v, // D配列垂直幅
int dataSize ); // 画素サイズ
関数「RotateImageReal()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear340.cpp」が
対象】します!
(4-12-257)関数「int checkRotateABReal(
TypeXYD* base,
double offx,double offy,int hs,int vs,int h,
int &resX1,int &resX2,int step);」
int checkRotateABReal( // 回転用始終点検査
TypeXYD *base, // S配列BASExytbl
double offx, // S配列Offsetx
double offy, // S配列Offsety
int hs, // S配列水平幅
int vs, // S配列垂直幅
int h, // D配列水平幅
int& resX1, // D配列始点x座標:返値
int& resX2, // D配列終点x座標:返値
int step ); // 検査ステップ
関数「rotateBYTE Real()」のサブルーチンです!
関数「RotateImageReal()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear340.cpp」が
対象】します!
(4-12-258)関数「void rotateXByteReal(
TypeXYD* base,double offx,double offy,
BYTE *ps,BYTE *pd,int len,int sl,int dataSize);」
void rotateXByteReal( // 回転処理:X:BYTE:実数
TypeXYD *base, // S配列BASExytbl
double offx, // S配列Offsetx
double offy, // S配列Offsety
BYTE *ps, // S配列 Ptr:始点
BYTE *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
関数「rotateBYTE Real()」のサブルーチンです!
関数「RotateImageReal()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear340.cpp」が
対象】します!
(4-12-259)関数「void rotateXShortReal(
TypeXYD* base,double offx,double offy,
short *ps,short *pd,int len,int sl,int dataSize);」
void rotateXShortReal( // 回転処理:X:short:実数
TypeXYD *base, // S配列BASExytbl
double offx, // S配列Offsetx
double offy, // S配列Offsety
short *ps, // S配列 Ptr:始点
short *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
関数「rotateshort Real()」のサブルーチンです!
関数「RotateImageReal()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear340.cpp」が
対象】します!
(4-12-260)関数「void rotateXLongReal(
TypeXYD* base,double offx,double offy,
long *ps,long *pd,int len,int sl,int dataSize);」
void rotateXLongReal( // 回転処理:X:long:実数
TypeXYD *base, // S配列BASExytbl
double offx, // S配列Offsetx
double offy, // S配列Offsety
long *ps, // S配列 Ptr:始点
long *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
関数「rotateLong Real()」のサブルーチンです!
関数「RotateImageReal()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear340.cpp」が
対象】します!
(4-12-261)関数「void rotateXFloatReal(
TypeXYD* base,double offx,double offy,
float* ps,float*pd,int len,int sl,int dataSize);」
void rotateXFloatReal( // 回転処理:X:単精度:実数
TypeXYD *base, // S配列BASExytbl
double offx, // S配列Offsetx
double offy, // S配列Offsety
float *ps, // S配列 Ptr:始点
float *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
関数「rotateFloatReal()」のサブルーチンです!
関数「RotateImageReal()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear340.cpp」が
対象】します!
(4-12-262)関数「void rotateXByteRealCheck(
int endX,int endY,
TypeXYD* base,double offx,double offy,
BYTE *ps,BYTE *pd,int len,int sl,int dataSize);」
void rotateXByteRealCheck( // 回転処理:X:BYTE:実数&検査
int endX, // X座標最終
int endY, // Y座標最終
TypeXYD *base, // S配列BASExytbl
double offx, // S配列Offsetx
double offy, // S配列Offsety
BYTE *ps, // S配列 Ptr:始点
BYTE *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
関数「rotateBYTE Real()」のサブルーチンです!
関数「RotateImageReal()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear340.cpp」が
対象】します!
(4-12-263)関数「void rotateXShortRealCheck(
int endX,int endY,
TypeXYD* base,double offx,double offy,
short *ps,short *pd,int len,int sl,int dataSize);」
void rotateXShortRealCheck( // 回転処理:X:short:実数&検査
int endX, // X座標最終
int endY, // Y座標最終
TypeXYD *base, // S配列BASExytbl
double offx, // S配列Offsetx
double offy, // S配列Offsety
short *ps, // S配列 Ptr:始点
short *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
関数「rotateShort Real()」のサブルーチンです!
関数「RotateImageReal()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear340.cpp」が
対象】します!
(4-12-264)関数「void rotateXLongRealCheck(
int endX,int endY,
TypeXYD* base,double offx,double offy,
long *ps,long *pd,int len,int sl,int dataSize);」
void rotateXLongRealCheck( // 回転処理:X:long:実数&検査
int endX, // X座標最終
int endY, // Y座標最終
TypeXYD *base, // S配列BASExytbl
double offx, // S配列Offsetx
double offy, // S配列Offsety
long *ps, // S配列 Ptr:始点
long *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
関数「rotateLongReal()」のサブルーチンです!
関数「RotateImageReal()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear340.cpp」が
対象】します!
(4-12-265)関数「void rotateXFloatRealCheck(
int endX,int endY,
TypeXYD* base,double offx,double offy,
float* ps,float* pd,int len,int sl,int dataSize);」
void rotateXFloatRealCheck( // 回転処理:X:単精度:実数&検査
int endX, // X座標最終
int endY, // Y座標最終
TypeXYD *base, // S配列BASExytbl
double offx, // S配列Offsetx
double offy, // S配列Offsety
float *ps, // S配列 Ptr:始点
float *pd, // D配列 Ptr
int len, // D配列水平処理幅
int sl, // 増加幅:S
int dataSize ); // 画素サイズ
関数「rotateFloatReal()」のサブルーチンです!
関数「RotateImageReal()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear340.cpp」が
対象】します!
(4-12-266)関数「void rotateByteReal(
TypeXYD* base,TypeXYD* off,
BYTE *ps,int hs,int vs,BYTE *pd,int h,int v,
int sl,int dl,int dataSize);」
void rotateByteReal( // 回転処理:BYTE:実数
TypeXYD *base, // S配列BASExytbl
TypeXYD *off, // S配列オフxytbl
BYTE *ps, // S配列 Ptr:始点
int hs, // S配列水平幅
int vs, // S配列垂直幅
BYTE *pd, // D配列 Ptr
int h, // D配列水平幅
int v, // D配列垂直幅
int sl, // 増加幅:S
int dl, // 増加幅:D
int dataSize ); // 画素サイズ
関数「RotateImageReal()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear340.cpp」が
対象】します!
(4-12-267)関数「void rotateShortReal(
TypeXYD* base,TypeXYD* off,
short *ps,int hs,int vs,short *pd,
int h,int v,int sl,int dl,int dataSize);」
void rotateShortReal( // 回転処理:short:実数
TypeXYD *base, // S配列BASExytbl
TypeXYD *off, // S配列オフxytbl
short *ps, // S配列 Ptr:始点
int hs, // S配列水平幅
int vs, // S配列垂直幅
short *pd, // D配列 Ptr
int h, // D配列水平幅
int v, // D配列垂直幅
int sl, // 増加幅:S
int dl, // 増加幅:D
int dataSize ); // 画素サイズ
関数「RotateImageReal()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear340.cpp」が
対象】します!
(4-12-268)関数「void rotateLongReal(
TypeXYD* base,TypeXYD* off,
long *ps,int hs,int vs,long *pd,int h,int v,
int sl,int dl,int dataSize);」
void rotateLongReal( // 回転処理:long:実数
TypeXYD *base, // S配列BASExytbl
TypeXYD *off, // S配列オフxytbl
long *ps, // S配列 Ptr:始点
int hs, // S配列水平幅
int vs, // S配列垂直幅
long *pd, // D配列 Ptr
int h, // D配列水平幅
int v, // D配列垂直幅
int sl, // 増加幅:S
int dl, // 増加幅:D
int dataSize ); // 画素サイズ
関数「RotateImageReal()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear340.cpp」が
対象】します!
(4-12-269)関数「void rotateFloatReal(
TypeXYD* base,TypeXYD* off,
float* ps,int hs,int vs,float* pd,int h,int v,
int sl,int dl,int dataSize);」
void rotateFloatReal( // 回転処理:単精度:実数
TypeXYD *base, // S配列BASExytbl
TypeXYD *off, // S配列オフxytbl
float *ps, // S配列 Ptr:始点
int hs, // S配列水平幅
int vs, // S配列垂直幅
float *pd, // D配列 Ptr
int h, // D配列水平幅
int v, // D配列垂直幅
int sl, // 増加幅:S
int dl, // 増加幅:D
int dataSize ); // 画素サイズ
関数「RotateImageReal()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear340.cpp」が
対象】します!
(4-12-270)関数「double Ave4M(
BYTE *ptrA,int incA,int m);」
double Ave4M( // 4×m画素平均値
BYTE* ptrA, // A配列:処理ポインタ
int incA, // A配列:増加幅
int m ); // 4×mのm
関数「AverageImage44()」のサブルーチンです!
関数「AverageImage44XY()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear430.cpp」が
対象】します!
(4-12-271)関数「double Corr4M(
BYTE *ptrA,BYTE *ptrB,int incA,int incB,int m);」
double Corr4M( // 4×M画素正規化相関
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int m ); // 4×MのM
関数「Corr44()」のサブルーチンです!
関数「CorrNM()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」
及び【ファイル「CopyClear430.cpp」が対象】します!
(4-12-272)関数「double Corr4MFirst(
BYTE *ptrA,BYTE *ptrB,int incA,int incB,int m,
int &avA,int &avB,int &sumA);」
double Corr4MFirst( // 4×M画素正規化相関:連続相関の最初
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int m, // 4×MのM
int& avA, // 返値:A配列の平均値
int& avB, // 返値:B配列の平均値
int& sumA ); // 返値:A配列の分散値(自己相関)
関数「CorrNMFirst()」のサブルーチンです!
関数「Corr44First()」のサブルーチンです!
「First」は、連続して処理する作業の「最初に処理」する
意味!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」
及び【ファイル「CopyClear430.cpp」が対象】します!
(4-12-273)関数「double Corr4MSecond(
BYTE *ptrA,BYTE *ptrB,int incA,int incB,int m,
int avA,int &avB,int sumA);」
double Corr4MSecond( // 4×M画素正規化相関:連続相関の2番目以降
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int m, // 4×MのM
int avA, // A配列の平均値
int& avB, // 返値:B配列の平均値
int sumA ); // A配列の分散値(自己相関)
関数「CorrNMSecond()」のサブルーチンです!
関数「Corr44Second()」のサブルーチンです!
「Second」は、連続して処理する作業の「2番目以降」に
処理する意味!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」
及び【ファイル「CopyClear430.cpp」が対象】します!
(4-12-274)関数「int Corr4MMyself(
BYTE *ptrA,int incA,int m);」
int Corr4MMyself( // 4×M画素正規化相関:自己相関(分散)
BYTE* ptrA, // A配列:処理ポインタ
int incA, // A配列:増加幅
int m ); // 4×MのM
関数「CorrNMMyself()」のサブルーチンです!
関数「Corr44Myself()」のサブルーチンです!
★備考★引数の型が異なるオーバーロード(多重定義)関数
が存在します!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」
及び【ファイル「CopyClear430.cpp」が対象】します!
(4-12-275)関数「int Corr4MMyself(
BYTE *ptrA,int incA,int m,int &ave);」
int Corr4MMyself( // 4×M画素正規化相関:自己相関(分散)+平均
BYTE* ptrA, // A配列:処理ポインタ
int incA, // A配列:増加幅
int m, // 4×MのM
int& ave ); // 結果:平均値
関数「CorrNMMyself()」のサブルーチンです!
関数「Corr44Myself()」のサブルーチンです!
★備考★引数の型が異なるオーバーロード(多重定義)関数
が存在します!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」
及び【ファイル「CopyClear430.cpp」が対象】します!
(4-12-276)関数「double Corr44(
BYTE *ptrA,BYTE *ptrB,int incA,int incB);」
double Corr44( // 4×4画素正規化相関
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB ); // B配列:増加幅
関数「CorrImage44()」のサブルーチンです!
関数「CorrImage44XY()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear430.cpp」が
対象】します!
(4-12-277)関数「double Corr44First(
BYTE *ptrA,BYTE *ptrB,int incA,int incB,
int &avA,int &avB,int &sumA);」
double Corr44First( // 4×4画素正規化相関:連続相関の最初
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int& avA, // 返値:A配列の平均値
int& avB, // 返値:B配列の平均値
int& sumA ); // 返値:A配列の分散値(自己相関)
関数「SearchCorrImage44()」のサブルーチンです!
「First」は、連続して処理する作業の「最初に処理」する
意味!
★詳細★は、後で説明:【ファイル「CopyClear430.cpp」が
対象】します!
(4-12-278)関数「double Corr44Second(
BYTE *ptrA,BYTE *ptrB,int incA,int incB,
int avA,int &avB,int sumA);」
double Corr44Second( // 4×4画素正規化相関:連続相関の2番目以降
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int avA, // A配列の平均値
int& avB, // 返値:B配列の平均値
int sumA ); // A配列の分散値(自己相関)
関数「SearchCorrImage44()」のサブルーチンです!
「Second」は、連続して処理する作業の「2番目以降」に
処理する意味!
★詳細★は、後で説明:【ファイル「CopyClear430.cpp」が
対象】します!
(4-12-279)関数「int Corr44Myself(
BYTE *ptrA,int incA);」
int Corr44Myself( // 4×4画素正規化相関:自己相関(分散)
BYTE* ptrA, // A配列:処理ポインタ
int incA ); // A配列:増加幅
関数「CorrImage44Myself()」のサブルーチンです!
CorrImage44MyselfXY()」のサブルーチンです!
★備考★引数の型が異なるオーバーロード(多重定義)関数
が存在します!
★詳細★は、後で説明:【ファイル「CopyClear430.cpp」が
対象】します!
(4-12-280)関数「int Corr44Myself(
BYTE *ptrA,int incA,int &ave);」
int Corr44Myself( // 4×4画素正規化相関:自己相関(分散)+平均
BYTE* ptrA, // A配列:処理ポインタ
int incA, // A配列:増加幅
int& ave ); // 結果:平均値
関数「CorrImage44Myself()」のサブルーチンです!
CorrImage44MyselfXY()」のサブルーチンです!
★備考★引数の型が異なるオーバーロード(多重定義)関数
が存在します!
★詳細★は、後で説明:【ファイル「CopyClear430.cpp」が
対象】します!
(4-12-281)関数「double Ave8M(
BYTE *ptrA,int incA,int m);」
double Ave8M( // 8×m画素平均値
BYTE* ptrA, // A配列:処理ポインタ
int incA, // A配列:増加幅
int m ); // 8×mのm
関数「AverageImage88()」のサブルーチンです!
関数「AverageImage88XY()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!
(4-12-282)関数「double Corr8M(
BYTE *ptrA,BYTE *ptrB,int incA,int incB,int m);」
double Corr8M( // 8×M画素正規化相関
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int m ); // 8×MのM
関数「Corr88()」のサブルーチンです!
関数「CorrNM()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」
及び【ファイル「CopyClear410.cpp」が対象】します!
(4-12-283)関数「double Corr8MFirst(
BYTE *ptrA,BYTE *ptrB,int incA,int incB,int m,
int &avA,int &avB,int &sumA);」
double Corr8MFirst( // 8×M画素正規化相関:連続相関の最初
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int m, // 8×MのM
int& avA, // 返値:A配列の平均値
int& avB, // 返値:B配列の平均値
int& sumA ); // 返値:A配列の分散値(自己相関)
関数「CorrNMFirst()」のサブルーチンです!
関数「Corr88First()」のサブルーチンです!
「First」は、連続して処理する作業の「最初に処理」する
意味!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」
及び【ファイル「CopyClear410.cpp」が対象】します!
(4-12-284)関数「double Corr8MSecond(
BYTE *ptrA,BYTE *ptrB,int incA,int incB,int m,
int avA,int &avB,int sumA);」
double Corr8MSecond( // 8×M画素正規化相関:連続相関の2番目以降
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int m, // 8×MのM
int avA, // A配列の平均値
int& avB, // 返値:B配列の平均値
int sumA ); // A配列の分散値(自己相関)
関数「CorrNMSecond()」のサブルーチンです!
関数「Corr88Second()」のサブルーチンです!
「Second」は、連続して処理する作業の「2番目以降」に
処理する意味!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」
及び【ファイル「CopyClear410.cpp」が対象】します!
(4-12-285)関数「int Corr8MMyself(
BYTE *ptrA,int incA,int m);」
int Corr8MMyself( // 8×M画素正規化相関:自己相関(分散)
BYTE* ptrA, // A配列:処理ポインタ
int incA, // A配列:増加幅
int m ); // 8×MのM
関数「CorrNMMyself()」のサブルーチンです!
関数「Corr88Myself()」のサブルーチンです!
★備考★引数の型が異なるオーバーロード(多重定義)関数
が存在します!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」
及び【ファイル「CopyClear410.cpp」が対象】します!
(4-12-286)関数「int Corr8MMyself(
BYTE *ptrA,int incA,int m,int &ave);」
int Corr8MMyself( // 8×M画素正規化相関:自己相関(分散)+平均
BYTE* ptrA, // A配列:処理ポインタ
int incA, // A配列:増加幅
int m, // 8×MのM
int& ave ); // 結果:平均値
関数「CorrNMMyself()」のサブルーチンです!
関数「Corr88Myself()」のサブルーチンです!
★備考★引数の型が異なるオーバーロード(多重定義)関数
が存在します!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」
及び【ファイル「CopyClear410.cpp」が対象】します!
(4-12-287)関数「double Corr88(
BYTE *ptrA,BYTE *ptrB,int incA,int incB);」
double Corr88( // 8×8画素正規化相関
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB ); // B配列:増加幅
関数「CorrImage88()」のサブルーチンです!
関数「CorrImage88XY()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!
(4-12-288)関数「double Corr88First(
BYTE *ptrA,BYTE *ptrB,int incA,int incB,
int &avA,int &avB,int &sumA);」
double Corr88First( // 8×8画素正規化相関:連続相関の最初
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int& avA, // 返値:A配列の平均値
int& avB, // 返値:B配列の平均値
int& sumA ); // 返値:A配列の分散値(自己相関)
関数「CorrNMFirst()」のサブルーチンです!
関数「Corr88First()」のサブルーチンです!
関数「VectorCorr88()」のサブルーチンです!
「First」は、連続して処理する作業の「最初に処理」する
意味!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」
及び【ファイル「CopyClear400.cpp」が対象】します!
(4-12-289)関数「double Corr88Second(
BYTE *ptrA,BYTE *ptrB,int incA,int incB,
int avA,int &avB,int sumA);」
double Corr88Second( // 8×8画素正規化相関:連続相関の2番目以降
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int avA, // A配列の平均値
int& avB, // 返値:B配列の平均値
int sumA ); // A配列の分散値(自己相関)
関数「CorrNMSecond()」のサブルーチンです!
関数「SearchCorrImage88()」のサブルーチンです!
関数「VectorCorr88()」のサブルーチンです!
「Second」は、連続して処理する作業の「2番目以降」に
処理する意味!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」
が対象】します!
(4-12-290)関数「int Corr88Myself(
BYTE *ptrA,int incA);」
int Corr88Myself( // 8×8画素正規化相関:自己相関(分散)
BYTE* ptrA, // A配列:処理ポインタ
int incA ); // A配列:増加幅
関数「CorrImage88Myself()」のサブルーチンです!
CorrImage88MyselfXY()」のサブルーチンです!
★備考★引数の型が異なるオーバーロード(多重定義)関数
が存在します!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!
(4-12-291)関数「int Corr88Myself(
BYTE *ptrA,int incA,int &ave);」
int Corr88Myself( // 8×8画素正規化相関:自己相関(分散)+平均
BYTE* ptrA, // A配列:処理ポインタ
int incA, // A配列:増加幅
int& ave ); // 結果:平均値
関数「CorrImage88Myself()」のサブルーチンです!
関数「CorrImage88MyselfXY()」のサブルーチンです!
★備考★引数の型が異なるオーバーロード(多重定義)関数
が存在します!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!
(4-12-292)関数「void Reduct88Ave(
BYTE *ptrS,BYTE *ptrD,int incS,int incD);」
void Reduct88Ave( // 8×8画素正規化相関用画像圧縮:平均値
BYTE* ptrS, // 元配列 :処理ポインタ
BYTE* ptrD, // 圧縮後配列:処理ポインタ
int incS, // 元配列 :増加幅
int incD ); // 圧縮後配列:増加幅
関数「ReductImage88Ave()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!
(4-12-293)関数「void Reduct88Min(
BYTE *ptrS,BYTE *ptrD,int incS,int incD);」
void Reduct88Min( // 8×8画素正規化相関用画像圧縮:最小値
BYTE* ptrS, // 元配列 :処理ポインタ
BYTE* ptrD, // 圧縮後配列:処理ポインタ
int incS, // 元配列 :増加幅
int incD ); // 圧縮後配列:増加幅
関数「ReductImage88Min()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!
(4-12-294)関数「void Reduct88Max(
BYTE *ptrS,BYTE *ptrD,int incS,int incD);」
void Reduct88Max( // 8×8画素正規化相関用画像圧縮:最大値
BYTE* ptrS, // 元配列 :処理ポインタ
BYTE* ptrD, // 圧縮後配列:処理ポインタ
int incS, // 元配列 :増加幅
int incD ); // 圧縮後配列:増加幅
関数「ReductImage88Max()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!
(4-12-295)関数「void Reduct88Two(
BYTE *ptrS,BYTE *ptrD,int incS,int incD);」
void Reduct88Two( // 8×8画素正規化相関用画像圧縮:2番目
BYTE* ptrS, // 元配列 :処理ポインタ
BYTE* ptrD, // 圧縮後配列:処理ポインタ
int incS, // 元配列 :増加幅
int incD ); // 圧縮後配列:増加幅
関数「ReductImage88Two()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!
(4-12-296)関数「void Reduct88Three(
BYTE *ptrS,BYTE *ptrD,int incS,int incD);」
void Reduct88Three( // 8×8画素正規化相関用画像圧縮:3番目
BYTE* ptrS, // 元配列 :処理ポインタ
BYTE* ptrD, // 圧縮後配列:処理ポインタ
int incS, // 元配列 :増加幅
int incD ); // 圧縮後配列:増加幅
関数「ReductImage88Three()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!
(4-12-297)関数「void Reduct88Skip(
BYTE *ptrS,BYTE *ptrD,int incS,int incD);」
void Reduct88Skip( // 8×8画素正規化相関用画像圧縮:間引き
BYTE* ptrS, // 元配列 :処理ポインタ
BYTE* ptrD, // 圧縮後配列:処理ポインタ
int incS, // 元配列 :増加幅
int incD ); // 圧縮後配列:増加幅
関数「ReductImage88Skip()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!
(4-12-298)関数「void VectorCorr88(
BYTE *ptrA,BYTE *ptrB,int incA,int incB,
int nOffsetH,int nOffsetV,
double *vecX,double *vecY);」
void VectorCorr88( // 8×8画素正規化相関による動線ベクトル算出
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int nOffsetH, // 水平方向オフセット(左右ずれ)
int nOffsetV, // 垂直方向オフセット(上下ずれ)
double* vecX, // X方向結果
double* vecY ); // Y方向結果
関数「VectorCorrImage88(ReductImage88Skip()」の
サブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!
(4-12-299)関数「double AveNM(
BYTE *ptrA,int incA,int n,int m);」
double AveNM( // n×m画素平均値
BYTE* ptrA, // A配列:処理ポインタ
int incA, // A配列:増加幅
int n, // n×mのn
int m ); // n×mのm
関数「AverageImageNM()」のサブルーチンです!
関数「AverageImageNMXY()」のサブルーチンです!
関数「CorrNMLarge()」のサブルーチンです!
関数「CorrNMLargeFirst()」のサブルーチンです!
関数「CorrNMLargeSecond()」のサブルーチンです!
関数「CorrNMLargeMyself()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」
及びファイル「CopyClear420.cpp」が対象】します!
(4-12-300)関数「double CorrNM(
BYTE *ptrA,BYTE *ptrB,int incA,int incB,
int n,int m);」
double CorrNM( // n×m画素正規化相関
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int n, // n×mのn
int m ); // n×mのm
関数「CorrImageNM()」のサブルーチンです!
関数「VectorCorrImageNM()」のサブルーチンです!
関数「CorrImageNMXY()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!
(4-12-301)関数「double CorrNMFirst(
BYTE *ptrA,BYTE *ptrB,int incA,int incB,
int n,int m,
int &avA,int &avB,int &sumA);」
double CorrNMFirst( // n×m画素正規化相関:連続相関の最初
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int n, // n×mのn
int m, // n×mのm
int& avA, // 返値:A配列の平均値
int& avB, // 返値:B配列の平均値
int& sumA ); // 返値:A配列の分散値(自己相関)
関数「SearchCorrImageNM()」のサブルーチンです!
関数「SearchCorrImageSort()」のサブルーチンです!
関数「VectorCorrNM()」のサブルーチンです!
「First」は、連続して処理する作業の「最初に処理」する
意味!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!
(4-12-302)関数「double CorrNMSecond(
BYTE *ptrA,BYTE *ptrB,int incA,int incB,
int n,int m,int avA,int &avB,int sumA);」
double CorrNMSecond( // n×m画素正規化相関:連続相関の2番目以降
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int n, // n×mのn
int m, // n×mのm
int avA, // A配列の平均値
int& avB, // 返値:B配列の平均値
int sumA ); // A配列の分散値(自己相関)
関数「SearchCorrImageNM()」のサブルーチンです!
関数「SearchCorrImageSort()」のサブルーチンです!
関数「SearchCorrImageXYSort()」のサブルーチンです!
関数「VectorCorrNM()」のサブルーチンです!
「Second」は、連続して処理する作業の「2番目以降」に
処理する意味!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!
(4-12-303)関数「double CorrNMCheck(
BYTE *ptrA,BYTE *ptrB,int incA,int incB,
int n,int m,int avA,int avB);」
double CorrNMCheck( // n×m画素正規化相関:正/反検査
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int n, // n×mのn
int m, // n×mのm
int avA, // A配列の平均値
int avB ); // B配列の平均値
関数「SearchCorrImageSort()」のサブルーチンです!
関数「SearchCorrImageXYSort()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!
(4-12-304)関数「int CorrNMMyself(
BYTE *ptrA,int incA,int n,int m);」
int CorrNMMyself( // n×m画素正規化相関:自己相関(分散)
BYTE* ptrA, // A配列:処理ポインタ
int incA, // A配列:増加幅
int n, // n×mのn
int m ); // n×mのm
関数「CorrImageNMMyself()」のサブルーチンです!
関数「CorrImageNMMyselfXY()」のサブルーチンです!
★備考★引数の型が異なるオーバーロード(多重定義)関数
が存在します!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!
(4-12-305)関数「int CorrNMMyself(
BYTE *ptrA,int incA,int n,int m,int &ave);」
int CorrNMMyself( // n×m画素正規化相関:自己相関(分散)+平均
BYTE* ptrA, // A配列:処理ポインタ
int incA, // A配列:増加幅
int n, // n×mのn
int m, // n×mのm
int& ave ); // 結果:平均値
関数「CorrImageNMMyselfXY()」のサブルーチンです!
★備考★引数の型が異なるオーバーロード(多重定義)関数
が存在します!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!
(4-12-306)関数「void ReductNMAve(
BYTE *ptrS,BYTE *ptrD,
int incS,int incD,int n,int m);」
void ReductNMAve( // n×m画素正規化相関用画像圧縮:平均値
BYTE* ptrS, // 元配列 :処理ポインタ
BYTE* ptrD, // 圧縮後配列:処理ポインタ
int incS, // 元配列 :増加幅
int incD, // 圧縮後配列:増加幅
int n, // n×mのn
int m ); // n×mのm
関数「ReductImage()」のサブルーチンです!
関数「ReductImageNMAve()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!
(4-12-307)関数「void ReductNMMin(
BYTE *ptrS,BYTE *ptrD,int incS,int incD,
int n,int m);」
void ReductNMMin( // n×m画素正規化相関用画像圧縮:最小値
BYTE* ptrS, // 元配列 :処理ポインタ
BYTE* ptrD, // 圧縮後配列:処理ポインタ
int incS, // 元配列 :増加幅
int incD, // 圧縮後配列:増加幅
int n, // n×mのn
int m ); // n×mのm
関数「ReductImage()」のサブルーチンです!
関数「ReductImageNMMin()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!
(4-12-308)関数「void ReductNMMax(
BYTE *ptrS,BYTE *ptrD,int incS,int incD,
int n,int m);」
void ReductNMMax( // n×m画素正規化相関用画像圧縮:最大値
BYTE* ptrS, // 元配列 :処理ポインタ
BYTE* ptrD, // 圧縮後配列:処理ポインタ
int incS, // 元配列 :増加幅
int incD, // 圧縮後配列:増加幅
int n, // n×mのn
int m ); // n×mのm
関数「ReductImage()」のサブルーチンです!
関数「ReductImageNMMax()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!
(4-12-309)関数「void ReductNMTwo(
BYTE *ptrS,BYTE *ptrD,int incS,int incD,
int n,int m);」
void ReductNMTwo( // n×m画素正規化相関用画像圧縮:2番目
BYTE* ptrS, // 元配列 :処理ポインタ
BYTE* ptrD, // 圧縮後配列:処理ポインタ
int incS, // 元配列 :増加幅
int incD, // 圧縮後配列:増加幅
int n, // n×mのn
int m ); // n×mのm
関数「ReductImage()」のサブルーチンです!
関数「ReductImageNMTwo()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!
(4-12-310)関数「void ReductNMThree(
BYTE *ptrS,BYTE *ptrD,int incS,int incD,
int n,int m);」
void ReductNMThree( // n×m画素正規化相関用画像圧縮:3番目
BYTE* ptrS, // 元配列 :処理ポインタ
BYTE* ptrD, // 圧縮後配列:処理ポインタ
int incS, // 元配列 :増加幅
int incD, // 圧縮後配列:増加幅
int n, // n×mのn
int m ); // n×mのm
関数「ReductImage()」のサブルーチンです!
関数「ReductImageNMThree()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!
(4-12-311)関数「void ReductNMSkip(
BYTE *ptrS,BYTE *ptrD,int incS,int incD,
int n,int m);」
void ReductNMSkip( // n×m画素正規化相関用画像圧縮:間引き
BYTE* ptrS, // 元配列 :処理ポインタ
BYTE* ptrD, // 圧縮後配列:処理ポインタ
int incS, // 元配列 :増加幅
int incD, // 圧縮後配列:増加幅
int n, // n×mのn
int m ); // n×mのm
関数「ReductImage()」のサブルーチンです!
関数「ReductImageNMSkip()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!
(4-12-312)関数「void VectorCorrNM(
BYTE *ptrA,BYTE *ptrB,int incA,int incB,
int n,int m,int nOffsetH,int nOffsetV,
double *vecX,double *vecY);」
void VectorCorrNM( // n×m画素正規化相関による動線ベクトル算出
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int n, // n×mのn
int m, // n×mのm
int nOffsetH, // 水平方向オフセット(左右ずれ)
int nOffsetV, // 垂直方向オフセット(上下ずれ)
double* vecX, // X方向結果
double* vecY ); // Y方向結果
関数「VectorCorrImageNM()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!
(4-12-313)関数「double CorrNMLarge(
BYTE *ptrA,BYTE *ptrB,int incA,int incB,
int n,int m);」
double CorrNMLarge( // n×m画素正規化相関
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int n, // n×mのn
int m ); // n×mのm
関数「CorrImageNMLarge()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear420.cpp」が
対象】します!
(4-12-314)関数「double CorrNMLargeFirst(
BYTE *ptrA,BYTE *ptrB,int incA,int incB,
int n,int m,
int &avA,int &avB,double &sumA);」
double CorrNMLargeFirst( // n×m画素正規化相関:連続相関の最初
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int n, // n×mのn
int m, // n×mのm
int& avA, // 返値:A配列の平均値
int& avB, // 返値:B配列の平均値
double& sumA ); // 返値:A配列の分散値(自己相関)
関数「SearchCorrImageNMLarge()」のサブルーチンです!
関数「SearchCorrImageSortLarge()」のサブルーチンです!
「First」は、連続して処理する作業の「最初に処理」する
意味!
★詳細★は、後で説明:【ファイル「CopyClear420.cpp」が
対象】します!
(4-12-315)関数「double CorrNMLargeSecond(
BYTE *ptrA,BYTE *ptrB,int incA,int incB,
int n,int m,
int avA,int &avB,double sumA);」
double CorrNMLargeSecond( // n×m画素正規化相関:連続相関の2番目以降
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int n, // n×mのn
int m, // n×mのm
int avA, // A配列の平均値
int& avB, // 返値:B配列の平均値
double sumA ); // A配列の分散値(自己相関)
関数「SearchCorrImageNMLarge()」のサブルーチンです!
関数「SearchCorrImageSortLarge()」のサブルーチンです!
関数「SearchCorrImageXYSortLarge()」のサブルーチン
です!
「Second」は、連続して処理する作業の「2番目以降」に
処理する意味!
★詳細★は、後で説明:【ファイル「CopyClear420.cpp」が
対象】します!
(4-12-316)関数「double CorrNMLargeMyself(
BYTE *ptrA,int incA,int n,int m);」
double CorrNMLargeMyself( // n×m画素正規化相関:自己相関(分散)
BYTE* ptrA, // A配列:処理ポインタ
int incA, // A配列:増加幅
int n, // n×mのn
int m ); // n×mのm
関数「CorrImageNMLargeMyself()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear420.cpp」が
対象】します!
(4-12-317)関数「int CountNMMask(
BYTE *ptrM,int incM,int n,int m);」
int CountNMMask( // n×m有効画素数算出
BYTE* ptrM, // M配列:処理ポインタ
int incM, // M配列:増加幅
int n, // n×mのn
int m ); // n×mのm
関数「CorrImageNMMask()」のサブルーチンです!
関数「CorrImageNMMaskMyself()」のサブルーチンです!
関数「SearchCorrImageNMMask()」のサブルーチンです!
関数「SearchCorrImageSortMask()」のサブルーチンです!
関数「SearchCorrImageXYSortMask()」のサブルーチン
です!
★詳細★は、後で説明:【ファイル「CopyClear420.cpp」が
対象】します!
(4-12-318)関数「double AveNMMask(
BYTE *ptrA,BYTE *ptrM,int incA,int incM,
int n,int m,int cnt);」
double AveNMMask( // n×m画素平均値
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrM, // M配列:処理ポインタ
int incA, // A配列:増加幅
int incM, // M配列:増加幅
int n, // n×mのn
int m, // n×mのm
int cnt ); // M配列(マスク画像)有効数
関数「CorrNMMask()」のサブルーチンです!
関数「CorrNMMaskFirst()」のサブルーチンです!
関数「CorrNMMaskSecond()」のサブルーチンです!
関数「CorrNMMaskMyself()」のサブルーチンです!
「Second」は、連続して処理する作業の「2番目以降」に
処理する意味!
★詳細★は、後で説明:【ファイル「CopyClear440.cpp」が
対象】します!
(4-12-319)関数「double CorrNMMask(
BYTE *ptrA,BYTE *ptrB,BYTE *ptrM,
int incA,int incB,int incM,int n,int m,int cnt);」
double CorrNMMask( // n×m画素正規化相関
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
BYTE* ptrM, // M配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int incM, // M配列:増加幅
int n, // n×mのn
int m, // n×mのm
int cnt ); // M配列(マスク画像)有効数
関数「CorrImageNMMask()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear440.cpp」が
対象】します!
(4-12-320)関数「double CorrNMMaskFirst(
BYTE *ptrA,BYTE *ptrB,BYTE *ptrM,
int incA,int incB,int incM,int n,int m,
int &avA,int &avB,double &sumA,int cnt);」
double CorrNMMaskFirst( // n×m画素正規化相関:連続相関の最初
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
BYTE* ptrM, // M配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int incM, // M配列:増加幅
int n, // n×mのn
int m, // n×mのm
int& avA, // 返値:A配列の平均値
int& avB, // 返値:B配列の平均値
double& sumA, // 返値:A配列の分散値(自己相関)
int cnt ); // M配列(マスク画像)有効数
関数「SearchCorrImageNMMask()」のサブルーチンです!
関数「SearchCorrImageXYSortMask()」のサブルーチン
です!
「First」は、連続して処理する作業の「最初に処理」する
意味!
★詳細★は、後で説明:【ファイル「CopyClear440.cpp」が
対象】します!
(4-12-321)関数「double CorrNMMaskSecond(
BYTE *ptrA,BYTE *ptrB,BYTE *ptrM,
int incA,int incB,int incM,int n,int m,
int avA,int &avB,double sumA,int cnt);」
double CorrNMMaskSecond( // n×m画素正規化相関:連続相関の2番目以降
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
BYTE* ptrM, // M配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int incM, // M配列:増加幅
int n, // n×mのn
int m, // n×mのm
int avA, // A配列の平均値
int& avB, // 返値:B配列の平均値
double sumA, // A配列の分散値(自己相関)
int cnt ); // M配列(マスク画像)有効数
関数「SearchCorrImageNMMask()」のサブルーチンです!
関数「SearchCorrImageSortMask()」のサブルーチンです!
関数「SearchCorrImageXYSortMask()」のサブルーチン
です!
「Second」は、連続して処理する作業の「2番目以降」に
処理する意味!
★詳細★は、後で説明:【ファイル「CopyClear440.cpp」が
対象】します!
(4-12-322)関数「double CorrNMMaskCheck(
BYTE *ptrA,BYTE *ptrB,BYTE *ptrM,
int incA,int incB,int incM,int n,int m,
int avA,int avB,int cnt);」
double CorrNMMaskCheck( // n×m画素正規化相関:正/反検査
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrB, // B配列:処理ポインタ
BYTE* ptrM, // M配列:処理ポインタ
int incA, // A配列:増加幅
int incB, // B配列:増加幅
int incM, // M配列:増加幅
int n, // n×mのn
int m, // n×mのm
int avA, // A配列の平均値
int avB, // B配列の平均値
int cnt ); // M配列(マスク画像)有効数
関数「SearchCorrImageSortMask()」のサブルーチンです!
関数「SearchCorrImageXYSortMask()」のサブルーチン
です!
★詳細★は、後で説明:【ファイル「CopyClear440.cpp」が
対象】します!
(4-12-323)関数「double CorrNMMaskMyself(
BYTE *ptrA,BYTE *ptrM,int incA,int incM,
int n,int m,int cnt);」
double CorrNMMaskMyself( // n×m画素正規化相関:自己相関(分散)
BYTE* ptrA, // A配列:処理ポインタ
BYTE* ptrM, // M配列:処理ポインタ
int incA, // A配列:増加幅
int incM, // M配列:増加幅
int n, // n×mのn
int m, // n×mのm
int cnt ); // M配列(マスク画像)有効数
関数「CorrImageNMMaskMyself()」のサブルーチン
です!
★詳細★は、後で説明:【ファイル「CopyClear440.cpp」が
対象】します!
(4-12-324)関数「void measureXYstringFere(
TypeCorr bufxy[],int n,
int &x,int &y,int &h,int &v);」
void measureXYstringFere( // 座標列からフェレ情報算出
TypeCorr bufxy[], // 座標格納ポインタ(サーチ用)
int n, // 座標個数
int& x, // X座標(結果格納)
int& y, // Y座標(結果格納)
int& h, // 水平幅(結果格納)
int& v ); // 垂直幅(結果格納)
関数「excludeOverlapXYBase()」のサブルーチンです!
関数「excludeOverlapXYLarge()」のサブルーチンです!
関数「excludeOverlapXYSuper()」のサブルーチンです!
関数「excludeOverlapXY0Base()」のサブルーチンです!
関数「excludeOverlapXY0Large()」のサブルーチンです!
関数「excludeOverlapXY0Super()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!
(4-12-325)関数「void measureXYstringFere(
TypeCorrIX bufxy[],int n,
int &x,int &y,int &h,int &v);」
void measureXYstringFere( // 座標列からフェレ情報算出
TypeCorrIX bufxy[], // 座標格納ポインタ(サーチ用)
int n, // 座標個数
int& x, // X座標(結果格納)
int& y, // Y座標(結果格納)
int& h, // 水平幅(結果格納)
int& v ); // 垂直幅(結果格納)
関数「excludeOverlapXYBase()」のサブルーチンです!
関数「excludeOverlapXYLarge()」のサブルーチンです!
関数「excludeOverlapXYSuper()」のサブルーチンです!
関数「excludeOverlapXY0Base()」のサブルーチンです!
関数「excludeOverlapXY0Large()」のサブルーチンです!
関数「excludeOverlapXY0Super()」のサブルーチンです!
関数「excludeOverlapXY0Base()」のサブルーチンです!
関数「excludeOverlapXY0Large()」のサブルーチンです!
関数「excludeOverlapXY0Super()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!
(4-12-326)関数「int excludeOverlapXYBase(
TypeCorr bufxy[],int n,int xDistance,
int yDistance);」
int excludeOverlapXYBase( // 重複座標の排除:255個まで対応:高速
TypeCorr bufxy[], // 座標格納ポインタ(サーチ用)
int n, // 座標個数
int xDistance, // X方向距離
int yDistance ); // Y方向距離
関数「ExcludeOverlapXY()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!
(4-12-327)関数「int excludeOverlapXYLarge(
TypeCorr bufxy[],int n,int xDistance,
int yDistance);」
int excludeOverlapXYLarge( // 重複座標の排除:65535個まで対応
TypeCorr bufxy[], // 座標格納ポインタ(サーチ用)
int n, // 座標個数
int xDistance, // X方向距離
int yDistance ); // Y方向距離
関数「ExcludeOverlapXY()」のサブルーチンです!
関数「ExcludeOverlapXY()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!
(4-12-328)関数「int excludeOverlapXYSuper(
TypeCorr bufxy[],int n,int xDistance,
int yDistance);」
int excludeOverlapXYSuper( // 重複座標の排除:65536個以上対応
TypeCorr bufxy[], // 座標格納ポインタ(サーチ用)
int n, // 座標個数
int xDistance, // X方向距離
int yDistance ); // Y方向距離
関数「ExcludeOverlapXY()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!
(4-12-329)関数「int excludeOverlapXY0Base(
TypeCorr bufxy[],int n);」
int excludeOverlapXY0Base( // 同座標の排除:255個まで対応:高速
TypeCorr bufxy[], // 座標格納ポインタ(サーチ用)
int n ); // 座標個数
関数「ExcludeOverlapXY()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!
(4-12-330)関数「int excludeOverlapXY0Large(
TypeCorr bufxy[],int n);」
int excludeOverlapXY0Large( // 同座標の排除:65535個まで対応
TypeCorr bufxy[], // 座標格納ポインタ(サーチ用)
int n ); // 座標個数
関数「ExcludeOverlapXY()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!
(4-12-331)関数「int excludeOverlapXY0Super(
TypeCorr bufxy[],int n);」
int excludeOverlapXY0Super( // 同座標の排除:65536個以上対応
TypeCorr bufxy[], // 座標格納ポインタ(サーチ用)
int n ); // 座標個数
関数「ExcludeOverlapXY()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!
(4-12-332)関数「int excludeOverlapXYBase(
TypeCorrIX bufxy[],int n,int xDistance,
int yDistance);」
int excludeOverlapXYBase( // 重複座標の排除:255個まで対応:高速
TypeCorrIX bufxy[], // 座標格納ポインタ(サーチ用)
int n, // 座標個数
int xDistance, // X方向距離
int yDistance ); // Y方向距離
関数「ExcludeOverlapXY()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!
(4-12-333)関数「int excludeOverlapXYLarge(
TypeCorrIX bufxy[],int n,int xDistance,
int yDistance);」
int excludeOverlapXYLarge( // 重複座標の排除:65535個まで対応
TypeCorrIX bufxy[], // 座標格納ポインタ(サーチ用)
int n, // 座標個数
int xDistance, // X方向距離
int yDistance ); // Y方向距離
関数「ExcludeOverlapXY()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!
(4-12-334)関数「int excludeOverlapXYSuper(
TypeCorrIX bufxy[],int n,int xDistance,
int yDistance);」
int excludeOverlapXYSuper( // 重複座標の排除:65536個以上対応
TypeCorrIX bufxy[], // 座標格納ポインタ(サーチ用)
int n, // 座標個数
int xDistance, // X方向距離
int yDistance ); // Y方向距離
関数「ExcludeOverlapXY()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!
(4-12-335)関数「int excludeOverlapXY0Base(
TypeCorrIX bufxy[],int n);」
int excludeOverlapXY0Base( // 同座標の排除:255個まで対応:高速
TypeCorrIX bufxy[], // 座標格納ポインタ(サーチ用)
int n ); // 座標個数
関数「ExcludeOverlapXY()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!
(4-12-336)関数「int excludeOverlapXY0Large(
TypeCorrIX bufxy[],int n);」
int excludeOverlapXY0Large( // 同座標の排除:65535個まで対応
TypeCorrIX bufxy[], // 座標格納ポインタ(サーチ用)
int n ); // 座標個数
関数「ExcludeOverlapXY()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!
(4-12-337)関数「int excludeOverlapXY0Super(
TypeCorrIX bufxy[],int n);」
int excludeOverlapXY0Super( // 同座標の排除:65536個以上対応
TypeCorrIX bufxy[], // 座標格納ポインタ(サーチ用)
int n ); // 座標個数
関数「ExcludeOverlapXY()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!
(4-12-338)関数「int
makeCorrImageMyselfExtend(
TypeArray* image,TypeXY *bufXY,
int *bufL,int maxN,
int nStepH,int nStepV,double tA,double tB,
int nOffsetH,int nOffsetV);」
int makeCorrImageMyselfExtend( // 自己相関:拡張用座標作成
TypeArray* image, // 画像
TypeXY* bufXY, // 結果座標バッファー
int* bufL, // 結果バッファー:概要
int maxN, // 最大結果数
int nStepH, // 水平方向次点ステップ数
int nStepV, // 垂直方向次点ステップ数
double tA, // 最小概要しきい値
double tB, // 最大概要しきい値
int nOffsetH, // 水平方向オフセット
int nOffsetV ); // 垂直方向オフセット
関数「CorrImage88MyselfExtend()」のサブルーチンです!
関数「CorrImage44MyselfExtend()」のサブルーチンです!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」
及びファイル「CopyClear410.cpp」と
ファイル「CopyClear430.cpp」が対象】します!
★備考★
私が、テキストエディタ編集作業ミス≪文字列置き換え作業
の範囲設定し忘れで余計な別の文字列まで置き換え等≫とか
解説『解説クラスTypeArray』でも記載したが、
noteエディタの変な特性でコピペした文章の半角「*」
が消されたり、空白「 」が消される事が多々あります!
注意して手作業で修正している筈ですが、必ず、code
機能で表示して居る物を正しいとして確認して下さい
3月7日分迄の講義とします!本日の講義はココまでと
します!ライブラリ作者の私でも疲れたのだから、
新しい概念に接して居る受講生の皆様もお疲れと思います!オマケにNoteサーバーが、
人気に成ったのか想定外に重たく、追加編集が遣り難く成り
追加する事が出来ません!取り敢えずサブルーチン紹介
までこの文書で終わります!
続きは、「解説クラスCopyClear(10)」に
成ります!