利用均方误差在matlab中生成索引矩阵
利用均方误差在matlab中生成索引矩阵,matlab,Matlab,均方误差(MSE)是一种用于定义两个块之间差异的方法,可按如下方式计算: a和b两个块大小相等 MSE = sqrt(sum(sum((a-b).^2)))/size(a or b) 如果MSE小于给定阈值,则两个块没有差异 给定两个矩阵A和B,目的是将两个矩阵划分为给定大小的块,然后从A中提取第一个块,并将其设为A,然后从b中搜索块b,其中a和b之间的均方误差小于给定阈值,然后从矩阵b返回块b的位置。等等下面是一个例子: 给定两个矩阵A和B,其中: A= [1 1 4 4 2 2
均方误差
(MSE)是一种用于定义两个块之间差异的方法,可按如下方式计算:
a
和b
两个块大小相等
MSE = sqrt(sum(sum((a-b).^2)))/size(a or b)
如果MSE
小于给定阈值,则两个块没有差异
给定两个矩阵A
和B
,目的是将两个矩阵划分为给定大小的块,然后从A中提取第一个块,并将其设为A
,然后从b
中搜索块b
,其中a
和b
之间的均方误差小于给定阈值,然后从矩阵b
返回块b
的位置。等等下面是一个例子:
给定两个矩阵A
和B
,其中:
A= [1 1 4 4 2 2
1 1 4 4 2 2
2 2 9 9 5 5
2 2 9 9 5 5
3 3 4 4 9 9
3 3 4 4 9 9];
B = [ 2 2 4 4 9 9
2 2 4 4 9 9];
阈值为2
从矩阵a
获得的第一个块a
是:
1 1
1 1
从矩阵b
获得的a
和b
之间的MSR小于阈值的块b
为:
2 2
2 2
因此,我们返回块b
在矩阵b
中的位置,即1
从矩阵a
获得的第二块a
是:
4 4
4 4
从矩阵b
获得的块b
,其中a
和b
之间的MSR小于阈值为:
4 4
4 4
因此,我们返回块b
在矩阵b
中的位置,即2。等等
最终结果如下
RES= [1 2 1
1 3 2
1 2 3];
有没有更快的方法?这里有一个矢量化的方法,可以使用
首先定义数据:
A = [1 1 4 4 2 2
1 1 4 4 2 2
2 2 9 9 5 5
2 2 9 9 5 5
3 3 4 4 9 9
3 3 4 4 9 9]; %// data: A
B = [2 2 4 4 9 9
2 2 4 4 9 9]; %// data: B
m = 2; %// number of rows per block
n = 2; %// number of cols per block
然后应用以下步骤:
重塑矩阵,使每个块成为一行(灵感来源于)
计算所有块对的MSE
查找与B
块相关的MSE的argmin(对于A
的每个块)。请注意,如果B
中有多个最小化块,则会找到第一个
将结果重塑为矩阵
代码:
A2 = reshape(permute(reshape(A, size(A, 1), n, []), [2 1 3]), n*m, []); %// step 1
B2 = reshape(permute(reshape(B, size(B, 1), n, []), [2 1 3]), n*m, []);
mse = squeeze(sum(bsxfun(@minus, A2, permute(B2,[1 3 2])).^2, 1)); %// step 2
[~, result] = min(mse, [], 2); %// step 3
result = reshape(result, size(A,1)/m, size(A,2)/n); %// step 4