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