从给定矩阵A和BI需要计算新矩阵C.矩阵A表示图像像素,C是A的水平移位版本。棘手的部分:此移位定义每像素通过视差矩阵B中的值。例如:虽然像素(1,1)需要向右移动0.1个单位,但像素(1,2)需要向左移动0.5个单位。
我将其实现为后向映射,其中C I中的每个像素计算A中所需的源位置(这只是我当前像素的位置减去B中的相应偏移)。由于允许非整数移位,我需要插入新的像素值。
当然,随着图像变大,在Matlab中执行此操作需要相当长的时间。我可以使用任何内置函数来执行此任务吗?
答案 0 :(得分:1)
答案 1 :(得分:1)
我假设矩阵A
是一个图像,这意味着像素是规则间隔的,这意味着您可以使用INTERP2。我还假设您为每个像素单独计算A
的内插值。但是,您可以在一个步骤中执行查找,这将更加快速。
说A
是100x100图像,B
是一个10000 x 2的数组,每个像素都有[shiftUpDown,shiftLeftRight]
。然后你用这种方式计算C
:
%# create coordinate grid for image A
[xx,yy] = ndgrid(1:100,1:100);
%# linearize the arrays, and add the offsets
xx = xx(:);
yy = yy(:);
xxShifted = xx + B(:,1);
yyShifted = yy + B(:,2);
%# preassign C to the right size and interpolate
C = A;
C(:) = interp2(xx,yy,A(:),xxShifted,yyShifted);