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

Matlab 窗口大小和1D搜索长度的绝对差之和(SAD),matlab,optimization,sum,Matlab,Optimization,Sum,如果我有两个数据(1D),in1和in2,它们彼此相关,但是,与第一个数据相比,第二个数据有一些小的偏移。所以为了局部匹配这两个数据,我使用了SAD。然而,我不能得到正确的结果。我几乎没有什么不确定性: (1) 由于窗口在第二个数据集上滑动,搜索长度为sl,但窗口大小为bs,因此它将超过矩阵维度。我怎样才能解决这个问题?我使用padarray,但这不会在矩阵末尾返回准确的结果 (2) 这种循环方法似乎效率低下,有没有办法优化它 从数学上讲,整个过程可以表示为(2D,但我将其移植到1D,仅限于x轴

如果我有两个数据(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

谢谢你的帮助

你试过观察两个信号之间的相关性吗?因为你要进入1D,你想确定两个信号之间的偏移量,从相关性的角度来看是有意义的。不,嗨,你是说使用函数
xcorr
in1
in2
分别是图像1和图像2在x轴上的梯度强度之和,因为我用这种方法确定了以像素为单位的偏移,所以我不确定这样做是否正确。你认为
xcorr
能给我轮班吗?通过最小二乘法拟合位移,我希望常数项是两幅图像的整体位移,对这个问题有什么看法?谢谢
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];