【发布时间】:2012-04-19 20:12:00
【问题描述】:
我一直在询问有关矩阵的问题,并将它们分成块 - 但这显然行不通,所以我采取了另一条路线。
假设在这个例子中我有一个 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(在当前位置)和矩阵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;
我希望我已经解释得够多了(注意:这与之前的帖子不同)。
希望有人能帮忙,
谢谢:)
【问题讨论】:
-
这个问题似曾相识……
-
这个问题是关于在临时向量中插入值然后处理数据,而不是分割成块。它扫描图像:)
-
你应该按 M2 搜索 M1。这个顺序是 O(size_m1 * size_m2)。当您为每个块搜索 M1 时,计算匹配错误(这是显示 M1 中有多少元素与 M2 不匹配)并找到匹配数的最小错误。
-
嘿 - 感谢您的回复。问题是我在实际扫描 M1 时遇到问题,甚至考虑搜索 M2 的内容..
标签: c++ algorithm vector matrix