C++ 在向量上滑动向量的算法

C++ 在向量上滑动向量的算法,c++,algorithm,vector,matrix,C++,Algorithm,Vector,Matrix,我一直在问一些关于矩阵的问题,并把它们分成几个块——但这显然不起作用,所以我选择了另一条路 假设在这个例子中,我有一个矩阵(向量),它是4x4: M1= M2= 现在,我需要确定M1中哪个块最适合M2中的块。基本上,在一个大矩阵中识别一个小矩阵 我需要帮助的算法基本上是在矩阵1上滑动小矩阵,直到找到它的最佳匹配。(我正在使用相关性/相似性度量) 我一直认为它需要一次以一个像素/值滑动。但是,显然我不想检查每个值的相关性 以下是用于将矩阵X1(在当前位置)与矩阵2进行比较的函数: 这是比较矩阵的函

我一直在问一些关于矩阵的问题,并把它们分成几个块——但这显然不起作用,所以我选择了另一条路

假设在这个例子中,我有一个矩阵(向量),它是4x4:

M1=

M2=

现在,我需要确定M1中哪个块最适合M2中的块。基本上,在一个大矩阵中识别一个小矩阵

我需要帮助的算法基本上是在矩阵1上滑动小矩阵,直到找到它的最佳匹配。(我正在使用相关性/相似性度量)

我一直认为它需要一次以一个像素/值滑动。但是,显然我不想检查每个值的相关性

以下是用于将矩阵X1(在当前位置)与矩阵2进行比较的函数:

这是比较矩阵的函数:

   bool compareMatrix(vector<double> &theMatrix1, vector<double> &theMatrix2, int 
   startRow, int startCol)
   {
      cout << theMatrix1[startRow*4+startCol]; // This prints out the particular block
   }
bool比较矩阵(向量和矩阵1,向量和矩阵2,整数
startRow,int startCol)
{

一个物体扫描另一个物体的一种方法是反转一个物体(h’(x,y)=h(-x,-y)。然后使用卷积定理-查看并查看在二维中工作的东西。卷积定理的要点是,进行FFT只需n logN,因此对于某些参数,它要快得多


这在信号处理中被广泛使用的事实也向我表明,如果你真的需要相关性,你将找不到比这更快的捷径。如果你对某些时候遗漏的东西感到满意,也许你可以做一些事情,比如在两个矩阵中寻找特征,找到特征的匹配,然后检查a这些匹配建议的对齐方式。

扫描一个对象到另一个对象的一种方法是反转一个对象(h'(x,y)=h(-x,-y)然后使用卷积定理,看看,看看,在二维中,卷积定理的要点是,进行FFT只需要n logn,所以对于某些参数,它要快得多


这在信号处理中被广泛使用的事实也向我表明,如果你真的需要相关性,你将找不到比这更快的捷径。如果你对某些时候遗漏的东西感到满意,也许你可以做一些事情,比如在两个矩阵中寻找特征,找到特征的匹配,然后检查a这些匹配建议的对齐方式。

这个问题看起来很熟悉……这个问题是关于在临时向量中插入值,然后处理数据,而不是分成块。它扫描图像:)你应该按M2搜索M1。这个顺序是O(大小M1*大小M2)。当您在M1中搜索每个块时,计算匹配错误(显示M1中有多少元素与M2不匹配)谢谢你的回复。问题是我在扫描M1时遇到问题,甚至考虑搜索M2的内容。这个问题看起来很熟悉…这个问题是在一个临时向量中插入值,然后处理数据,而不是分割成块。图:)您应该按M2搜索M1。此顺序为O(大小M1*大小M2)。当您为每个块搜索M1时,计算匹配错误(显示M1中有多少元素与M2不匹配)找到匹配的最小误差。嘿-谢谢你的回复。问题是我在扫描M1时遇到问题,甚至考虑搜索M2的内容。
   0 1
   1 0
   bool compareMatrix(vector<double> &theMatrix1, vector<double> &theMatrix2, int 
   startRow, int startCol)
   {
      cout << theMatrix1[startRow*4+startCol]; // This prints out the particular block
   }
vector<double> temp(2*2, 0);
temp.push_back(theMatrix1[startRow*4+startCol]);

double corr = correlation(temp, matrix2, 4, 4); 
return corr;