的Mean Square Error
(MSE),是用于定义在两个块之间的差异的方法,并且可以如下计算:a
和b
两个块大小相等
MSE = sqrt(sum(sum((a-b).^2)))/size(a or b)
如果MSE
小于给定的阈值,则这两个块是不同的。
给定两个矩阵A
和B
,目的是将两个矩阵划分为给定大小的块,然后从A中提取第一个块,让它成为a
,然后b
从B
到Mean Square Error
之间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
从基质获得的B
那之间MSRa
和b
小于所述阈值是:
2 2
2 2
因此,我们返回块b
在矩阵B
中的位置为1
a
从矩阵中获得的第二个块A
是:
4 4
4 4
b
从B
MSR介于a
和b
小于阈值的矩阵中获得的块为:
4 4
4 4
因此,我们返回块b
在矩阵中的位置B
,即2。依此类推。
最终结果应如下
RES= [1 2 1
1 3 2
1 2 3];
有没有更快的方法?
这是使用的向量化方法bsxfun
。
首先定义数据:
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
然后应用以下步骤:
B
(的每个区块A
)找出MSE的argmin 。请注意,如果其中有多个最小化块,则会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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句