如果我有两个相互关联的数据(1D),in1
和in2
,那么与第一个数据相比,第二个数据会有一些小的移位一。因此,为了在本地匹配这两个数据,我使用了SAD。但是,我无法获得正确的结果。我几乎没有什么不确定性:
(1)由于窗口在第二个数据集上滑动,搜索长度为sl
,但窗口大小为bs
,它将超出矩阵维度。我怎么解决这个问题?我使用padarray
,但这不会在矩阵的末尾返回准确的结果。
(2)这种循环方法似乎效率低下,无论如何优化它?
在数学上,整个过程可以表示为(2D,但是我将它移植到1D,仅仅是x轴):
其中I_c=in1
,I_r=in2
目视:
这是我实施的代码,请看一下。
function [ shift ] = sad1( in1, in2, bs, sl )
[m, n]=size(in1); %assume 1D, m=1
diplacement=zeros(1,n);
in2=padarray(in2,[0 sl-1]);
for i=1:n-bs
%within search length
block1=in1(:,i:i+bs);
for j=i:i+sl
%Compute SAD
SAD = sum(abs(block1 - in2(:,j:j+bs)));
%Save
if exist('min_SAD','var') ~=1
min_dis=j;
min_SAD=SAD;
elseif SAD<min_SAD
min_dis=j;
min_SAD=SAD;
end
end
clear min_SAD;
diplacement(1,i)=min_dis;
end
shift=diplacement;
end
实际数据的一部分:
in1=[5372.46352651418 5257.08068764610 8042.76812761160 5833.32402142968 9491.43952200090 11856.2444355907 3326.33430840502 4217.67349421085 2894.89977584527 3708.35458683153 5924.60060483391 5802.91781076346 3591.61375542073 4235.09092237336 5127.74439876322 4647.02050902984 5191.28422148863 5379.99663160256 5355.36370540952 4966.78807113959];
in2=[8433.00343662079 7471.02426850808 9859.06780580582 12423.7461297648 3833.32998993304 4931.62052706979 2620.01013123014 4819.49730306015 5755.79698619561 6036.21578538532 3608.11913105578 3944.14593740411 5554.92517145851 4741.08692339139 5353.01966043511 5475.83430522947 4854.65355872352 4747.04946476863 4994.36729161458 5714.79600924313];
感谢任何帮助!