見出し画像

解説クラスCopyClear(5)

解説クラスCopyClear(5)


2024年2月29初講(初稿)


この講義は解説『解説クラスCopyClear(4)』
続きです!

(4-9)正規相関系関数群

正規相関

上図で青枠の4×4画像と緑枠の4×4画像の相関値
「-1.0」と赤枠の4×4画像とオレンジ枠の4×4画像
の相関値「-0.1」に成る事を示し

式1

これは、解説『参考:ADS社画像処理装置』から
PDF形式のファイルをダウンロード出来る様にしています
が、「1.i・Zooコマンド解説書」の中のダウン
ロードファイル「Cmd.pdf」のPDF文書から
「(2)正規化相互相関」の所に記載して居る式です!
残念ながら私自身が、TEX(テフ)の記載方法を勉強して
無いので「本来ならば、本文に数式を記載」した方が見易い
と思うのですが、図で間に合わせました!
これ等の式を適応させて「4×4画像」の画素数値を適応さ
せた手順としてのメモ書きのエクセルのシートが

エクセル枠内

です?!適当に枠内の数値を変えてドウナルカ実験して見て
下さい!勿論、枠内は、「4×4サイズ画像例1」の
(B2)⇒(E5)の矩形(四角形)枠、で
「「4×4サイズ画像例2」が(G2)⇒(J5)の
矩形(四角形)枠、で
「「4×4サイズ画像例3」が(B9)⇒(E12)の
矩形(四角形)枠、で「「4×4サイズ画像例4」が
(G9)⇒(J12)の矩形(四角形)枠内の数値を手作業
で変更して色々試して下さい!シートの平均値とか相関計算
の計算式も参考にして下さい!
です?!適当に枠内の数値を変えてドウナルカ実験して見て
下さい!
勿論、入れるデータは、単色(モノクロ)画像画素データと
して(0・・255)の1バイト単位符号なし値を入れて下
さい!

ピラミッド構造

正規化相関での画像比較で4×4と極基本的な小さなサイズ
を示しましたが、モット大きな画像も効率的に比較する為の
ピラミッド圧縮と言う概念の一部を図示して起きます!
これもロードファイル「Cmd.pdf」のPDF文書から
「(4)ピラミッド構造」の所に記載して居る文章です!

ピラミッド圧縮

そして関連する概念も示します!
これもロードファイル「Cmd.pdf」のPDF文書から
「(5)ピラミッド圧縮」の所に記載して居る文章です!

★★注意★★
「正規相関系関数群」をクラス「CopyClear」の
終わり頃に組み込んだ理由:私がADS社在籍中の20世紀
最後に接した有効な「画像処理技法」と認識し、使い道が、
多数考えられるので「基礎的な画像処理クラス」としての
クラス「CopyClear」に入れるのが相応しいと考え
たからです!
★★注意★★
「画像処理技法としての正規相関」は、ベタな画像の比較だ
けで無く、例に使用した「4×4升」画像の様な小さな部分
画像の比較を行う事を組み合わせて時間差≪撮影時間が異な
る:動画では、前後のフレーム間比較≫で物体がどの方向に
ドレだけ動いたかが分かるとか、ベクトル表示等、多彩な使
い方が出来ます!更に21世紀にAIで画像を認識する最も
基本が正規相関で得られた?!画像間相関値=画像間一致率
で得られた一致率を使用してディープラーニングを行って居
る筈です!

(4-9-1)関数「void CorrImage44(
TypeArray* pa,TypeArray* pb,double *buf,
int nStepH,int nStepV,int &resH,int &resV);」

    void            CorrImage44(                    // 4×4画素正規化相関:画像単位
        TypeArray*  pa,                             // A配列
        TypeArray*  pb,                             // B配列
        double*     buf,                            // 結果バッファー
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「Corr」は、相関を意味します!
「Image」は、勿論、画像です!
「44」は、4×4=縦(X座標方向:水平方向)が4画素×
横(Y座標方向:垂直方向)が4画素と言う基本的な相関を
計算する画像サイズを意味します!
相関値を算出し比較する画像は、
仮引数「TypeArray* pa,」と仮引数「TypeArray* pb,」
で示される画素単位「w=1」画像専用です!
★注意★専用に出来て居るので画素単位「w≠1」の場合は
想定外の動きと成る事に気を付けて下さい!
但し、誤解の無い様に仮引数の画像サイズは、4×4と
勘違いシナイ様に、モット大きな画像を4×4升を
仮引数「int nStepH,int nStepV,」とステップ(間隔)を
開けて比較する事で画像全体を比較≪相関値を
仮引数「double *buf,」に算出後格納≫する関数です!
★詳細★は、後で説明:【ファイル「CopyClear430.cpp」が
対象】します!

(4-9-2)関数「void GetHVCorrImage44(
TypeArray* pa,TypeArray* pb,
int nStepH,int nStepV,int &resH,int &resV);」

    void            GetHVCorrImage44(               // 4×4画素正規化相関用升目個数取得
        TypeArray*  pa,                             // A配列
        TypeArray*  pb,                             // B配列
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「Get」は、取得するを意味します!
「HV」は、水平・垂直の幅のサイズを意味します!
「CorrImage44」は、直前に説明した
関数「void CorrImage44()」の事です!
この「GetHVCorrImage44()」は、補助的に関数
「void CorrImage44()」を実行する前に
仮引数「int &resH,int &resV」に「HV」と水平・垂直の
幅のサイズをこの関数で取得して関数
「void CorrImage44()」の仮引数「double *buf,」の
バッファサイズを取得する為のサイズとします!
★注意★何故、無計画に泥縄的に関数を作成して居るかと
言うと、正規化相関関連の関数は「お初」な技術なので走り
ながら、考え、「トライ&エラー」を繰り返したからです!
他の画像処理関連も多かれ少なかれ「トライ&エラー」の塊
ですが、特に多いのがこの手法ですし、
エッセイ『20世紀最後のお仕事』で記載した富士通製造の
特殊用途ボードからも使用していた技術を流用して居る等、
多くの技術を詰め込んだのもココの関数群です!
★詳細★は、後で説明:【ファイル「CopyClear430.cpp」が
対象】します!

(4-9-3)関数「
void AverageImage44(
TypeArray* pa,BYTE *buf,
int nStepH,int nStepV,
int &resH,int &resV);」

    void            AverageImage44(                 // 4×4画素平均:画像単位
        TypeArray*  pa,                             // A配列
        BYTE*       buf,                            // 結果バッファー:BYTE
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「Average」は、勿論英単語で「平均値」を意味します!
「Image44」で画像のサイズが4×4を意味します!
詰り、関数「void CorrImage44()」を計算する元に成る平均
値の作成用の平均値が仮引数「BYTE *buf,」に算出して格納
する関数です!
★詳細★は、後で説明:【ファイル「CopyClear430.cpp」が
対象】します!

(4-9-4)関数「
void AverageImage44(
TypeArray* pa,double *buf,
int nStepH,int nStepV,
int &resH,int &resV);」

    void            AverageImage44(                 // 4×4画素平均:画像単位
        TypeArray*  pa,                             // A配列
        double*     buf,                            // 結果バッファー:倍精度
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「Average」は、勿論英単語で「平均値」を意味します!
「Image44」で画像のサイズが4×4を意味します!
詰り、関数「void CorrImage44()」を計算する元に成る平均
値の作成用の平均値が仮引数「double *buf,」に算出して
格納する関数です!勿論、バッファの型が「BYTE *型」の
関数とのオーバーロード(多重定義)関数です!
★詳細★は、後で説明:【ファイル「CopyClear430.cpp」が
対象】します!

(4-9-5)関数「void CorrImage44Myself(
TypeArray* pa,int *buf,int nStepH,int nStepV,
int &resH,int &resV);」

    void            CorrImage44Myself(              // 4×4画素自己相関:画像単位
        TypeArray*  pa,                             // A配列
        int*        buf,                            // 結果バッファー
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「CorrImage44」は、関数「void CorrImage44()」で説明し
た通りです!
「Myself」勿論、英単語「Myself」自分自身を意味します!
詰り、「自己相関」を算出する関数です!
★詳細★は、後で説明:【ファイル「CopyClear430.cpp」が
対象】します!

(4-9-6)関数「void GetHVCorrImage44Myself(
TypeArray* pa,
int nStepH,int nStepV,int &resH,int &resV);」

    void            GetHVCorrImage44Myself(         // 4×4画素自己相関用升目個数取得
        TypeArray*  pa,                             // A配列
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「Get」は、取得するを意味します!
「HV」は、水平・垂直の幅のサイズを意味します!
「CorrImage44Myself」は、直前に説明した
関数「void CorrImage44Myself()」の事です!
この「GetHVCorrImage44Myself()」は、補助的に関数
「void CorrImage44Myself()」を実行する前に
仮引数「int &resH,int &resV」に「HV」と水平・垂直の
幅のサイズをこの関数で取得して関数
「void CorrImage44Myself()」の仮引数「int *buf,」の
バッファサイズを取得する為のサイズとします!
★注意★何故、無計画に泥縄的に関数を作成して居るかと
言うと、正規化相関関連の関数は「お初」な技術なので走り
ながら、考え、「トライ&エラー」を繰り返したからです!
他の画像処理関連も多かれ少なかれ「トライ&エラー」の塊
ですが、特に多いのがこの手法です!
★詳細★は、後で説明:【ファイル「CopyClear430.cpp」が
対象】します!

(4-9-7)関数「void SearchCorrImage44(
TypeArray* pa,TypeArray* pb,double *buf,
int nStepH,int nStepV,int &resH,int &resV);」

    void            SearchCorrImage44(              // 4×4画素画像サーチ
        TypeArray*  pa,                             // A配列:サーチ対象
        TypeArray*  pb,                             // B配列:サーチ範囲
        double*     buf,                            // 結果バッファー
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「Search」は、英単語「Search」で意味「探す」です!
「CorrImage44」は、前に説明した
関数「void CorrImage44()」の事です!
詰り、仮引数「TypeArray* pa,」で示した4×4サイズの
画像をテンプレートとして仮引数「TypeArray* pb,」で
現わされる大きな(広い)画像から一致する4×4サイズの
画像をサーチする≪仮引数「double *buf,」に一致率を格納
する事で何処が一致して居るか分かる様に成る≫を行う関数
です!
★詳細★は、後で説明:【ファイル「CopyClear430.cpp」が
対象】します!

(4-9-8)関数「void GetHVSearchCorrImage44(
TypeArray* pa,TypeArray* pb,
int nStepH,int nStepV,int &resH,int &resV);」

    void            GetHVSearchCorrImage44(         // 4×4画素画像サーチ用升目個数取得
        TypeArray*  pa,                             // A配列:サーチ対象
        TypeArray*  pb,                             // B配列:サーチ範囲
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「Get」は、取得するを意味します!
「HV」は、水平・垂直の幅のサイズを意味します!
「SearchCorrImage44」は、直前に説明した
関数「void SearchCorrImage44()」の事です!
この「GetHVSearchCorrImage44()」は、補助的に
関数「void SearchCorrImage44()」を実行する前に
仮引数「int &resH,int &resV」に「HV」と水平・垂直の
幅のサイズをこの関数で取得して関数
「void SearchCorrImage44()」の
仮引数「double *buf,」のバッファサイズを
取得する為のサイズとします!
★詳細★は、後で説明:【ファイル「CopyClear430.cpp」が
対象】します!

(4-9-9)関数「double AverageImage44XY(
TypeArray* pa,int x,int y);」

    double          AverageImage44XY(               // 4×4画素平均:画像単位:個別座標指定
        TypeArray*  pa,                             // A配列
        int         x,                              // X座標オフセット
        int         y );                            // Y座標オフセット
    void            AverageImage44XY(               // 4×4画素平均:画像単位:座標指定

「Average」は、勿論英単語で「平均値」を意味します!
「Image44」で画像のサイズが4×4を意味します!
「XY」でXY座標変位を示します!詰り、
仮引数「TypeArray* pa,」で示される画像から、
仮引数「int x,int y」で座標変位を指定した4×4サイズの
画像の画素の平均値を算出して座標の値としてdouble 型で
関数値として返す関数です!
★備考★この関数は、オーバーロード(多重定義)として
同じ関数名で複数の結果をバッファーに格納する形式の関数
も存在しますが、☆説明☆し易い為にワザワザ作成したと思
える関数です!
★詳細★は、後で説明:【ファイル「CopyClear430.cpp」が
対象】します!

(4-9-10)関数「void AverageImage44XY(
TypeArray* pa,TypeXY *xy,BYTE *buf,
int size,int offX=0,int offY=0);」

    void            AverageImage44XY(               // 4×4画素平均:画像単位:座標指定
        TypeArray*  pa,                             // A配列
        TypeXY*     xy,                             // 探索座標列
        BYTE*       buf,                            // 結果バッファー:BYTE
        int         size,                           // バッファーサイズ
        int         offX = 0,                       // X座標オフセット
        int         offY = 0 );                     // Y座標オフセット

「Average」は、勿論英単語で「平均値」を意味します!
「Image44」で画像のサイズが4×4を意味します!
「XY」でXY座標変位を示します!詰り、
仮引数「TypeArray* pa,」で示される画像から、
仮引数「TypeXY *xy」で構造体型名「TypeXY *」で
座標変位バッファーに格納したXY座標変位を指定した
4×4サイズの画像の画素の平均値を算出して
仮引数「BYTE *buf,」座標の値としてBYTE型の結果
バッファーで結果を格納する関数です!
★備考★この関数は、オーバーロード(多重定義)として
同じ関数名で結果バッファーの型が異なる関数も存在しま
す!
★詳細★は、後で説明:【ファイル「CopyClear430.cpp」が
対象】します!

(4-9-11)関数「void AverageImage44XY(
TypeArray* pa,TypeXY *xy,double *buf,
int size,int offX=0,int offY=0);」

    void            AverageImage44XY(               // 4×4画素平均:画像単位:座標指定
        TypeArray*  pa,                             // A配列
        TypeXY*     xy,                             // 探索座標列
        double*     buf,                            // 結果バッファー:倍精度
        int         size,                           // バッファーサイズ
        int         offX = 0,                       // X座標オフセット
        int         offY = 0 );                     // Y座標オフセット

「Average」は、勿論英単語で「平均値」を意味します!
「Image44」で画像のサイズが4×4を意味します!
「XY」でXY座標変位を示します!詰り、
仮引数「TypeArray* pa,」で示される画像から、
仮引数「TypeXY *xy」で構造体型名「TypeXY *」で
座標変位バッファーに格納したXY座標変位を指定した
4×4サイズの画像の画素の平均値を算出して
仮引数「double *buf,」座標の値としてdouble 型の結果
バッファーで結果を格納する関数です!
★備考★この関数は、オーバーロード(多重定義)として
同じ関数名で結果バッファーの型が異なる関数も存在しま
す!
★詳細★は、後で説明:【ファイル「CopyClear430.cpp」が
対象】します!

(4-9-12)関数「double CorrImage44XY(
TypeArray* pa,TypeArray* pb,
int x,int y);」

    double          CorrImage44XY(                  // 4×4画素正規化相関:画像単位:個別座標指定
        TypeArray*  pa,                             // A配列
        TypeArray*  pb,                             // B配列
        int         x,                              // X座標オフセット
        int         y );                            // Y座標オフセット

「Corr」は、相関を意味します!
「Image」は、勿論、画像です!
「44」は、4×4=縦(X座標方向:水平方向)が4画素×
横(Y座標方向:垂直方向)が4画素と言う基本的な相関を
計算する画像サイズを意味します!
「XY」でXY座標変位を示します!詰り、
仮引数「TypeArray* pa,TypeArray* pb,」で
示される画像相互の相関値を算出して
仮引数「int x,int y」で座標変位を指定した4×4サイズ
の画像の相関値を算出してdouble 型で関数値として返す
関数です!
★備考★この関数は、オーバーロード(多重定義)として
同じ関数名で複数の結果をバッファーに格納する形式の関数
も存在しますが、
☆説明☆し易い為にワザワザ作成したと思える関数です!
★詳細★は、後で説明:【ファイル「CopyClear430.cpp」が
対象】します!

(4-9-13)関数「void CorrImage44XY(
TypeArray* pa,TypeArray* pb,
TypeXY *xy,double *buf,
int size,int offX=0,int offY=0);」

    void            CorrImage44XY(                  // 4×4画素正規化相関:画像単位:座標指定
        TypeArray*  pa,                             // A配列
        TypeArray*  pb,                             // B配列
        TypeXY*     xy,                             // 探索座標列
        double*     buf,                            // 結果バッファー
        int         size,                           // バッファーサイズ
        int         offX = 0,                       // X座標オフセット
        int         offY = 0 );                     // Y座標オフセット

「Corr」は、相関を意味します!
「Image」は、勿論、画像です!
「44」は、4×4=縦(X座標方向:水平方向)が4画素×
横(Y座標方向:垂直方向)が4画素と言う基本的な相関を
計算する画像サイズを意味します!
「XY」でXY座標変位を示します!詰り、
仮引数「TypeArray* pa,TypeArray* pb,」で示される画像
の中で
仮引数「TypeXY *xy」で構造体型名「TypeXY *」で
座標変位バッファーに格納したXY座標変位を指定した
4×4サイズの画像の画素の相関値を算出して
仮引数「double *buf,」座標の値としてdouble 型の結果
バッファーで結果を格納する関数です!
★備考★この関数は、オーバーロード(多重定義)として
同じ関数名で一か所の値を返す関数も存在します!
★詳細★は、後で説明:【ファイル「CopyClear430.cpp」が
対象】します!

(4-9-14)関数「double CorrImage44MyselfXY(
TypeArray* pa,int x,int y);」

    double          CorrImage44MyselfXY(            // 4×4画素自己相関:画像単位:個別座標指定
        TypeArray*  pa,                             // A配列
        int         x,                              // X座標オフセット
        int         y );                            // Y座標オフセット

「CorrImage44」は、関数「void CorrImage44()」で説明し
た通りです!
「Myself」勿論、英単語「Myself」自分自身を意味します!
詰り、「自己相関」を算出する関数です!
「XY」でXY座標変位を示します!詰り、
仮引数「TypeArray* pa,」で示される画像から、
仮引数「int x,int y」で座標変位を指定した4×4サイズの
画像の画素の自己相関を算出してdouble 型で関数値として
返す関数です!
★備考★この関数は、オーバーロード(多重定義)として
同じ関数名で複数の結果をバッファーに格納する形式の関数
も存在しますが、☆説明☆し易い為にワザワザ作成したと思
える関数です!
★詳細★は、後で説明:【ファイル「CopyClear430.cpp」が
対象】します!

(4-9-15)関数「
void CorrImage44MyselfXY(
TypeArray* pa,TypeXY *xy,double *buf,
int size,int offX=0,int offY=0);」

    void            CorrImage44MyselfXY(            // 4×4画素自己相関:画像単位:座標指定
        TypeArray*  pa,                             // A配列
        TypeXY*     xy,                             // 探索座標列
        double*     buf,                            // 結果バッファー
        int         size,                           // バッファーサイズ
        int         offX = 0,                       // X座標オフセット
        int         offY = 0 );                     // Y座標オフセット

「CorrImage44」は、関数「void CorrImage44()」で説明し
た通りです!
「Myself」勿論、英単語「Myself」自分自身を意味します!
詰り、「自己相関」を算出する関数です!
「XY」でXY座標変位を示します!詰り、
仮引数「TypeArray* pa,」で示される画像から、
仮引数「TypeXY *xy」で構造体型名「TypeXY *」で
座標変位バッファーに格納したXY座標変位を指定した
4×4サイズの画像の画素の相関値を算出して
仮引数「double *buf,」座標の値としてdouble 型の結果
バッファーで結果を格納する関数です!
★備考★この関数は、オーバーロード(多重定義)として
同じ関数名で一か所の値を返す関数も存在します!
★詳細★は、後で説明:【ファイル「CopyClear430.cpp」が
対象】します!

(4-9-16)関数「void CorrImage44MyselfXY(
TypeArray* pa,TypeXY *xy,
double *buf,BYTE *bufAve,
int size,int offX=0,int offY=0);」

    void            CorrImage44MyselfXY(            // 4×4画素自己相関+平均:画像単位:座標指定
        TypeArray*  pa,                             // A配列
        TypeXY*     xy,                             // 探索座標列
        double*     buf,                            // 結果バッファー
        BYTE*       bufAve,                         // 結果バッファー:平均値
        int         size,                           // バッファーサイズ
        int         offX = 0,                       // X座標オフセット
        int         offY = 0 );                     // Y座標オフセット

「CorrImage44」は、関数「void CorrImage44()」で説明し
た通りです!
「Myself」勿論、英単語「Myself」自分自身を意味します!
詰り、「自己相関」を算出する関数です!
「XY」でXY座標変位を示します!詰り、
仮引数「TypeArray* pa,」で示される画像から、
仮引数「TypeXY *xy」で構造体型名「TypeXY *」で
座標変位バッファーに格納したXY座標変位を指定した
4×4サイズの画像の画素の相関値を算出して
仮引数「double *buf,」座標の値としてdouble 型の結果
バッファーで結果を格納する関数です!そして特徴として
仮引数「BYTE *bufAve,」に自己相関算出時に算出される
平均値を副産物として格納出来る関数です!
★備考★この関数は、オーバーロード(多重定義)として
同じ関数名で仮引数「BYTE *bufAve,」を格納しないとか、
格納する型が異なる関数も同じ名前で引数の違いだけで用意
しています。☆注意☆平均値有り無しを名前で判別するのは
多重定義記述を知ってから面倒くさいと考えたから?!多重
定義を使用しましたので読解する時・使用する時には細かい
引数迄、注意して下さい!
★詳細★は、後で説明:【ファイル「CopyClear430.cpp」が
対象】します!

(4-9-17)関数「void CorrImage44MyselfXY(
TypeArray* pa,TypeXY *xy,int *buf,
int size,int offX=0,int offY=0);」

    void            CorrImage44MyselfXY(            // 4×4画素自己相関:画像単位:座標指定
        TypeArray*  pa,                             // A配列
        TypeXY*     xy,                             // 探索座標列
        int*        buf,                            // 結果バッファー:整数
        int         size,                           // バッファーサイズ
        int         offX = 0,                       // X座標オフセット
        int         offY = 0 );                     // Y座標オフセット

「CorrImage44」は、関数「void CorrImage44()」で説明し
た通りです!
「Myself」勿論、英単語「Myself」自分自身を意味します!
詰り、「自己相関」を算出する関数です!
「XY」でXY座標変位を示します!詰り、
仮引数「TypeArray* pa,」で示される画像から、
仮引数「TypeXY *xy」で構造体型名「TypeXY *」で
座標変位バッファーに格納したXY座標変位を指定した
4×4サイズの画像の画素の相関値を算出して
仮引数「int *buf,」座標の値としてint型の結果
バッファーで結果を格納する関数です!
★備考★この関数は、オーバーロード(多重定義)として
同じ関数名で平均値も副産物として格納するとか、
格納する型が異なる関数も同じ名前で引数の違いだけで用意
しています。
☆注意☆平均値有り無しを名前で判別するのは多重定義記述
を知ってから面倒くさいと考えたから?!
多重定義を使用しましたので読解する時・使用する時には
細かい引数迄、注意して下さい!
★詳細★は、後で説明:【ファイル「CopyClear430.cpp」が
対象】します!

(4-9-18)関数「void CorrImage44MyselfXY(
TypeArray* pa,TypeXY *xy,
int *buf,BYTE *bufAve,
int size,int offX=0,int offY=0);」

    void            CorrImage44MyselfXY(            // 4×4画素自己相関+平均:画像単位:座標指定
        TypeArray*  pa,                             // A配列
        TypeXY*     xy,                             // 探索座標列
        int*        buf,                            // 結果バッファー:整数
        BYTE*       bufAve,                         // 結果バッファー:平均値
        int         size,                           // バッファーサイズ
        int         offX = 0,                       // X座標オフセット
        int         offY = 0 );                     // Y座標オフセット

「CorrImage44」は、関数「void CorrImage44()」で説明し
た通りです!
「Myself」勿論、英単語「Myself」自分自身を意味します!
詰り、「自己相関」を算出する関数です!
「XY」でXY座標変位を示します!詰り、
仮引数「TypeArray* pa,」で示される画像から、
仮引数「TypeXY *xy」で構造体型名「TypeXY *」で
座標変位バッファーに格納したXY座標変位を指定した
4×4サイズの画像の画素の相関値を算出して
仮引数「int *buf,」座標の値としてint型の結果
バッファーで結果を格納する関数です!そして特徴として
仮引数「BYTE *bufAve,」に自己相関算出時に算出される
平均値を副産物として格納出来る関数です!
★備考★この関数は、オーバーロード(多重定義)として
同じ関数名で仮引数「BYTE *bufAve,」を格納しないとか、
格納する型が異なる関数も同じ名前で引数の違いだけで用意
しています。☆注意☆平均値有り無しを名前で判別するのは
多重定義記述を知ってから面倒くさいと考えたから?!多重
定義を使用しましたので読解する時・使用する時には細かい
引数迄、注意して下さい!
★詳細★は、後で説明:【ファイル「CopyClear430.cpp」が
対象】します!

(4-9-19)関数「int CorrImage44MyselfExtend(
TypeArray* image,TypeXY *bufXY,double *buf,
int maxN,int nStepH,int nStepV,
double tA,double tB);」

    int             CorrImage44MyselfExtend(        // 4×4画素自己相関:拡張
        TypeArray*  image,                          // 画像
        TypeXY*     bufXY,                          // 結果座標バッファー
        double*     buf,                            // 結果バッファー
        int         maxN,                           // 最大結果数
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        double      tA,                             // 最小概要しきい値
        double      tB );                           // 最大概要しきい値

「CorrImage44」は、関数「void CorrImage44()」で説明し
た通りです!
「Myself」勿論、英単語「Myself」自分自身を意味します!
「Extend」は、勿論、英単語「Extend」拡張を意味します!
詰り、「自己相関」を算出する関数の拡張です!
詰り、
仮引数「TypeArray* pa,」で示される画像から、
仮引数「TypeXY *xy」で構造体型名「TypeXY *」で
座標変位バッファーに格納したXY座標変位を指定した
4×4サイズの画像の画素の相関値を算出して
仮引数「double *buf,」座標の値としてdouble 型の結果
バッファーで結果を格納する関数です!そして特徴として
仮引数「double tA,double tB」に概要の相関算出される
閾値の範囲内で詳細に算出して結果を格納する関数です!
★詳細★は、後で説明:【ファイル「CopyClear430.cpp」が
対象】します!

(4-9-20)関数「void CorrImage88(
TypeArray* pa,TypeArray* pb,double* buf,
int nStepH,int nStepV,
int &resH,int &resV);」

    void            CorrImage88(                    // 8×8画素正規化相関:画像単位
        TypeArray*  pa,                             // A配列
        TypeArray*  pb,                             // B配列
        double*     buf,                            // 結果バッファー
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「Corr」は、相関を意味します!
「Image」は、勿論、画像です!
「88」は、8×8=縦(X座標方向:水平方向)が8画素×
横(Y座標方向:垂直方向)が8画素と言う基本的な相関を
計算する画像サイズを意味します!
相関値を算出し比較する画像は、
仮引数「TypeArray* pa,」と仮引数「TypeArray* pb,」
で示される画素単位「w=1」画像専用です!★注意★専用に
出来て居るので画素単位「w≠1」の場合は想定外の動きと成
る事に気を付けて下さい!但し、誤解の無い様に仮引数の
画像サイズは、8×8と勘違いシナイ様に、モット大きな
画像を8×8升を仮引数「int nStepH,int nStepV,」と
ステップ(間隔)を開けて比較する事で画像全体を比較≪
相関値を仮引数「double *buf,」に算出後格納≫する関数
です!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!

(4-9-21)関数「void GetHVCorrImage88(
TypeArray* pa,TypeArray* pb,
int nStepH,int nStepV,int &resH,int &resV);」

    void            GetHVCorrImage88(               // 8×8画素正規化相関用升目個数取得
        TypeArray*  pa,                             // A配列
        TypeArray*  pb,                             // B配列
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「Get」は、取得するを意味します!
「HV」は、水平・垂直の幅のサイズを意味します!
「CorrImage88」は、直前に説明した
関数「CorrImage88()」の事です!
この「GetHVCorrImage88()」は、補助的に
関数「void CorrImage88()」を実行する前に
仮引数「int &resH,int &resV」に「HV」と水平・垂直の
幅のサイズをこの関数で取得して関数
「void CorrImage88()」の
仮引数「double *buf,」のバッファサイズを
取得する為のサイズとします!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!

(4-9-22)関数「void AverageImage88(
TypeArray* pa,BYTE *buf,
int nStepH,int nStepV,int &resH,int &resV);」

    void            AverageImage88(                 // 8×8画素平均:画像単位
        TypeArray*  pa,                             // A配列
        BYTE*       buf,                            // 結果バッファー:BYTE
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「Average」は、勿論英単語で「平均値」を意味します!
「Image88」で画像のサイズが8×8を意味します!
詰り、関数「void CorrImage88()」を計算する元に成る平均
値の作成用の平均値が仮引数「BYTE *buf,」に算出して
格納する関数です!勿論、バッファの型が「double *型」の
関数とのオーバーロード(多重定義)関数です!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!

(4-9-23)関数「void AverageImage88(
TypeArray* pa,double *buf,
int nStepH,int nStepV,int &resH,int &resV);」

    void            AverageImage88(                 // 8×8画素平均:画像単位
        TypeArray*  pa,                             // A配列
        double*     buf,                            // 結果バッファー:倍精度
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「Average」は、勿論英単語で「平均値」を意味します!
「Image88」で画像のサイズが8×8を意味します!
詰り、関数「void CorrImage88()」を計算する元に成る平均
値の作成用の平均値が仮引数「double *buf,」に算出して
格納する関数です!勿論、バッファの型が「double *型」の
関数とのオーバーロード(多重定義)関数です!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!

(4-9-24)関数「void CorrImage88Myself(
TypeArray* pa,int *buf,
int nStepH,int nStepV,int &resH,int &resV);」

    void            CorrImage88Myself(              // 8×8画素自己相関:画像単位
        TypeArray*  pa,                             // A配列
        int*        buf,                            // 結果バッファー
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「CorrImage88」は、関数「void CorrImage88()」で説明し
た通りです!
「Myself」勿論、英単語「Myself」自分自身を意味します!
詰り、「自己相関」を算出する関数です!
詰り、関数「void CorrImage88()」を計算する元に成る
自己相関値の作成用の相関値が仮引数「int *buf,」に算出
して格納する関数です!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!

(4-9-25)関数「void GetHVCorrImage88Myself(
TypeArray* pa,int nStepH,int nStepV,
int &resH,int &resV);」

    void            GetHVCorrImage88Myself(         // 8×8画素自己相関用升目個数取得
        TypeArray*  pa,                             // A配列
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「Get」は、取得するを意味します!
「HV」は、水平・垂直の幅のサイズを意味します!「CorrImage88」は、関数「void CorrImage88()」で説明し
た通りです!
「Myself」勿論、英単語「Myself」自分自身を意味します!
詰り、「自己相関」を算出する関数です!
この「GetHVCorrImage88Myself()」は、補助的に
関数「void CorrImage88Myself()」を実行する前に
仮引数「int &resH,int &resV」に「HV」と水平・垂直の
幅のサイズをこの関数で取得して関数
「void CorrImage88Myself()」の
仮引数「int *buf,」のバッファサイズを
取得する為のサイズとします!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!

(4-9-26)関数「void SearchCorrImage88(
TypeArray* pa,TypeArray* pb,double buf,
int nStepH,int nStepV,int &resH,int &resV);」

    void            SearchCorrImage88(              // 8×8画素画像サーチ
        TypeArray*  pa,                             // A配列:サーチ対象
        TypeArray*  pb,                             // B配列:サーチ範囲
        double*     buf,                            // 結果バッファー
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「Search」は、英単語「Search」で意味「探す」です!
「CorrImage88」は、前に説明した
関数「void CorrImage88()」の事です!
詰り、仮引数「TypeArray pa,」で示した8×8サイズの
画像をテンプレートとして仮引数「TypeArray* pb,」で
現わされる大きな(広い)画像から一致する8×8サイズの
画像をサーチする≪仮引数「double *buf,」に一致率を格納
する事で何処が一致して居るか分かる様に成る≫を行う関数
です!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!

(4-9-27)関数「void GetHVSearchCorrImage88(
TypeArray* pa,TypeArray* pb,
int nStepH,int nStepV,int &resH,int &resV);」

    void            GetHVSearchCorrImage88(         // 8×8画素画像サーチ用升目個数取得
        TypeArray*  pa,                             // A配列:サーチ対象
        TypeArray*  pb,                             // B配列:サーチ範囲
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「Get」は、取得するを意味します!
「HV」は、水平・垂直の幅のサイズを意味します!
「SearchCorrImage88」は、直前に説明した
関数「void SearchCorrImage88()」の事です!
この「GetHVSearchCorrImage88()」は、補助的に
関数「void SearchCorrImage88()」を実行する前に
仮引数「int &resH,int &resV」に「HV」と水平・垂直の
幅のサイズをこの関数で取得して関数
「void SearchCorrImage88()」の
仮引数「double *buf,」のバッファサイズを
取得する為のサイズとします!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!

(4-9-28)関数「void ReductImage88Ave(
TypeArray* ps,TypeArray* pd);」

    void            ReductImage88Ave(               // 画像変換:8×8画素正規化相関用画像圧縮:平均
        TypeArray*  ps,                             // S配列
        TypeArray*  pd );                           // D配列

「Reduct」は、英単語「Reduce」で「減らす」と動詞、
英単語「reduction」で割引とか削減、ここでは、
「ReductImage」で画像を圧縮するとの意味で使用しまし
た!「ReductImage88」で
仮引数「TypeArray* ps,」と元画像の16×16サイズ
升画像を仮引数「TypeArray* pd,」と結果画像の
8×8サイズ升画像作成する処理を行います!
「Ave」は、英単語「Average」の省略形で圧縮方法が、
元画像の平均値を結果画像にする事を意味します!
元画像の4画素≪左上・右上・左下・右下≫の平均値です!
☆目的☆ピラミッド圧縮手法と言う速度向上手段です!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!

(4-9-29)関数「void ReductImage88Min(
TypeArray* ps,TypeArray* pd);」

    void            ReductImage88Min(               // 画像変換:8×8画素正規化相関用画像圧縮:最小
        TypeArray*  ps,                             // S配列
        TypeArray*  pd );                           // D配列

「Reduct」は、英単語「Reduce」で「減らす」と動詞、
英単語「reduction」で割引とか削減、ここでは、
「ReductImage」で画像を圧縮するとの意味で使用しまし
た!「ReductImage88」で
仮引数「TypeArray* ps,」と元画像の16×16サイズ
升画像を仮引数「TypeArray* pd,」と結果画像の
8×8サイズ升画像作成する処理を行います!
「Min」は、英単語「minimum」の省略形で圧縮方法が、
元画像の最小値を結果画像にする事を意味します!
元画像の4画素≪左上・右上・左下・右下≫の最小値です!
☆目的☆ピラミッド圧縮手法と言う速度向上手段です!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!

(4-9-30)関数「void ReductImage88Max(
TypeArray* ps,TypeArray* pd);」

    void            ReductImage88Max(               // 画像変換:8×8画素正規化相関用画像圧縮:最大
        TypeArray*  ps,                             // S配列
        TypeArray*  pd );                           // D配列

「Reduct」は、英単語「Reduce」で「減らす」と動詞、
英単語「reduction」で割引とか削減、ここでは、
「ReductImage」で画像を圧縮するとの意味で使用しまし
た!「ReductImage88」で
仮引数「TypeArray* ps,」と元画像の16×16サイズ
升画像を仮引数「TypeArray* pd,」と結果画像の
8×8サイズ升画像作成する処理を行います!
「Max」は、英単語「Maximum」の省略形で圧縮方法が、
元画像の最大値を結果画像にする事を意味します!
元画像の4画素≪左上・右上・左下・右下≫の最大値です!
☆目的☆ピラミッド圧縮手法と言う速度向上手段です!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!

(4-9-31)関数「void ReductImage88Two(
TypeArray* ps,TypeArray* pd);」

    void            ReductImage88Two(               // 画像変換:8×8画素正規化相関用画像圧縮:2番
        TypeArray*  ps,                             // S配列
        TypeArray*  pd );                           // D配列

「Reduct」は、英単語「Reduce」で「減らす」と動詞、
英単語「reduction」で割引とか削減、ここでは、
「ReductImage」で画像を圧縮するとの意味で使用しまし
た!「ReductImage88」で
仮引数「TypeArray* ps,」と元画像の16×16サイズ
升画像を仮引数「TypeArray* pd,」と結果画像の
8×8サイズ升画像作成する処理を行います!
「Two」は、英単語「Two」2の意味で圧縮方法が、
元画像の小さい方から2番目の値を結果画像にする事を意味
します!元画像の4画素≪左上・右上・左下・右下≫の2番
目です!
☆目的☆ピラミッド圧縮手法と言う速度向上手段です!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!

(4-9-32)関数「void ReductImage88Three(
TypeArray* ps,TypeArray* pd);」

    void            ReductImage88Three(             // 画像変換:8×8画素正規化相関用画像圧縮:3番
        TypeArray*  ps,                             // S配列
        TypeArray*  pd );                           // D配列

「Reduct」は、英単語「Reduce」で「減らす」と動詞、
英単語「reduction」で割引とか削減、ここでは、
「ReductImage」で画像を圧縮するとの意味で使用しまし
た!「ReductImage88」で
仮引数「TypeArray* ps,」と元画像の16×16サイズ
升画像を仮引数「TypeArray* pd,」と結果画像の
8×8サイズ升画像作成する処理を行います!
「Three」は、英単語「Three」3の意味で圧縮方法が、
元画像の小さい方から3番目の値を結果画像にする事を意味
します!元画像の4画素≪左上・右上・左下・右下≫の
3番目です!
☆目的☆ピラミッド圧縮手法と言う速度向上手段です!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!

(4-9-33)関数「void ReductImage88Skip(
TypeArray* ps,TypeArray* pd);」

    void            ReductImage88Skip(              // 画像変換:8×8画素正規化相関用画像圧縮:間引き
        TypeArray*  ps,                             // S配列
        TypeArray*  pd );                           // D配列

「Reduct」は、英単語「Reduce」で「減らす」と動詞、
英単語「reduction」で割引とか削減、ここでは、
「ReductImage」で画像を圧縮するとの意味で使用しまし
た!「ReductImage88」で
仮引数「TypeArray* ps,」と元画像の16×16サイズ
升画像を仮引数「TypeArray* pd,」と結果画像の
8×8サイズ升画像作成する処理を行います!
「Skip」は、スキップで間引く意味で圧縮方法が、
4画素≪左上・右上・左下・右下≫の「左上」の値を結果
画像にする事を意味します!
☆目的☆ピラミッド圧縮手法と言う速度向上手段です!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!

(4-9-34)関数「void GetHVReductImage88(
TypeArray* ps,TypeArray* pd,
int &resH,int &resV);」

    void            GetHVReductImage88(             // 8×8画素正規化相関用画像圧縮用升目個数取得
        TypeArray*  ps,                             // 元配列配列
        TypeArray*  pd,                             // 圧縮後配列配列
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「Get」は、取得するを意味します!
「HV」は、水平・垂直の幅のサイズを意味します!
「ReductImage」は、直前に説明した画像を圧縮するとの
意味で使用しました!
この関数は、結果の8×8サイズ升画像作成が何個作成
出来たかを水平(X座標)側・垂直(Y座標)側の個数を
仮引数「int &resH,int &resV」で返す関数です!
☆目的☆ピラミッド圧縮手法と言う速度向上手段関連
です!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!

(4-9-35)関数「void VectorCorrImage88(
TypeArray* pa,TypeArray* pb,
double *bufVecX,double *bufVecY,
int nOffsetH,int nOffsetV,int nStepH,int nStepV,
int &resH,int &resV);」

    void            VectorCorrImage88(              // 8×8画素画像動線ベクトル算出
        TypeArray*  pa,                             // A配列
        TypeArray*  pb,                             // B配列
        double*     bufVecX,                        // X方向結果バッファー
        double*     bufVecY,                        // Y方向結果バッファー
        int         nOffsetH,                       // 水平方向オフセット(左右ずれ)
        int         nOffsetV,                       // 垂直方向オフセット(上下ずれ)
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「Vector」は、英単語「Vector」で、カタカナ語として「
ベクター・ベクトル」で主に「点の座標とそれを結ぶ線」を
意味します!★注意★普通ベクターは「向き(角度)と長さ
」で表現しますが、この画像処理ライブラリでは、後の処置
を考えて「直交座標系(XY座標系)」の変位で表す為に
仮引数「double *bufVecX,double bufVecY,」に結果を格納
します!★注意★更に、「double 」型でX座標・
Y座標と分けて格納し、構造体「TypeXYD」を使用した方が
相応しいのでは無いかと思われる受講者様も居ると思います
が、実験的に作成した物をソノママ使用しているからです!
後で構造体「TypeXYD」を使用した方が良いとは思ったので
すが変更点(関連する関数全てを変更する必要が有る)も
多いので諦めました!
「CorrImage88」は、前に説明した
関数「void CorrImage88()」の事です!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!

(4-9-36)関数「void GetHVVectorCorrImage88(
TypeArray* pa,TypeArray* pb,
int nOffsetH,int nOffsetV,int nStepH,int nStepV,
int &resH,int &resV);」

    void            GetHVVectorCorrImage88(         // 8×8画素画像動線ベクトル算出用升目個数取得
        TypeArray*  pa,                             // A配列
        TypeArray*  pb,                             // B配列
        int         nOffsetH,                       // 水平方向オフセット(左右ずれ)
        int         nOffsetV,                       // 垂直方向オフセット(上下ずれ)
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「Get」は、取得するを意味します!
「HV」は、水平・垂直の幅のサイズを意味します!
「VectorCorrImage88」は、直前に説明した画像ベクターの
算出の意味で使用しました!関数「VectorCorrImage88()」
仮引数「double *bufVecX,double *bufVecY,」に結果を格納
する為のサイズを事前に取得する関数です!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!

(4-9-37)関数「double AverageImage88XY(
TypeArray* pa,int x,int y);」

    double          AverageImage88XY(               // 8×8画素平均:画像単位:個別座標指定
        TypeArray*  pa,                             // A配列
        int         x,                              // X座標オフセット
        int         y );                            // Y座標オフセット

「Average」は、勿論英単語で「平均値」を意味します!
「Image88」で画像のサイズが8×8を意味します!
「XY」でXY座標変位を示します!詰り、
仮引数「TypeArray* pa,」で示される画像の中で
仮引数「int x,int y」の場所の8×8サイズ画像枠の
平均値を作成し、関数の値として「double 」型で
返します!
★備考★この関数は、オーバーロード(多重定義)として
同じ関数名で複数の結果をバッファーに格納する形式の関数
も存在しますが、☆説明☆し易い為にワザワザ作成したと思
える関数です!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!

(4-9-38)関数「void AverageImage88XY(
TypeArray* pa,TypeXY *xy,BYTE *buf,
int size,int offX=0,int offY=0);」

    void            AverageImage88XY(               // 8×8画素平均:画像単位:座標指定
        TypeArray*  pa,                             // A配列
        TypeXY*     xy,                             // 探索座標列
        BYTE*       buf,                            // 結果バッファー:BYTE
        int         size,                           // バッファーサイズ
        int         offX = 0,                       // X座標オフセット
        int         offY = 0 );                     // Y座標オフセット

「Average」は、勿論英単語で「平均値」を意味します!
「Image88」で画像のサイズが8×8を意味します!
「XY」でXY座標変位を示します!詰り、
仮引数「TypeArray* pa,」で示される画像から、
仮引数「TypeXY *xy」で構造体型名「TypeXY *」で
座標変位バッファーに格納したXY座標変位を指定した
8×8サイズの画像の画素の平均値を算出して
仮引数「BYTE *buf,」座標の値としてBYTE型の結果
バッファーで結果を格納する関数です!
★備考★この関数は、オーバーロード(多重定義)として
同じ関数名で結果バッファーの型が異なる関数も存在しま
す!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!

(4-9-44)関数「void AverageImage88XY(
TypeArray* pa,TypeXY *xy,double *buf,
int size,int offX=0,int offY=0);」

    void            AverageImage88XY(               // 8×8画素平均:画像単位:座標指定
        TypeArray*  pa,                             // A配列
        TypeXY*     xy,                             // 探索座標列
        double*     buf,                            // 結果バッファー:倍精度
        int         size,                           // バッファーサイズ
        int         offX = 0,                       // X座標オフセット
        int         offY = 0 );                     // Y座標オフセット

「Average」は、勿論英単語で「平均値」を意味します!
「Image88」で画像のサイズが8×8を意味します!
「XY」でXY座標変位を示します!詰り、
仮引数「TypeArray* pa,」で示される画像から、
仮引数「TypeXY *xy」で構造体型名「TypeXY *」で
座標変位バッファーに格納したXY座標変位を指定した
8×8サイズの画像の画素の平均値を算出して
仮引数「double *buf,」座標の値としてdouble 型の結果
バッファーで結果を格納する関数です!
★備考★この関数は、オーバーロード(多重定義)として
同じ関数名で結果バッファーの型が異なる関数も存在しま
す!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!

(4-9-40)関数「double CorrImage88XY(
TypeArray* pa,TypeArray* pb,int x,int y);」

    double          CorrImage88XY(                  // 8×8画素正規化相関:画像単位:個別座標指定
        TypeArray*  pa,                             // A配列
        TypeArray*  pb,                             // B配列
        int         x,                              // X座標オフセット
        int         y );                            // Y座標オフセット

「Corr」は、相関を意味します!
「Image」は、勿論、画像です!
「88」は、8×8=縦(X座標方向:水平方向)が8画素×
横(Y座標方向:垂直方向)が8画素と言う基本的な相関を
計算する画像サイズを意味します!
「XY」でXY座標変位を示します!詰り、
仮引数「TypeArray* pa,TypeArray* pb,」で
示される画像相互の相関値を算出して
仮引数「int x,int y」で座標変位を指定した8×8サイズ
の画像の相関値を算出してdouble 型で関数値として返す
関数です!
★備考★この関数は、オーバーロード(多重定義)として
同じ関数名で複数の結果をバッファーに格納する形式の関数
も存在しますが、☆説明☆し易い為にワザワザ作成したと思
える関数です!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!

(4-9-41)関数「void CorrImage88XY(
TypeArray* pa,TypeArray* pb,
TypeXY *xy,double *buf,
int size,int offX=0,int offY=0);」

    void            CorrImage88XY(                  // 8×8画素正規化相関:画像単位:座標指定
        TypeArray*  pa,                             // A配列
        TypeArray*  pb,                             // B配列
        TypeXY*     xy,                             // 探索座標列
        double*     buf,                            // 結果バッファー
        int         size,                           // バッファーサイズ
        int         offX = 0,                       // X座標オフセット
        int         offY = 0 );                     // Y座標オフセット

「Corr」は、相関を意味します!
「Image」は、勿論、画像です!
「88」は、8×8=縦(X座標方向:水平方向)が8画素×
横(Y座標方向:垂直方向)が8画素と言う基本的な相関を
計算する画像サイズを意味します!
「XY」でXY座標変位を示します!詰り、
仮引数「TypeArray* pa,TypeArray* pb,」で示される画像
の中で
仮引数「TypeXY *xy」で構造体型名「TypeXY *」で
座標変位バッファーに格納したXY座標変位を指定した
8×8サイズの画像の画素の相関値を算出して
仮引数「double *buf,」座標の値としてdouble 型の結果
バッファーで結果を格納する関数です!
★備考★この関数は、オーバーロード(多重定義)として
同じ関数名で一か所の値を返す関数も存在します!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!

(4-9-42)関数「double CorrImage88MyselfXY(
TypeArray* pa,int x,int y);」

    double          CorrImage88MyselfXY(            // 8×8画素自己相関:画像単位:個別座標指定
        TypeArray*  pa,                             // A配列
        int         x,                              // X座標オフセット
        int         y );                            // Y座標オフセット

「CorrImage88」は、関数「void CorrImage88()」で説明し
た通りです!
「Myself」勿論、英単語「Myself」自分自身を意味します!
詰り、「自己相関」を算出する関数です!
「XY」でXY座標変位を示します!詰り、
仮引数「TypeArray* pa,」で示される画像から、
仮引数「int x,int y」で座標変位を指定した8×8サイズ
の画像の画素の自己相関を算出してdouble 型で関数値と
して返す関数です!
★備考★この関数は、オーバーロード(多重定義)として
同じ関数名で複数の結果をバッファーに格納する形式の関数
も存在しますが、☆説明☆し易い為にワザワザ作成したと思
える関数です!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!

(4-9-43)関数「void CorrImage88MyselfXY(
TypeArray* pa,TypeXY *xy,double *buf,
int size,int offX=0,int offY=0);」

    void            CorrImage88MyselfXY(            // 8×8画素自己相関:画像単位:座標指定
        TypeArray*  pa,                             // A配列
        TypeXY*     xy,                             // 探索座標列
        double*     buf,                            // 結果バッファー
        int         size,                           // バッファーサイズ
        int         offX = 0,                       // X座標オフセット
        int         offY = 0 );                     // Y座標オフセット

「CorrImage88」は、関数「void CorrImage88()」で説明し
た通りです!
「Myself」勿論、英単語「Myself」自分自身を意味します!
詰り、「自己相関」を算出する関数です!
「XY」でXY座標変位を示します!詰り、
仮引数「TypeArray* pa,」で示される画像から、
仮引数「TypeXY *xy」で構造体型名「TypeXY *」で
座標変位バッファーに格納したXY座標変位を指定した
8×8サイズの画像の画素の相関値を算出して
仮引数「double *buf,」座標の値としてdouble 型の結果
バッファーで結果を格納する関数です!
★備考★この関数は、オーバーロード(多重定義)として
同じ関数名で仮引数「BYTE *bufAve,」を格納するとか、
格納する型が異なる関数も同じ名前で引数の違いだけで用意
しています。☆注意☆平均値有り無しを名前で判別するのは
多重定義記述を知ってから面倒くさいと考えたから?!多重
定義を使用しましたので読解する時・使用する時には細かい
引数迄、注意して下さい!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!

(4-9-44)関数「void CorrImage88MyselfXY(
TypeArray* pa,TypeXY *xy,double *buf,
BYTE *bufAve,
int size,int offX=0,int offY=0);」

    void            CorrImage88MyselfXY(            // 8×8画素自己相関+平均:画像単位:座標指定
        TypeArray*  pa,                             // A配列
        TypeXY*     xy,                             // 探索座標列
        double*     buf,                            // 結果バッファー
        BYTE*       bufAve,                         // 結果バッファー:平均値
        int         size,                           // バッファーサイズ
        int         offX = 0,                       // X座標オフセット
        int         offY = 0 );                     // Y座標オフセット

「CorrImage88」は、関数「void CorrImage88()」で説明し
た通りです!
「Myself」勿論、英単語「Myself」自分自身を意味します!
詰り、「自己相関」を算出する関数です!
「XY」でXY座標変位を示します!詰り、
仮引数「TypeArray* pa,」で示される画像から、
仮引数「TypeXY *xy」で構造体型名「TypeXY *」で
座標変位バッファーに格納したXY座標変位を指定した
8×8サイズの画像の画素の相関値を算出して
仮引数「double *buf,」座標の値としてdouble 型の結果
バッファーで結果を格納する関数です!そして特徴として
仮引数「BYTE *bufAve,」に自己相関算出時に算出される
平均値を副産物として格納出来る関数です!
★備考★この関数は、オーバーロード(多重定義)として
同じ関数名で仮引数「BYTE *bufAve,」を格納しないとか、
格納する型が異なる関数も同じ名前で引数の違いだけで用意
しています。☆注意☆平均値有り無しを名前で判別するのは
多重定義記述を知ってから面倒くさいと考えたから?!多重
定義を使用しましたので読解する時・使用する時には細かい
引数迄、注意して下さい!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!

(4-9-45)関数「void CorrImage88MyselfXY(
TypeArray* pa,TypeXY *xy,int *buf,
int size,int offX=0,int offY=0);」

    void            CorrImage88MyselfXY(            // 8×8画素自己相関:画像単位:座標指定
        TypeArray*  pa,                             // A配列
        TypeXY*     xy,                             // 探索座標列
        int*        buf,                            // 結果バッファー:整数
        int         size,                           // バッファーサイズ
        int         offX = 0,                       // X座標オフセット
        int         offY = 0 );                     // Y座標オフセット

「CorrImage88」は、関数「void CorrImage88()」で説明し
た通りです!
「Myself」勿論、英単語「Myself」自分自身を意味します!
詰り、「自己相関」を算出する関数です!
「XY」でXY座標変位を示します!詰り、
仮引数「TypeArray* pa,」で示される画像から、
仮引数「TypeXY *xy」で構造体型名「TypeXY *」で
座標変位バッファーに格納したXY座標変位を指定した
8×8サイズの画像の画素の相関値を算出して
仮引数「int *buf,」座標の値としてint型の結果
バッファーで結果を格納する関数です!
★備考★この関数は、オーバーロード(多重定義)として
同じ関数名で仮引数「BYTE *bufAve,」を格納するとか、
格納する型が異なる関数も同じ名前で引数の違いだけで用意
しています。
☆注意☆平均値有り無しを名前で判別するのは多重定義記述
を知ってから面倒くさいと考えたから?!多重定義を使用
しましたので読解する時・使用する時には細かい引数迄、
注意して下さい!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!

(4-9-46)関数「void CorrImage88MyselfXY(
TypeArray* pa,TypeXY *xy,int *buf,
BYTE *bufAve,int size,int offX=0,int offY=0);」

    void            CorrImage88MyselfXY(            // 8×8画素自己相関+平均:画像単位:座標指定
        TypeArray*  pa,                             // A配列
        TypeXY*     xy,                             // 探索座標列
        int*        buf,                            // 結果バッファー:整数
        BYTE*       bufAve,                         // 結果バッファー:平均値
        int         size,                           // バッファーサイズ
        int         offX = 0,                       // X座標オフセット
        int         offY = 0 );                     // Y座標オフセット

「CorrImage88」は、関数「void CorrImage88()」で説明し
た通りです!
「Myself」勿論、英単語「Myself」自分自身を意味します!
詰り、「自己相関」を算出する関数です!
「XY」でXY座標変位を示します!詰り、
仮引数「TypeArray* pa,」で示される画像から、
仮引数「TypeXY *xy」で構造体型名「TypeXY *」で
座標変位バッファーに格納したXY座標変位を指定した
8×8サイズの画像の画素の相関値を算出して
仮引数「int *buf,」座標の値としてint型の結果
バッファーで結果を格納する関数です!そして特徴として
仮引数「BYTE *bufAve,」に自己相関算出時に算出される
平均値を副産物として格納出来る関数です!
★備考★この関数は、オーバーロード(多重定義)として
同じ関数名で仮引数「BYTE *bufAve,」を格納しないとか、
格納する型が異なる関数も同じ名前で引数の違いだけで用意
しています。☆注意☆平均値有り無しを名前で判別するのは
多重定義記述を知ってから面倒くさいと考えたから?!多重
定義を使用しましたので読解する時・使用する時には細かい
引数迄、注意して下さい!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!

(4-9-47)関数「int CorrImage88MyselfExtend(
TypeArray* image,TypeXY *bufXY,double *buf,
int maxN,int nStepH,int nStepV,
double tA,double tB);」

    int             CorrImage88MyselfExtend(        // 8×8画素自己相関:拡張
        TypeArray*  image,                          // 画像
        TypeXY*     bufXY,                          // 結果座標バッファー
        double*     buf,                            // 結果バッファー
        int         maxN,                           // 最大結果数
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        double      tA,                             // 最小概要しきい値
        double      tB );                           // 最大概要しきい値

「CorrImage88」は、関数「void CorrImage88()」で説明し
た通りです!
「Myself」勿論、英単語「Myself」自分自身を意味します!
「Extend」は、勿論、英単語「Extend」拡張を意味します!
詰り、「自己相関」を算出する関数の拡張です!
詰り、
仮引数「TypeArray* pa,」で示される画像から、
仮引数「TypeXY *xy」で構造体型名「TypeXY *」で
座標変位バッファーに格納したXY座標変位を指定した
8×8サイズの画像の画素の相関値を算出して
仮引数「double *buf,」座標の値としてdouble 型の結果
バッファーで結果を格納する関数です!そして特徴として
仮引数「double tA,double tB」に概要の相関算出される
閾値の範囲内で詳細に算出して結果を格納する関数です!
★詳細★は、後で説明:【ファイル「CopyClear400.cpp」が
対象】します!

(4-9-48)関数「void CorrImageNM(
TypeArray* pa,TypeArray* pb,double *buf,
int n,int m,int nStepH,int nStepV,
int &&resH,int &&resV);」

    void            CorrImageNM(                    // n×m画素正規化相関:画像単位
        TypeArray*  pa,                             // A配列
        TypeArray*  pb,                             // B配列
        double*     buf,                            // 結果バッファー
        int         n,                              // n×mのn
        int         m,                              // n×mのm
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「Corr」は、相関を意味します!
「Image」は、勿論、画像です!
「NM」は、N×M=縦(X座標方向:水平方向)が
N画素×横(Y座標方向:垂直方向)がM画素と言う
今までは、基本的なサイズ(4×4・8×8)相関を計算
する関数でししたが、N×Mと任意サイズの升目画像
サイズを扱います!
仮引数「int n,int m,」でN×Mを指定します!
相関値を算出し比較する画像は、
仮引数「TypeArray* pa,」と仮引数「TypeArray* pb,」
で示される画素単位「w=1」画像専用です!★注意★専用に
出来て居るので画素単位「w≠1」の場合は想定外の動きと成
る事に気を付けて下さい!但し、誤解の無い様に仮引数の
画像サイズは、N×Mと勘違いシナイ様に、モット大きな
画像をN×M升を仮引数「int nStepH,int nStepV,」と
ステップ(間隔)を開けて比較する事で画像全体を比較≪
相関値を仮引数「double *buf,」に算出後格納≫する関数
です!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!

(4-9-49)関数「void GetHVCorrImageNM(
TypeArray* pa,TypeArray* pb,
int n,int m,int nStepH,int nStepV,
int &resH,int &resV);」

    void            GetHVCorrImageNM(               // n×m画素正規化相関用升目個数取得
        TypeArray*  pa,                             // A配列
        TypeArray*  pb,                             // B配列
        int         n,                              // n×mのn
        int         m,                              // n×mのm
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「Get」は、取得するを意味します!
「HV」は、水平・垂直の幅のサイズを意味します!
「CorrImageNM」は、直前に説明した
関数「CorrImageNM()」の事です!
この「GetHVCorrImageNM()」は、補助的に
関数「void CorrImageNM()」を実行する前に
仮引数「int &resH,int &resV」に「HV」と水平・垂直の
幅のサイズをこの関数で取得して関数
「void CorrImageNM()」の
仮引数「double *buf,」のバッファサイズを
取得する為のサイズとします!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!

(4-9-50)関数「void AverageImageNM(
TypeArray* pa,BYTE *buf,
int n,int m,int nStepH,int nStepV,
int &resH,int &resV);」

    void            AverageImageNM(                 // n×m画素平均:画像単位
        TypeArray*  pa,                             // A配列
        BYTE*       buf,                            // 結果バッファー:BYTE
        int         n,                              // n×mのn
        int         m,                              // n×mのm
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「Average」は、勿論英単語で「平均値」を意味します!
「ImageNM」で画像のサイズがN×Mを意味します!
詰り、関数「void CorrImageNM()」を計算する元に成る平均
値の作成用の平均値が仮引数「BYTE *buf,」に算出して
格納する関数です!勿論、バッファの型が「double *型」の
関数とのオーバーロード(多重定義)関数です!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!

(4-9-51)関数「void AverageImageNM(
TypeArray* pa,double *buf,
int n,int m,int nStepH,int nStepV,
int &resH,int &resV);」

    void            AverageImageNM(                 // n×m画素平均:画像単位
        TypeArray*  pa,                             // A配列
        double*     buf,                            // 結果バッファー:倍精度
        int         n,                              // n×mのn
        int         m,                              // n×mのm
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「Average」は、勿論英単語で「平均値」を意味します!
「ImageNM」で画像のサイズがN×Mを意味します!
詰り、関数「void CorrImageNM()」を計算する元に成る平均
値の作成用の平均値が仮引数「double *buf,」に算出して
格納する関数です!勿論、バッファの型が「BYTE *型」の
関数とのオーバーロード(多重定義)関数です!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!

(4-9-52)関数「void CorrImageNMMyself(
TypeArray* pa,int *buf,
int n,int m,
int nStepH,int nStepV,
int &resH,int &resV);」

    void            CorrImageNMMyself(              // n×m画素自己相関:画像単位
        TypeArray*  pa,                             // A配列
        int*        buf,                            // 結果バッファー
        int         n,                              // n×mのn
        int         m,                              // n×mのm
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「CorrImageNM」は、関数「void CorrImageNM()」で説明し
た通りです!
「Myself」勿論、英単語「Myself」自分自身を意味します!
詰り、「自己相関」を算出する関数です!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!

(4-9-53)関数「void GetHVCorrImageNMMyself(
TypeArray* pa,
int n,int m,int nStepH,int nStepV,
int &resH,int &resV);」

    void            GetHVCorrImageNMMyself(         // n×m画素自己相関用升目個数取得
        TypeArray*  pa,                             // A配列
        int         n,                              // n×mのn
        int         m,                              // n×mのm
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「Get」は、取得するを意味します!
「HV」は、水平・垂直の幅のサイズを意味します!
「CorrImageNMMyself」は、直前に説明した
関数「CorrImageNMMyself()」の事です!
この「GetHVCorrImageNMMyself()」は、補助的に
関数「void CorrImageNMMyself()」を実行する前に
仮引数「int &resH,int &resV」に「HV」と水平・垂直の
幅のサイズをこの関数で取得して関数
「void CorrImageNMMyself()」の
仮引数「double *buf,」のバッファサイズを
取得する為のサイズとします!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!

(4-9-54)関数「void SearchCorrImageNM(
TypeArray* pa,TypeArray* pb,double *buf,
int n,int m,int nStepH,int nStepV,
int &resH,int &resV);」

    void            SearchCorrImageNM(              // n×m画素画像サーチ
        TypeArray*  pa,                             // A配列:サーチ対象
        TypeArray*  pb,                             // B配列:サーチ範囲
        double*     buf,                            // 結果バッファー
        int         n,                              // n×mのn
        int         m,                              // n×mのm
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「Search」は、英単語「Search」で意味「探す」です!
「CorrImageNM」は、前に説明した
関数「void CorrImageNM()」の事です!
詰り、仮引数「TypeArray* pa,」で示したN×Mサイズの
画像をテンプレートとして仮引数「TypeArray* pb,」で
現わされる大きな(広い)画像から一致するN×Mサイズの
画像をサーチする≪仮引数「double *buf,」に一致率を格納
する事で何処が一致して居るか分かる様に成る≫を行う関数
です!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!

(4-9-55)関数「void GetHVSearchCorrImageNM(
TypeArray* pa,TypeArray* pb,
int n,int m,int nStepH,int nStepV,
int &resH,int &resV);」

    void            GetHVSearchCorrImageNM(         // n×m画素画像サーチ用升目個数取得
        TypeArray*  pa,                             // A配列:サーチ対象
        TypeArray*  pb,                             // B配列:サーチ範囲
        int         n,                              // n×mのn
        int         m,                              // n×mのm
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「Get」は、取得するを意味します!
「HV」は、水平・垂直の幅のサイズを意味します!
「SearchCorrImageNM」は、直前に説明した
関数「void SearchCorrImageNM()」の事です!
この「GetHVSearchCorrImageNM()」は、補助的に
関数「void SearchCorrImageNM()」を実行する前に
仮引数「int &resH,int &resV」に「HV」と水平・垂直の
幅のサイズをこの関数で取得して関数
「void SearchCorrImageNM()」の
仮引数「double *buf,」のバッファサイズを
取得する為のサイズとします!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!

(4-9-56)関数「int SearchCorrImageSort(
TypeArray* pa,TypeArray* pb,TypeCorr*buf,
int size,int n,int m,int nStepH,int nStepV,
double t,double rate=0.0,
double minAv=0.0,double maxAv=0.0);」

    int             SearchCorrImageSort(            // n×m画素画像サーチ&データ整理
        TypeArray*  pa,                             // A配列:サーチ対象
        TypeArray*  pb,                             // B配列:サーチ範囲
        TypeCorr*   buf,                            // 結果バッファー(相関値+座標)
        int         size,                           // 結果サイズ
        int         n,                              // n×mのn
        int         m,                              // n×mのm
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        double      t,                              // 有効相関値
        double      rate=0.0,                       // 0.0:無、他:正/反転割合
        double      minAv=0.0,                      // 0.0:無、他:平均範囲最小割合
        double      maxAv=0.0 );                    // 0.0:無、他:平均範囲最大割合

「SearchCorrImage」は、前に説明した
関数「void SearchCorrImageNM()」の事です!
「Sort」は、ソーティング詰り、データを整理する事で
この関数では、算出した相関値で
仮引数「TypeCorr*buf,」に一旦、格納されたデータを
降順(大きい方から小さい方へ)並び変えとかで有効な
データを仮引数「double t,double rate,double minAv,
double maxAv=」で示される条件で選択し条件に合致した
データ個数を関数の返値として返す関数です!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!

(4-9-57)関数「int SearchCorrImageXYSort(
TypeArray* pa,TypeArray* pb,TypeCorr*buf,
int size,int n,int m,int nStepH,int nStepV,
double t,double rate=0.0,
double minAv=0.0,double maxAv=0.0);」

    int             SearchCorrImageXYSort(          // n×m画素画像サーチ&データ整理:座標指定
        TypeArray*  pa,                             // A配列:サーチ対象
        TypeArray*  pb,                             // B配列:サーチ範囲
        TypeCorr*   buf,                            // 結果バッファー(相関値+座標)
        int         size,                           // 結果サイズ
        int         n,                              // n×mのn
        int         m,                              // n×mのm
        double      t,                              // 有効相関値
        double      rate=0.0,                       // 0.0:無、他:正/反転割合
        double      minAv=0.0,                      // 0.0:無、他:平均範囲最小割合
        double      maxAv=0.0 );                    // 0.0:無、他:平均範囲最大割合

「SearchCorrImage」は、前に説明した
関数「void SearchCorrImageNM()」の事です!
「Sort」は、ソーティング詰り、データを整理する事で
この関数では、算出した座標値で
仮引数「TypeCorr*buf,」に一旦、格納されたデータを
降順(大きい方から小さい方へ)並び変えとかで有効な
データを仮引数「double t,double rate,double minAv,
double maxAv=」で示される条件で選択し条件に合致した
データ個数を関数の返値として返す関数です!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!

(4-9-58)関数「void ReductImage(
TypeArray* ps,TypeArray* pd,int mode);」

    void            ReductImage(                    // 画像変換:画像圧縮
        TypeArray*  ps,                             // S配列
        TypeArray*  pd,                             // D配列
        int         mode );                         // モード 0:間引,1:平均,2:最大,3:最小,4:2番,5:3番

「Reduct」は、英単語「Reduce」で「減らす」と動詞、
英単語「reduction」で割引とか削減、ここでは、
「ReductImage」で画像を圧縮するとの意味で使用しまし
た!この関数は、総称で機能を
仮引数「int mode」でモードとして
モード「0:間引,1:平均値,2:最大値,3:最小値,
4:2番目の値,5:3番目の値」と成ります!
そのモードを各サブルーチンに割り振って実行させます!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!

(4-9-59)関数「void ReductImageNMAve(
TypeArray* ps,TypeArray* pd,int n,int m);」

    void            ReductImageNMAve(               // 画像変換:n×m画素正規化相関用画像圧縮:平均
        TypeArray*  ps,                             // S配列
        TypeArray*  pd,                             // D配列
        int         n,                              // n×mのn
        int         m );                            // n×mのm

「Reduct」は、英単語「Reduce」で「減らす」と動詞、
英単語「reduction」で割引とか削減、ここでは、
「ReductImage」で画像を圧縮するとの意味で使用しまし
た!「ReductImageNM」で
仮引数「TypeArray* ps,」と元画像の(N×2)×
(M×2)サイズ升画像を
仮引数「TypeArray* pd,」と結果画像のN×Mサイズ升画像
として作成する処理を行います!
仮引数「int n,int m,」でN×Mを指定します!
「Ave」は、英単語「Average」の省略形で圧縮方法が、
元画像の平均値を結果画像にする事を意味します!
元画像の4画素≪左上・右上・左下・右下≫の平均値です!
☆目的☆ピラミッド圧縮手法と言う速度向上手段です!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!

(4-9-60)関数「void ReductImageNMMin(
TypeArray* ps,TypeArray* pd,int n,int m);」

    void            ReductImageNMMin(               // 画像変換:n×m画素正規化相関用画像圧縮:最小
        TypeArray*  ps,                             // S配列
        TypeArray*  pd,                             // D配列
        int         n,                              // n×mのn
        int         m );                            // n×mのm

「Reduct」は、英単語「Reduce」で「減らす」と動詞、
英単語「reduction」で割引とか削減、ここでは、
「ReductImage」で画像を圧縮するとの意味で使用しまし
た!「ReductImageNM」で
仮引数「TypeArray* ps,」と元画像の(N×2)×
(M×2)サイズ升画像を
仮引数「TypeArray* pd,」と結果画像のN×Mサイズ升画像
として作成する処理を行います!
仮引数「int n,int m,」でN×Mを指定します!
「Min」は、英単語「minimum」の省略形で圧縮方法が、
元画像の最小値を結果画像にする事を意味します!
元画像の4画素≪左上・右上・左下・右下≫の最小値です!
☆目的☆ピラミッド圧縮手法と言う速度向上手段です!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!

(4-9-61)関数「void ReductImageNMMax(
TypeArray* ps,TypeArray* pd,int n,int m);」

    void            ReductImageNMMax(               // 画像変換:n×m画素正規化相関用画像圧縮:最大
        TypeArray*  ps,                             // S配列
        TypeArray*  pd,                             // D配列
        int         n,                              // n×mのn
        int         m );                            // n×mのm

「Reduct」は、英単語「Reduce」で「減らす」と動詞、
英単語「reduction」で割引とか削減、ここでは、
「ReductImage」で画像を圧縮するとの意味で使用しまし
た!「ReductImageNM」で
仮引数「TypeArray* ps,」と元画像の(N×2)×
(M×2)サイズ升画像を
仮引数「TypeArray* pd,」と結果画像のN×Mサイズ升画像
として作成する処理を行います!
仮引数「int n,int m,」でN×Mを指定します!
「Max」は、英単語「Maximum」の省略形で圧縮方法が、
元画像の最大値を結果画像にする事を意味します!
元画像の4画素≪左上・右上・左下・右下≫の最大値です!
☆目的☆ピラミッド圧縮手法と言う速度向上手段です!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!

(4-9-62)関数「void ReductImageNMTwo(
TypeArray* ps,TypeArray* pd,int n,int m);」

    void            ReductImageNMTwo(               // 画像変換:n×m画素正規化相関用画像圧縮:2番
        TypeArray*  ps,                             // S配列
        TypeArray*  pd,                             // D配列
        int         n,                              // n×mのn
        int         m );                            // n×mのm

「Reduct」は、英単語「Reduce」で「減らす」と動詞、
英単語「reduction」で割引とか削減、ここでは、
「ReductImage」で画像を圧縮するとの意味で使用しまし
た!「ReductImageNM」で
仮引数「TypeArray* ps,」と元画像の(N×2)×
(M×2)サイズ升画像を
仮引数「TypeArray* pd,」と結果画像のN×Mサイズ升画像
として作成する処理を行います!
仮引数「int n,int m,」でN×Mを指定します!
「Two」は、英単語「Two」2の意味で圧縮方法が、
元画像の小さい方から2番目の値を結果画像にする事を意味
します!元画像の4画素≪左上・右上・左下・右下≫の2番
目です!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!

(4-9-63)関数「void ReductImageNMThree(
TypeArray* ps,TypeArray* pd,int n,int m);」

    void            ReductImageNMThree(             // 画像変換:n×m画素正規化相関用画像圧縮:3番
        TypeArray*  ps,                             // S配列
        TypeArray*  pd,                             // D配列
        int         n,                              // n×mのn
        int         m );                            // n×mのm

「Reduct」は、英単語「Reduce」で「減らす」と動詞、
英単語「reduction」で割引とか削減、ここでは、
「ReductImage」で画像を圧縮するとの意味で使用しまし
た!「ReductImageNM」で
仮引数「TypeArray* ps,」と元画像の(N×2)×
(M×2)サイズ升画像を
仮引数「TypeArray* pd,」と結果画像のN×Mサイズ升画像
として作成する処理を行います!
仮引数「int n,int m,」でN×Mを指定します!
「Three」は、英単語「Three」3の意味で圧縮方法が、
元画像の小さい方から3番目の値を結果画像にする事を意味
します!元画像の4画素≪左上・右上・左下・右下≫の3番
目です!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!

(4-9-64)関数「void ReductImageNMSkip(
TypeArray* ps,TypeArray* pd,int n,int m);」

    void            ReductImageNMSkip(              // 画像変換:n×m画素正規化相関用画像圧縮:間引き
        TypeArray*  ps,                             // S配列
        TypeArray*  pd,                             // D配列
        int         n,                              // n×mのn
        int         m );                            // n×mのm

「Reduct」は、英単語「Reduce」で「減らす」と動詞、
英単語「reduction」で割引とか削減、ここでは、
「ReductImage」で画像を圧縮するとの意味で使用しまし
た!「ReductImageNM」で
仮引数「TypeArray* ps,」と元画像の(N×2)×
(M×2)サイズ升画像を
仮引数「TypeArray* pd,」と結果画像のN×Mサイズ升画像
として作成する処理を行います!
仮引数「int n,int m,」でN×Mを指定します!
「Skip」は、スキップで間引く意味で圧縮方法が、
4画素≪左上・右上・左下・右下≫の「左上」の値を結果
画像にする事を意味します!
☆目的☆ピラミッド圧縮手法と言う速度向上手段です!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!

(4-9-65)関数「void GetHVReductImageNM(
TypeArray* ps,TypeArray* pd,
int n,int m,int &resH,int &resV);」

    void            GetHVReductImageNM(             // n×m画素正規化相関用画像圧縮用升目個数取得
        TypeArray*  ps,                             // 元配列配列
        TypeArray*  pd,                             // 圧縮後配列配列
        int         n,                              // n×mのn
        int         m,                              // n×mのm
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「Get」は、取得するを意味します!
「HV」は、水平・垂直の幅のサイズを意味します!
「ReductImage」は、直前に説明した画像を圧縮するとの
意味で使用しました!
この関数は、結果のN×Mサイズ升画像作成が何個作成
出来たかを水平(X座標)側・垂直(Y座標)側の個数を
仮引数「int &resH,int &resV」で返す関数です!
仮引数「int n,int m,」でN×Mを指定します!
☆目的☆ピラミッド圧縮手法と言う速度向上手段関連
です!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!

(4-9-66)関数「void VectorCorrImageNM(
TypeArray* pa,TypeArray* pb,
double *bufVecX,double *bufVecY,
int n,int m,
int nOffsetH,int nOffsetV,int nStepH,int nStepV,
int &resH,int &resV);」

    void            VectorCorrImageNM(              // n×m画素画像動線ベクトル算出
        TypeArray*  pa,                             // A配列
        TypeArray*  pb,                             // B配列
        double*     bufVecX,                        // X方向結果バッファー
        double*     bufVecY,                        // Y方向結果バッファー
        int         n,                              // n×mのn
        int         m,                              // n×mのm
        int         nOffsetH,                       // 水平方向オフセット(左右ずれ)
        int         nOffsetV,                       // 垂直方向オフセット(上下ずれ)
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「Vector」は、英単語「Vector」で、カタカナ語として「
ベクター・ベクトル」で主に「点の座標とそれを結ぶ線」を
意味します!★注意★普通ベクターは「向き(角度)と長さ
」で表現しますが、この画像処理ライブラリでは、後の処置
を考えて「直交座標系(XY座標系)」の変位で表す為に
仮引数「double *bufVecX,double bufVecY,」に結果を格納
します!
★注意★更に、「double 」型でX座標・Y座標と分けて
格納し、構造体「TypeXY D」を使用した方が相応しいので
は無いかと思われる受講者様も居ると思いますが、実験的に
作成した物をソノママ使用しているからです!
後で構造体「TypeXY D」を使用した方が良いとは思ったの
ですが変更点(関連する関数全てを変更する必要が有る)も
多いので諦めました!
「CorrImageNM」は、前に説明した
関数「void CorrImageNM()」の事です!
仮引数「int n,int m,」でN×Mを指定します!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!

(4-9-67)関数「void GetHVVectorCorrImageNM(
TypeArray* pa,TypeArray* pb,
int n,int m,int nOffsetH,int nOffsetV,
int nStepH,int nStepV,
int &resH,int &resV);」

    void            GetHVVectorCorrImageNM(         // n×m画素画像動線ベクトル算出用升目個数取得
        TypeArray*  pa,                             // A配列
        TypeArray*  pb,                             // B配列
        int         n,                              // n×mのn
        int         m,                              // n×mのm
        int         nOffsetH,                       // 水平方向オフセット(左右ずれ)
        int         nOffsetV,                       // 垂直方向オフセット(上下ずれ)
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「Get」は、取得するを意味します!
「HV」は、水平・垂直の幅のサイズを意味します!
「VectorCorrImageNM」は、直前に説明した画像ベクターの
算出の意味で使用しました!関数「VectorCorrImageNM()」
仮引数「double *bufVecX,double *bufVecY,」に結果を格納
する為のサイズを事前に取得する関数です!
仮引数「int n,int m,」でN×Mを指定します!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!

(4-9-68)関数「double AverageImageNMXY(
TypeArray* pa,int n,int m,int x,int y);」

    double          AverageImageNMXY(               // n×m画素平均:画像単位:個別座標指定
        TypeArray*  pa,                             // A配列
        int         n,                              // n×mのn
        int         m,                              // n×mのm
        int         x,                              // X座標オフセット
        int         y );                            // Y座標オフセット

「Average」は、勿論英単語で「平均値」を意味します!
「ImageNM」で画像のサイズがN×Mを意味します!
「XY」でXY座標変位を示します!詰り、
仮引数「TypeArray* pa,」で示される画像の中で
仮引数「int x,int y」の場所のN×Mサイズ画像枠の
平均値を作成し、関数の値として「double 」型で
返します!
仮引数「int n,int m,」でN×Mを指定します!
★備考★この関数は、オーバーロード(多重定義)として
同じ関数名で複数の結果をバッファーに格納する形式の関数
も存在しますが、☆説明☆し易い為にワザワザ作成したと思
える関数です!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!

(4-9-69)関数「void AverageImageNMXY(
TypeArray* pa,TypeXY *xy,BYTE *buf,
int n,int m,int size,int offX=0,int offY=0);」

    void            AverageImageNMXY(               // n×m画素平均:画像単位:座標指定
        TypeArray*  pa,                             // A配列
        TypeXY*     xy,                             // 探索座標列
        BYTE*       buf,                            // 結果バッファー:BYTE
        int         n,                              // n×mのn
        int         m,                              // n×mのm
        int         size,                           // バッファーサイズ
        int         offX = 0,                       // X座標オフセット
        int         offY = 0 );                     // Y座標オフセット

「Average」は、勿論英単語で「平均値」を意味します!
「ImageNM」で画像のサイズがN×Mを意味します!
「XY」でXY座標変位を示します!詰り、
仮引数「TypeArray* pa,」で示される画像から、
仮引数「TypeXY *xy」で構造体型名「TypeXY *」で
座標変位バッファーに格納したXY座標変位を指定した
N×Mサイズの画像の画素の平均値を算出して
仮引数「BYTE *buf,」座標の値としてBYTE型の結果
バッファーで結果を格納する関数です!
仮引数「int n,int m,」でN×Mを指定します!
★備考★この関数は、オーバーロード(多重定義)として
同じ関数名で結果バッファーの型が異なる関数も存在しま
す!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!

(4-9-70)関数「void AverageImageNMXY(
TypeArray* pa,TypeXY *xy,double *buf,
int n,int m,int size,int offX=0,int offY=0);」

    void            AverageImageNMXY(               // n×m画素平均:画像単位:座標指定
        TypeArray*  pa,                             // A配列
        TypeXY*     xy,                             // 探索座標列
        double*     buf,                            // 結果バッファー:倍精度
        int         n,                              // n×mのn
        int         m,                              // n×mのm
        int         size,                           // バッファーサイズ
        int         offX = 0,                       // X座標オフセット
        int         offY = 0 );                     // Y座標オフセット

「Average」は、勿論英単語で「平均値」を意味します!
「ImageNM」で画像のサイズがN×Mを意味します!
「XY」でXY座標変位を示します!詰り、
仮引数「TypeArray* pa,」で示される画像から、
仮引数「TypeXY *xy」で構造体型名「TypeXY *」で
座標変位バッファーに格納したXY座標変位を指定した
N×Mサイズの画像の画素の平均値を算出して
仮引数「double *buf,」座標の値としてdouble 型の結果
バッファーで結果を格納する関数です!
仮引数「int n,int m,」でN×Mを指定します!
★備考★この関数は、オーバーロード(多重定義)として
同じ関数名で結果バッファーの型が異なる関数も存在しま
す!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!

(4-9-71)関数「double CorrImageNMXY(
TypeArray* pa,TypeArray* pb,int n,int m,
int x,int y);」

    double          CorrImageNMXY(                  // n×m画素正規化相関:画像単位:個別座標指定
        TypeArray*  pa,                             // A配列
        TypeArray*  pb,                             // B配列
        int         n,                              // n×mのn
        int         m,                              // n×mのm
        int         x,                              // X座標オフセット
        int         y );                            // Y座標オフセット

「Corr」は、相関を意味します!
「Image」は、勿論、画像です!
「NM」は、N×M=縦(X座標方向:水平方向)が
N画素×横(Y座標方向:垂直方向)がM画素と言う相関を
計算する画像サイズを意味します!
仮引数「int n,int m,」でN×Mを指定します!
「XY」でXY座標変位を示します!詰り、
仮引数「TypeArray* pa,TypeArray* pb,」で
示される画像相互の相関値を算出して
仮引数「int x,int y」で座標変位を指定したN×Mサイズの
画像の相関値を算出してdouble 型で関数値として返す関数
です!
★備考★この関数は、オーバーロード(多重定義)として
同じ関数名で複数の結果をバッファーに格納する形式の関数
も存在しますが、☆説明☆し易い為にワザワザ作成したと思
える関数です!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!

(4-9-72)関数「void CorrImageNMXY(
TypeArray* pa,TypeArray* pb,
TypeXY *xy,double *buf,
int n,int m,int size,int offX=0,int offY=0);」

    void            CorrImageNMXY(                  // n×m画素正規化相関:画像単位:座標指定
        TypeArray*  pa,                             // A配列
        TypeArray*  pb,                             // B配列
        TypeXY*     xy,                             // 探索座標列
        double*     buf,                            // 結果バッファー
        int         n,                              // n×mのn
        int         m,                              // n×mのm
        int         size,                           // バッファーサイズ
        int         offX = 0,                       // X座標オフセット
        int         offY = 0 );                     // Y座標オフセット

「Corr」は、相関を意味します!
「Image」は、勿論、画像です!
「NM」は、N×M=縦(X座標方向:水平方向)が
N画素×横(Y座標方向:垂直方向)がM画素と言う相関を
計算する画像サイズを意味します!
仮引数「int n,int m,」でN×Mを指定します!
「XY」でXY座標変位を示します!詰り、
仮引数「TypeArray* pa,TypeArray* pb,」で示される画像
の中で仮引数「TypeXY *xy」で構造体型名「TypeXY *」で
座標変位バッファーに格納したXY座標変位を指定した
N×Mサイズの画像の画素の相関値を算出して
仮引数「double *buf,」座標の値としてdouble 型の結果
バッファーで結果を格納する関数です!
★備考★この関数は、オーバーロード(多重定義)として
同じ関数名で一か所の値を返す関数も存在します!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!

(4-9-73)関数「double CorrImageNMMyselfXY(
TypeArray* pa,int n,int m,int x,int y);」

    double          CorrImageNMMyselfXY(            // n×m画素自己相関:画像単位:個別座標指定
        TypeArray*  pa,                             // A配列
        int         n,                              // n×mのn
        int         m,                              // n×mのm
        int         x,                              // X座標オフセット
        int         y );                            // Y座標オフセット

「CorrImageNM」は、関数「void CorrImageNM()」で説明し
た通りです!
「Myself」勿論、英単語「Myself」自分自身を意味します!
詰り、「自己相関」を算出する関数です!
「XY」でXY座標変位を示します!詰り、
仮引数「TypeArray* pa,」で示される画像から、
仮引数「int x,int y」で座標変位を指定した
N×Mサイズの画像の画素の自己相関を算出してdouble 型
で関数値として返す関数です!
仮引数「int n,int m,」でN×Mを指定します!
★備考★この関数は、オーバーロード(多重定義)として
同じ関数名で複数の結果をバッファーに格納する形式の関数
も存在しますが、
☆説明☆し易い為にワザワザ作成したと思える関数です!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!

(4-9-74)関数「void CorrImageNMMyselfXY(
TypeArray* pa,TypeXY *xy,double *buf,
int n,int m,int size,int offX=0,int offY=0);」

    void            CorrImageNMMyselfXY(            // n×m画素自己相関:画像単位:座標指定
        TypeArray*  pa,                             // A配列
        TypeXY*     xy,                             // 探索座標列
        double*     buf,                            // 結果バッファー
        int         n,                              // n×mのn
        int         m,                              // n×mのm
        int         size,                           // バッファーサイズ
        int         offX = 0,                       // X座標オフセット
        int         offY = 0 );                     // Y座標オフセット

「CorrImageNM」は、関数「void CorrImageNM()」で説明し
た通りです!
「Myself」勿論、英単語「Myself」自分自身を意味します!
詰り、「自己相関」を算出する関数です!
「XY」でXY座標変位を示します!詰り、
仮引数「TypeArray* pa,」で示される画像から、
仮引数「TypeXY *xy」で構造体型名「TypeXY *」で
座標変位バッファーに格納したXY座標変位を指定した
N×Mサイズの画像の画素の相関値を算出して
仮引数「double *buf,」座標の値としてdouble 型の結果
バッファーで結果を格納する関数です!
仮引数「int n,int m,」でN×Mを指定します!
★備考★この関数は、オーバーロード(多重定義)として
同じ関数名で仮引数「BYTE *bufAve,」を格納するとか、
格納する型が異なる関数も同じ名前で引数の違いだけで用意
しています。☆注意☆平均値有り無しを名前で判別するのは
多重定義記述を知ってから面倒くさいと考えたから?!多重
定義を使用しましたので読解する時・使用する時には細かい
引数迄、注意して下さい!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!

(4-9-75)関数「void CorrImageNMMyselfXY(
TypeArray* pa,TypeXY *xy,
double *buf,BYTE *bufAve,
int n,int m,int size,int offX=0,int offY=0);」

    void            CorrImageNMMyselfXY(            // n×m画素自己相関+平均:画像単位:座標指定
        TypeArray*  pa,                             // A配列
        TypeXY*     xy,                             // 探索座標列
        double*     buf,                            // 結果バッファー
        BYTE*       bufAve,                         // 結果バッファー:平均値
        int         n,                              // n×mのn
        int         m,                              // n×mのm
        int         size,                           // バッファーサイズ
        int         offX = 0,                       // X座標オフセット
        int         offY = 0 );                     // Y座標オフセット

「CorrImageNM」は、関数「void CorrImageNM()」で説明し
た通りです!
「Myself」勿論、英単語「Myself」自分自身を意味します!
詰り、「自己相関」を算出する関数です!
「XY」でXY座標変位を示します!詰り、
仮引数「TypeArray* pa,」で示される画像から、
仮引数「TypeXY *xy」で構造体型名「TypeXY *」で
座標変位バッファーに格納したXY座標変位を指定した
N×Mサイズの画像の画素の相関値を算出して
仮引数「double *buf,」座標の値としてdouble 型の結果
バッファーで結果を格納する関数です!
仮引数「int n,int m,」でN×Mを指定します!
そして特徴として
仮引数「BYTE *bufAve,」に自己相関算出時に算出される
平均値を副産物として格納出来る関数です!
★備考★この関数は、オーバーロード(多重定義)として
同じ関数名で仮引数「BYTE *bufAve,」を格納しないとか、
格納する型が異なる関数も同じ名前で引数の違いだけで用意
しています。☆注意☆平均値有り無しを名前で判別するのは
多重定義記述を知ってから面倒くさいと考えたから?!多重
定義を使用しましたので読解する時・使用する時には細かい
引数迄、注意して下さい!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!

(4-9-76)関数「void CorrImageNMMyselfXY(
TypeArray* pa,TypeXY *xy,
int *buf,
int n,int m,int size,int offX=0,int offY=0);」

    void            CorrImageNMMyselfXY(            // n×m画素自己相関:画像単位:座標指定
        TypeArray*  pa,                             // A配列
        TypeXY*     xy,                             // 探索座標列
        int*        buf,                            // 結果バッファー:整数
        int         n,                              // n×mのn
        int         m,                              // n×mのm
        int         size,                           // バッファーサイズ
        int         offX = 0,                       // X座標オフセット
        int         offY = 0 );                     // Y座標オフセット

「CorrImageNM」は、関数「void CorrImageNM()」で説明し
た通りです!
「Myself」勿論、英単語「Myself」自分自身を意味します!
詰り、「自己相関」を算出する関数です!
「XY」でXY座標変位を示します!詰り、
仮引数「TypeArray* pa,」で示される画像から、
仮引数「TypeXY *xy」で構造体型名「TypeXY *」で
座標変位バッファーに格納したXY座標変位を指定した
N×Mサイズの画像の画素の相関値を算出して
仮引数「int *buf,」座標の値としてint型の結果
バッファーで結果を格納する関数です!
仮引数「int n,int m,」でN×Mを指定します!
★備考★この関数は、オーバーロード(多重定義)として
同じ関数名で仮引数「BYTE *bufAve,」を格納するとか、
格納する型が異なる関数も同じ名前で引数の違いだけで用意
しています。☆注意☆平均値有り無しを名前で判別するのは
多重定義記述を知ってから面倒くさいと考えたから?!多重
定義を使用しましたので読解する時・使用する時には細かい
引数迄、注意して下さい!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!

(4-9-77)関数「void CorrImageNMMyselfXY(
TypeArray* pa,TypeXY *xy,
int *buf,BYTE *bufAve,
int n,int m,int size,int offX=0,int offY=0);」

    void            CorrImageNMMyselfXY(            // n×m画素自己相関+平均:画像単位:座標指定
        TypeArray*  pa,                             // A配列
        TypeXY*     xy,                             // 探索座標列
        int*        buf,                            // 結果バッファー:整数
        BYTE*       bufAve,                         // 結果バッファー:平均値
        int         n,                              // n×mのn
        int         m,                              // n×mのm
        int         size,                           // バッファーサイズ
        int         offX = 0,                       // X座標オフセット
        int         offY = 0 );                     // Y座標オフセット

「CorrImageNM」は、関数「void CorrImageNM()」で説明し
た通りです!
「Myself」勿論、英単語「Myself」自分自身を意味します!
詰り、「自己相関」を算出する関数です!
「XY」でXY座標変位を示します!詰り、
仮引数「TypeArray* pa,」で示される画像から、
仮引数「TypeXY *xy」で構造体型名「TypeXY *」で
座標変位バッファーに格納したXY座標変位を指定した
N×Mサイズの画像の画素の相関値を算出して
仮引数「int *buf,」座標の値としてint型の結果
バッファーで結果を格納する関数です!
仮引数「int n,int m,」でN×Mを指定します!
そして特徴として
仮引数「BYTE *bufAve,」に自己相関算出時に算出される
平均値を副産物として格納出来る関数です!
★備考★この関数は、オーバーロード(多重定義)として
同じ関数名で仮引数「BYTE *bufAve,」を格納しないとか、
格納する型が異なる関数も同じ名前で引数の違いだけで用意
しています。☆注意☆平均値有り無しを名前で判別するのは
多重定義記述を知ってから面倒くさいと考えたから?!多重
定義を使用しましたので読解する時・使用する時には細かい
引数迄、注意して下さい!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!

(4-9-78)関数「int CorrImageNMMyselfExtend(
TypeArray* image,TypeXY *bufXY,double *buf,
int nN,int nM,int maxN,int nStepH,int nStepV,
double tA,double tB);」

    int             CorrImageNMMyselfExtend(        // n×m画素自己相関:拡張
        TypeArray*  image,                          // 画像
        TypeXY*     bufXY,                          // 結果座標バッファー
        double*     buf,                            // 結果バッファー
        int         nN,                             // n×mのn
        int         nM,                             // n×mのm
        int         maxN,                           // 最大結果数
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        double      tA,                             // 最小概要しきい値
        double      tB );                           // 最大概要しきい値

「CorrImageNM」は、関数「void CorrImageNM()」で説明し
た通りです!
「Myself」勿論、英単語「Myself」自分自身を意味します!
「Extend」は、勿論、英単語「Extend」拡張を意味します!
詰り、「自己相関」を算出する関数の拡張です!
詰り、
仮引数「TypeArray* pa,」で示される画像から、
仮引数「TypeXY *xy」で構造体型名「TypeXY *」で
座標変位バッファーに格納したXY座標変位を指定した
N×Mサイズの画像の画素の相関値を算出して
仮引数「double *buf,」座標の値としてdouble 型の結果
バッファーで結果を格納する関数です!そして特徴として
仮引数「double tA,double tB」に概要の相関算出される
閾値の範囲内で詳細に算出して結果を格納する関数です!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!

(4-9-79)関数「void CorrImageNMLarge(
TypeArray* pa,TypeArray* pb,
double *buf,
int n,int m,int nStepH,int nStepV,
int &resH,int &resV);」

    void            CorrImageNMLarge(               // n×m画素正規化相関:画像単位
        TypeArray*  pa,                             // A配列
        TypeArray*  pb,                             // B配列
        double*     buf,                            // 結果バッファー
        int         n,                              // n×mのn
        int         m,                              // n×mのm
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「Corr」は、相関を意味します!
「Image」は、勿論、画像です!
「NM」は、N×M=縦(X座標方向:水平方向)がN画素×
横(Y座標方向:垂直方向)がM画素と言うN×Mと
任意サイズの升目画像サイズを扱います!
仮引数「int n,int m,」でN×Mを指定します!
相関値を算出し比較する画像は、
仮引数「TypeArray* pa,」と仮引数「TypeArray* pb,」
で示される画素単位「w=1」画像専用です!★注意★専用に
出来て居るので画素単位「w≠1」の場合は想定外の動きと成
る事に気を付けて下さい!但し、誤解の無い様に仮引数の
画像サイズは、N×Mと勘違いシナイ様に、モット大きな
画像をN×M升を仮引数「int nStepH,int nStepV,」と
ステップ(間隔)を開けて比較する事で画像全体を比較≪
相関値を仮引数「double *buf,」に算出後格納≫する関数
です!
「Large」は、英単語「Large」で大きいとか広いを意味
します!ココでは、仮引数「int n,int m,」でN×Mと
枠のサイズ指定していますが、その「nm」=N×Mの値が
数値「65536」を超えたら「Large」として扱います!
★注意★N×Mの値が数値「65536」未満の場合は、途中で
算出される合計値の数が整数型(32ビット)に収まるとし
コノ関数では、内部の演算で倍精度浮動小数点数値で演算す
る為です!
★詳細★は、後で説明:【ファイル「CopyClear420.cpp」が
対象】します!

(4-9-80)関数「void CorrImageNMLargeMyself(
TypeArray* pa,double *buf,
int n,int m,int nStepH,int nStepV,
int &resH,int &resV);」

    void            CorrImageNMLargeMyself(         // n×m画素自己相関:画像単位
        TypeArray*  pa,                             // A配列
        double*     buf,                            // 結果バッファー
        int         n,                              // n×mのn
        int         m,                              // n×mのm
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「CorrImageNM」は、関数「void CorrImageNM()」で説明し
た通りです!
「Large」は、英単語「Large」で大きいとか広いを意味
します!ココでは、仮引数「int n,int m,」でN×Mと
枠のサイズ指定していますが、その「n*m」=N×Mの値が
数値「65536」を超えたら「Large」として扱います!
★注意★N×Mの値が数値「65536」未満の場合は、途中で
算出される合計値の数が整数型(32ビット)に収まるとし
コノ関数では、内部の演算で倍精度浮動小数点数値で演算す
る為です!
「Myself」勿論、英単語「Myself」自分自身を意味します!
詰り、「自己相関」を算出する関数です!
★詳細★は、後で説明:【ファイル「CopyClear420.cpp」が
対象】します!

(4-9-81)関数「void SearchCorrImageNMLarge(
TypeArray* pa,TypeArray* pb,
double *buf,
int n,int m,int nStepH,int nStepV,
int &resH,int &resV);」

    void            SearchCorrImageNMLarge(         // n×m画素画像サーチ
        TypeArray*  pa,                             // A配列:サーチ対象
        TypeArray*  pb,                             // B配列:サーチ範囲
        double*     buf,                            // 結果バッファー
        int         n,                              // n×mのn
        int         m,                              // n×mのm
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「Search」は、英単語「Search」で意味「探す」です!
「CorrImageNM」は、前に説明した
関数「void CorrImageNM()」の事です!
詰り、仮引数「TypeArray* pa,」で示したN×Mサイズの
画像をテンプレートとして仮引数「TypeArray* pb,」で
現わされる大きな(広い)画像から一致するN×Mサイズの
画像をサーチする≪仮引数「double *buf,」に一致率を格納
する事で何処が一致して居るか分かる様に成る≫を行う関数
です!
「Large」は、英単語「Large」で大きいとか広いを意味
します!ココでは、仮引数「int n,int m,」でN×Mと
枠のサイズ指定していますが、その「nm」=N×Mの値が
数値「65536」を超えたら「Large」として扱います!
★注意★N×Mの値が数値「65536」未満の場合は、途中で
算出される合計値の数が整数型(32ビット)に収まるとし
コノ関数では、内部の演算で倍精度浮動小数点数値で演算す
る為です!
★詳細★は、後で説明:【ファイル「CopyClear420.cpp」が
対象】します!

(4-9-82)関数「int SearchCorrImageSortLarge(
TypeArray* pa,TypeArray* pb,
TypeCorr*buf,int size,
int n,int m,int nStepH,int nStepV,
double t,double rate=0.0,
double minAv=0.0,double maxAv=0.0);」

    int             SearchCorrImageSortLarge(       // n×m画素画像サーチ&データ整理
        TypeArray*  pa,                             // A配列:サーチ対象
        TypeArray*  pb,                             // B配列:サーチ範囲
        TypeCorr*   buf,                            // 結果バッファー(相関値+座標)
        int         size,                           // 結果サイズ
        int         n,                              // n×mのn
        int         m,                              // n×mのm
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        double      t,                              // 有効相関値
        double      rate=0.0,                       // 0.0:無、他:正/反転割合
        double      minAv=0.0,                      // 0.0:無、他:平均範囲最小割合
        double      maxAv=0.0 );                    // 0.0:無、他:平均範囲最大割合

「SearchCorrImageNM」は、前に説明した
関数「void SearchCorrImageNM()」の事です!
「Sort」は、ソーティング詰り、データを整理する事で
この関数では、算出した相関値で
仮引数「TypeCorr*buf,」に一旦、格納されたデータを
降順(大きい方から小さい方へ)並び変えとかで有効な
データを仮引数「double t,double rate,double minAv,
double maxAv=」で示される条件で選択し条件に合致した
データ個数を関数の返値として返す関数です!
「Large」は、英単語「Large」で大きいとか広いを意味
します!ココでは、仮引数「int n,int m,」でN×Mと
枠のサイズ指定していますが、その「nm」=N×Mの値が
数値「65536」を超えたら「Large」として扱います!
★注意★N×Mの値が数値「65536」未満の場合は、途中で
算出される合計値の数が整数型(32ビット)に収まるとし
コノ関数では、内部の演算で倍精度浮動小数点数値で演算す
る為です!
★詳細★は、後で説明:【ファイル「CopyClear420.cpp」が
対象】します!

(4-9-83)関数「int SearchCorrImageXYSortLarge(
TypeArray* pa,TypeArray* pb,
TypeCorr*buf,int size,
int n,int m,
double t,double rate=0.0,
double minAv=0.0,double maxAv=0.0);」

    int             SearchCorrImageXYSortLarge(     // n×m画素画像サーチ&データ整理:座標指定
        TypeArray*  pa,                             // A配列:サーチ対象
        TypeArray*  pb,                             // B配列:サーチ範囲
        TypeCorr*   buf,                            // 結果バッファー(相関値+座標)
        int         size,                           // 結果サイズ
        int         n,                              // n×mのn
        int         m,                              // n×mのm
        double      t,                              // 有効相関値
        double      rate=0.0,                       // 0.0:無、他:正/反転割合
        double      minAv=0.0,                      // 0.0:無、他:平均範囲最小割合
        double      maxAv=0.0 );                    // 0.0:無、他:平均範囲最大割合

「SearchCorrImage」は、前に説明した
関数「void SearchCorrImageNM()」の事です!
「Sort」は、ソーティング詰り、データを整理する事で
この関数では、算出した座標値で
仮引数「TypeCorrbuf,」に一旦、格納されたデータを
降順(大きい方から小さい方へ)並び変えとかで有効な
データを仮引数「double t,double rate,double minAv,
double maxAv=」で示される条件で選択し条件に合致した
データ個数を関数の返値として返す関数です!
「Large」は、英単語「Large」で大きいとか広いを意味
します!ココでは、仮引数「int n,int m,」でN×Mと
枠のサイズ指定していますが、その「nm」=N×Mの値が
数値「65536」を超えたら「Large」として扱います!
★注意★N×Mの値が数値「65536」未満の場合は、途中で
算出される合計値の数が整数型(32ビット)に収まるとし
コノ関数では、内部の演算で倍精度浮動小数点数値で演算す
る為です!
★詳細★は、後で説明:【ファイル「CopyClear420.cpp」が
対象】します!

(4-9-84)関数「void CorrImageNMMask(
TypeArray* pa,TypeArray* pb,TypeArray* pm,
double *buf,
int n,int m,int nStepH,int nStepV,
int &resH,int &resV);」

    void            CorrImageNMMask(                // n×m画素正規化相関:画像単位
        TypeArray*  pa,                             // A配列
        TypeArray*  pb,                             // B配列
        TypeArray*  pm,                             // M配列
        double*     buf,                            // 結果バッファー
        int         n,                              // n×mのn
        int         m,                              // n×mのm
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「Corr」は、相関を意味します!
「Image」は、勿論、画像です!
「NM」は、N×M=縦(X座標方向:水平方向)がN画素×
横(Y座標方向:垂直方向)がM画素とN×Mと任意サイズ
の升目画像サイズを扱います!
仮引数「int n,int m,」でN×Mを指定します!
「Mask」は、英単語「Masking」マスキング、カタカナ語
でも使用される「隠す・被覆する」と一部を隠す事を意味し
ます!この画像処理では、仮引数「TypeArray* pm,」で
マスク画像メモリを示し、この画像でN×M升目内の
マスキングを行います!
相関値を算出し比較する画像は、
仮引数「TypeArray* pa,」と仮引数「TypeArray* pb,」
で示される画素単位「w=1」画像専用です!★注意★専用に
出来て居るので画素単位「w≠1」の場合は想定外の動きと成
る事に気を付けて下さい!但し、誤解の無い様に仮引数の
画像サイズは、N×Mと勘違いシナイ様に、モット大きな
画像をN×M升を仮引数「int nStepH,int nStepV,」と
ステップ(間隔)を開けて比較する事で画像全体を比較≪
相関値を仮引数「double *buf,」に算出後格納≫する関数
です!
★詳細★は、後で説明:【ファイル「CopyClear440.cpp」が
対象】します!

(4-9-85)関数「void CorrImageNMMaskMyself(
TypeArray* pa,TypeArray* pm,
double *buf,
int n,int m,int nStepH,int nStepV,
int &resH,int &resV);」

    void            CorrImageNMMaskMyself(          // n×m画素自己相関:画像単位
        TypeArray*  pa,                             // A配列
        TypeArray*  pm,                             // M配列
        double*     buf,                            // 結果バッファー
        int         n,                              // n×mのn
        int         m,                              // n×mのm
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「CorrImageNM」は、関数「void CorrImageNM()」で説明し
た通りです!
「Corr」は、相関を意味します!
「Image」は、勿論、画像です!
「NM」は、N×M=縦(X座標方向:水平方向)が
N画素×横(Y座標方向:垂直方向)がM画素とN×Mと
任意サイズの升目画像サイズを扱います!
仮引数「int n,int m,」でN×Mを指定します!
「Mask」は、英単語「Masking」マスキング、カタカナ語
でも使用される「隠す・被覆する」と一部を隠す事を意味し
ます!この画像処理では、仮引数「TypeArray* pm,」で
マスク画像メモリを示し、この画像でN×M升目内の
マスキングを行います!
「Myself」勿論、英単語「Myself」自分自身を意味します!
詰り、「自己相関」を算出する関数です!
相関値を算出し比較する画像は、
仮引数「TypeArray* pa,」で示される画素単位「w=1」画像
専用です!★注意★専用に出来て居るので画素単位「w≠1」
の場合は想定外の動きと成る事に気を付けて下さい!但し、
誤解の無い様に仮引数の画像サイズは、N×Mと勘違い
シナイ様に、モット大きな画像をN×M升を
仮引数「int nStepH,int nStepV,」とステップ(間隔)を
開けて比較する事で画像全体を比較≪相関値を
仮引数「double *buf,」に算出後格納≫する関数です!
★詳細★は、後で説明:【ファイル「CopyClear440.cpp」が
対象】します!

(4-9-86)関数「
void SearchCorrImageNMMask(
TypeArray* pa,TypeArray* pb,TypeArray* pm,
double *buf,
int n,int m,int nStepH,int nStepV,
int &resH,int &resV);」

    void            SearchCorrImageNMMask(          // n×m画素画像サーチ
        TypeArray*  pa,                             // A配列:サーチ対象
        TypeArray*  pb,                             // B配列:サーチ範囲
        TypeArray*  pm,                             // M配列
        double*     buf,                            // 結果バッファー
        int         n,                              // n×mのn
        int         m,                              // n×mのm
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「SearchCorrImage」は、前に説明した
関数「void SearchCorrImageNM()」の事です!
「Mask」は、英単語「Masking」マスキング、カタカナ語
でも使用される「隠す・被覆する」と一部を隠す事を意味し
ます!この画像処理では、仮引数「TypeArray* pm,」で
マスク画像メモリを示し、この画像でN×M升目内の
マスキングを行います!
★詳細★は、後で説明:【ファイル「CopyClear440.cpp」が
対象】します!

(4-9-87)関数「int SearchCorrImageSortMask(
TypeArray* pa,TypeArray* pb,TypeArray* pm,
TypeCorr*buf,int size,
int n,int m,int nStepH,int nStepV,
double t,double rate=0.0,
double minAv=0.0,double maxAv=0.0);」

    int             SearchCorrImageSortMask(        // n×m画素画像サーチ&データ整理
        TypeArray*  pa,                             // A配列:サーチ対象
        TypeArray*  pb,                             // B配列:サーチ範囲
        TypeArray*  pm,                             // M配列
        TypeCorr*   buf,                            // 結果バッファー(相関値+座標)
        int         size,                           // 結果サイズ
        int         n,                              // n×mのn
        int         m,                              // n×mのm
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        double      t,                              // 有効相関値
        double      rate=0.0,                       // 0.0:無、他:正/反転割合
        double      minAv=0.0,                      // 0.0:無、他:平均範囲最小割合
        double      maxAv=0.0 );                    // 0.0:無、他:平均範囲最大割合

「SearchCorrImage」は、前に説明した
関数「void SearchCorrImageNM()」の事です!
「Sort」は、ソーティング詰り、データを整理する事で
この関数では、算出した相関値で
仮引数「TypeCorrbuf,」に一旦、格納されたデータを
降順(大きい方から小さい方へ)並び変えとかで有効な
データを仮引数「double t,double rate,double minAv,
double maxAv=」で示される条件で選択し条件に合致した
データ個数を関数の返値として返す関数です!
「Mask」は、英単語「Masking」マスキング、カタカナ語
でも使用される「隠す・被覆する」と一部を隠す事を意味し
ます!この画像処理では、仮引数「TypeArray *pm,」で
マスク画像メモリを示し、この画像でN×M升目内の
マスキングを行います!
★詳細★は、後で説明:【ファイル「CopyClear440.cpp」が
対象】します!

(4-9-88)関数「int SearchCorrImageXYSortMask(
TypeArray* pa,TypeArray* pb,TypeArray* pm,
TypeCorr*buf,int size,
int n,int m,
double t,double rate=0.0,
double minAv=0.0,double maxAv=0.0);」

    int             SearchCorrImageXYSortMask(      // n×m画素画像サーチ&データ整理:座標指定
        TypeArray*  pa,                             // A配列:サーチ対象
        TypeArray*  pb,                             // B配列:サーチ範囲
        TypeArray*  pm,                             // M配列
        TypeCorr*   buf,                            // 結果バッファー(相関値+座標)
        int         size,                           // 結果サイズ
        int         n,                              // n×mのn
        int         m,                              // n×mのm
        double      t,                              // 有効相関値
        double      rate=0.0,                       // 0.0:無、他:正/反転割合
        double      minAv=0.0,                      // 0.0:無、他:平均範囲最小割合
        double      maxAv=0.0 );                    // 0.0:無、他:平均範囲最大割合

「SearchCorrImage」は、前に説明した
関数「void SearchCorrImageNM()」の事です!
「Sort」は、ソーティング詰り、データを整理する事で
この関数では、算出した座標値で
仮引数「TypeCorrbuf,」に一旦、格納されたデータを
降順(大きい方から小さい方へ)並び変えとかで有効な
データを仮引数「double t,double rate,double minAv,
double maxAv=」で示される条件で選択し条件に合致した
データ個数を関数の返値として返す関数です!
「Mask」は、英単語「Masking」マスキング、カタカナ語
でも使用される「隠す・被覆する」と一部を隠す事を意味し
ます!この画像処理では、仮引数「TypeArray pm,」で
マスク画像メモリを示し、この画像でN×M升目内の
マスキングを行います!
★詳細★は、後で説明:【ファイル「CopyClear440.cpp」が
対象】します!

(4-9-89)関数「void GetHVCorrImageNMMask(
TypeArray* pa,TypeArray* pb,TypeArray* pm,
int n,int m,int nStepH,int nStepV,
int &resH,int &resV);」

    void            GetHVCorrImageNMMask(           // n×m画素正規化相関用升目個数取得
        TypeArray*  pa,                             // A配列
        TypeArray*  pb,                             // B配列
        TypeArray*  pm,                             // M配列
        int         n,                              // n×mのn
        int         m,                              // n×mのm
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「Get」は、取得するを意味します!
「HV」は、水平・垂直の幅のサイズを意味します!
「CorrImageNM」は、直前に説明した
関数「CorrImageNM()」の事です!
この「GetHVCorrImageNM()」は、補助的に
関数「void CorrImageNM()」を実行する前に
仮引数「int &resH,int &resV」に「HV」と水平・垂直の
幅のサイズをこの関数で取得して関数
「void CorrImageNM()」の
仮引数「double buf,」のバッファサイズを
取得する為のサイズとします!
「Mask」は、英単語「Masking」マスキング、カタカナ語
でも使用される「隠す・被覆する」と一部を隠す事を意味し
ます!この画像処理では、仮引数「TypeArray pm,」で
マスク画像メモリを示し、この画像でN×M升目内の
マスキングを関数「SearchCorrImageXYSortMask()」で行い
ます!★注意★引数のチェック用に存在するだけです!
★詳細★は、後で説明:【ファイル「CopyClear440.cpp」が
対象】します!

(4-9-90)関数「void GetHVCorrImageNMMaskMyself(
TypeArray* pa,TypeArray* pm,
int n,int m,int nStepH,int nStepV,
int &resH,int &resV);」

    void            GetHVCorrImageNMMaskMyself(     // n×m画素自己相関用升目個数取得
        TypeArray*  pa,                             // A配列
        TypeArray*  pm,                             // M配列
        int         n,                              // n×mのn
        int         m,                              // n×mのm
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「Get」は、取得するを意味します!
「HV」は、水平・垂直の幅のサイズを意味します!
「CorrImageNMMyself」は、直前に説明した
関数「CorrImageNMMyself()」の事です!
この「GetHVCorrImageNMMyself()」は、補助的に
関数「void CorrImageNMMyself()」を実行する前に
仮引数「int &resH,int &resV」に「HV」と水平・垂直の
幅のサイズをこの関数で取得して関数
「void CorrImageNMMyself()」の
仮引数「double buf,」のバッファサイズを
取得する為のサイズとします
「Mask」は、英単語「Masking」マスキング、カタカナ語
でも使用される「隠す・被覆する」と一部を隠す事を意味し
ます!この画像処理では、仮引数「TypeArray *pm,」で
マスク画像メモリを示し、この画像でN×M升目内の
マスキングを関数「SearchCorrImageXYSortMask()」で行い
ます!★注意★引数のチェック用に存在するだけです!
★詳細★は、後で説明:【ファイル「CopyClear440.cpp」が
対象】します!

(4-9-91)関数「void GetHVSearchCorrImageNMMask(
TypeArray* pa,TypeArray* pb,TypeArray* pm,
int n,int m,int nStepH,int nStepV,
int &resH,int &resV);」

    void            GetHVSearchCorrImageNMMask(     // n×m画素画像サーチ用升目個数取得
        TypeArray*  pa,                             // A配列:サーチ対象
        TypeArray*  pb,                             // B配列:サーチ範囲
        TypeArray*  pm,                             // M配列
        int         n,                              // n×mのn
        int         m,                              // n×mのm
        int         nStepH,                         // 水平方向次点ステップ数
        int         nStepV,                         // 垂直方向次点ステップ数
        int&        resH,                           // 取得する水平個数
        int&        resV );                         // 取得する垂直個数

「Get」は、取得するを意味します!
「HV」は、水平・垂直の幅のサイズを意味します!
「SearchCorrImageNM」は、直前に説明した
関数「void SearchCorrImageNM()」の事です!
この「GetHVSearchCorrImageNM()」は、補助的に
関数「void SearchCorrImageNM()」を実行する前に
仮引数「int &resH,int &resV」に「HV」と水平・垂直の
幅のサイズをこの関数で取得して関数
「void SearchCorrImageNM()」の
仮引数「double buf,」のバッファサイズを
取得する為のサイズとします!
「Mask」は、英単語「Masking」マスキング、カタカナ語
でも使用される「隠す・被覆する」と一部を隠す事を意味し
ます!この画像処理では、仮引数「TypeArray *pm,」で
マスク画像メモリを示し、この画像でN×M升目内の
マスキングを関数「SearchCorrImageXYSortMask()」で行い
ます!★注意★引数のチェック用に存在するだけです!
★詳細★は、後で説明:【ファイル「CopyClear440.cpp」が
対象】します!

(4-9-92)関数「int ExcludeOverlapXY(
TypeCorrbufxy[],int n,
int xDistance=1,int yDistance=1);」

    int                 ExcludeOverlapXY(           // 重複座標の排除
        TypeCorr        bufxy[],                    // 座標格納ポインタ(サーチ用)
        int             n,                          // 座標個数
        int             xDistance=1,                // X方向距離(省略時=1)
        int             yDistance=1 );              // Y方向距離(省略時=1)

「Exclude」は、英単語「Exclude」で除外するとか排除する
の意味です!
「Overlap」は、英単語「Overlap」でカタカナ語のオーバー
ラップ、「重なり合う・重複する」の意味です!
「XY」でXY座標変位を示します!詰り、
「ExcludeOverlapXY」で画像の中でXY座標が重複する部分
を排除する事を意味します!
排除し整理するデータは、
仮引数「TypeCorr bufxy[]」で座標組型と仮引数「int n,」
とそのデータ個数を示し、関数の結果として排除後の個数を
関数の値として返します!
★注意★操作対象の仮引数「TypeCorrbufxy[]」は、
型が「TypeCorr」ですが、別の型を操作できる同じ名前の
関数をオーバーロード(多重定義)関数として用意していま
す!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!

(4-9-93)関数「int ExcludeOverlapXY(
TypeCorrIX bufxy[],int n,
int xDistance=1,int yDistance=1);」

    int                 ExcludeOverlapXY(           // 重複座標の排除
        TypeCorrIX      bufxy[],                    // 座標範囲格納ポインタ(サーチ用)
        int             n,                          // 座標個数
        int             xDistance=1,                // X方向距離(省略時=1)
        int             yDistance=1 );              // Y方向距離(省略時=1)

「Exclude」は、英単語「Exclude」で除外するとか排除する
の意味です!
「Overlap」は、英単語「Overlap」でカタカナ語のオーバー
ラップ、「重なり合う・重複する」の意味です!
「XY」でXY座標変位を示します!詰り、
「ExcludeOverlapXY」で画像の中でXY座標が重複する部分
を排除する事を意味します!
排除し整理するデータは、
仮引数「TypeCorrIX bufxy[]」で座標組型と
仮引数「int n,」とそのデータ個数を示し、関数の結果とし
て排除後の個数を関数の値として返します!
★注意★操作対象の仮引数「TypeCorrIX bufxy[]」は、
型が「TypeCorrIX」ですが、別の型を操作できる同じ
名前の関数をオーバーロード(多重定義)関数として用意
しています!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!

(4-9-94)関数「int MakeXYSearchCorr(
TypeCorr buf1,TypeCorr buf2,
int size,int lmt,int z,int offsetX,int offsetY,
int xAdjust=0,int yAdjust=0);」

    int                 MakeXYSearchCorr(           // サーチ用座標作成
        TypeCorr*       buf1,                       // 元の座標+相関値
        TypeCorr*       buf2,                       // 作成する座標+相関値
        int             size,                       // 元のサイズ
        int             lmt,                        // 作成する座標の最大サイズ
        int             z,                          // 拡大率
        int             offsetX,                    // オフセット:X方向
        int             offsetY,                    // オフセット:Y方向
        int             xAdjust=0,                  // X座標補正値
        int             yAdjust=0 );                // Y座標補正値

「Make」は、英単語「make」で作る、作成する!
「XY」でXY座標変位を示します!
「Search」は、英単語「Search」で意味「探す」です!
「Corr」は、勿論、相関です!という事でココでは、
「MakeXYSearchCorr」は、でサーチ用XY座標作成として
ピラミッド圧縮としての一段縮尺した画像からの座標を
一段戻した画像の座標として作成する関数です!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!

(4-9-95)関数「int GetMakeXYSearchCorr(
int size,int offsetX,int offsetY);」

    int                 GetMakeXYSearchCorr(        // サーチ用座標作成数算出
        int             size,                       // 元のサイズ
        int             offsetX,                    // オフセット:X方向
        int             offsetY );                  // オフセット:Y方向

「Get」は、取得するを意味します!
「MakeXYSearchCorr」は、直前の
関数「MakeXYSearchCorr()」の事です!
この関数は、予め座標バッファーに格納する個数を関数の
値として返す関数です!
★詳細★は、後で説明:【ファイル「CopyClear410.cpp」が
対象】します!

★備考★
解説『解説クラスTypeArray』でも記載したが、
noteエディタの変な特性でコピペした文章の半角「*」
が消されたり、空白「 」が消される事が多々あります!
注意して手作業で修正している筈ですが、必ず、code
機能で表示して居る物を正しいとして確認して下さい

ここで一旦、切れが良い「正規化相関関連関数」での
「public」属性の関数紹介が終わったので2月29日分迄の
講義とします!
後、少しだけ正規化相関関連関数関連(「private」属性)
の関数も残って居ますが、其れは後日!!

続きは、「解説クラスCopyClear(6)」に成り
ます!
「(6)」では、「TypeArray型」を画像として各関数で
使用しますが、共通する画像情報の検査部などを担う関数
を紹介して行きます!
引き続き御贔屓して受講して下さい!

文末


この記事が気に入ったらサポートをしてみませんか?