具有窗口大小和1D搜索长度的绝对差之和(SAD)

时间:2017-03-29 07:12:41

标签: matlab optimization sum

如果我有两个相互关联的数据(1D),in1in2,那么与第一个数据相比,第二个数据会有一些小的移位一。因此,为了在本地匹配这两个数据,我使用了SAD。但是,我无法获得正确的结果。我几乎没有什么不确定性:

(1)由于窗口在第二个数据集上滑动,搜索长度为sl,但窗口大小为bs,它将超出矩阵维度。我怎么解决这个问题?我使用padarray,但这不会在矩阵的末尾返回准确的结果。

(2)这种循环方法似乎效率低下,无论如何优化它?

在数学上,整个过程可以表示为(2D,但是我将它移植到1D,仅仅是x轴): enter image description here

其中I_c=in1I_r=in2

目视:

enter image description here

这是我实施的代码,请看一下。

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];

感谢任何帮助!

0 个答案:

没有答案