私はマトリックスについて質問し、それらをブロックに分割してきました-しかし、それは明らかに機能していないので、別のルートをとっています.
この例では、4x4 のマトリックス (ベクトル) があるとします。
M1 =
0 1 0 1
1 1 1 0
0 0 0 1
0 1 1 1
M2 =
0 1
1 0
ここで、M1 のどのブロックが M2 のブロックに最も適しているかを特定する必要があります。つまり、基本的には、大きなマトリックス内の小さなマトリックスを識別します。
私が助けを必要としているアルゴリズムは、基本的に、マトリックス 1 を横切って小さなマトリックスをスライドさせて、それが最適であるか一致することが判明するまでです。(私は相関/類似度測定を使用しています)
一度に 1 ピクセル/値でスライドする必要があると考えていました。しかし、明らかに、各値の相関関係を確認したくありません。
以下は、matrix1 (現在の位置) とmatrix 2 を比較する関数です。
これは行列を比較する関数です:
bool compareMatrix(vector<double> &theMatrix1, vector<double> &theMatrix2, int
startRow, int startCol)
{
cout << theMatrix1[startRow*4+startCol]; // This prints out the particular block
}
今私が考えていたのは、(現在の位置にある) matrix1 の値を格納する一時ベクトルを作成し、(現在の位置にある) matrix1 の値が一時ベクトル内にプッシュされ、この一時ベクトルが渡されることでした。値を返す相関関数に。
私の質問は次のとおりです。「theMatrix1 [startRow * 4 + startCol]」の内容を一時ベクトルにプッシュするにはどうすればよいですか?
たとえば、(これは機能しません):
vector<double> temp(2*2, 0);
temp.push_back(theMatrix1[startRow*4+startCol]);
double corr = correlation(temp, matrix2, 4, 4);
return corr;
十分に説明できていることを願っています (注: これは以前の投稿とは異なります)。
誰かが助けてくれることを願って、
ありがとう :)