gpt4 book ai didi

c++ - 在 vector 上滑动 vector 的算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:10:29 25 4
gpt4 key购买 nike

我一直在询问关于矩阵的问题,并将它们分成 block ——但这显然行不通,所以我采取了另一条路线。

假设在这个例子中我有一个 4x4 的矩阵( vector ):

M1 =

    0 1 0 1
1 1 1 0
0 0 0 1
0 1 1 1

M2 =

   0 1
1 0

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

我需要帮助的算法基本上是在矩阵 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
}

现在我在想的是制作一个临时 vector 来存储 matrix1 的值(在当前位置),然后 matrix1 的值(在当前位置)将被插入临时 vector ,这个临时 vector 将然后传递给相关函数,然后返回一个值。

我的问题是:如何将“theMatrix1[startRow*4+startCol]”的内容推送到临时 vector ?

例如(这行不通):

vector<double> temp(2*2, 0);
temp.push_back(theMatrix1[startRow*4+startCol]);

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

我希望我已经解释得足够多了(注意:这与以前的帖子不同)。

希望有人能帮忙,

谢谢:)

最佳答案

将一个对象扫描到另一个对象的一种方法是反转一个对象 (h'(x, y) = h(-x, -y)。然后使用卷积定理 - 请参阅 http://en.wikipedia.org/wiki/Convolution_theorem 并查看 http://www-structmed.cimr.cam.ac.uk/Course/Convolution/convolution.html 了解一些内容它适用于二维。关于卷积定理的要点是,执行 FFT 只需 n log n,因此对于某些参数,它要快得多。

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

关于c++ - 在 vector 上滑动 vector 的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10235988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com