像素的非均匀移位

时间:2011-08-20 15:53:22

标签: matlab disparity-mapping

从给定矩阵A和BI需要计算新矩阵C.矩阵A表示图像像素,C是A的水平移位版本。棘手的部分:此移位定义每像素通过视差矩阵B中的值。例如:虽然像素(1,1)需要向右移动0.1个单位,但像素(1,2)需要向左移动0.5个单位。

我将其实现为后向映射,其中C I中的每个像素计算A中所需的源位置(这只是我当前像素的位置减去B中的相应偏移)。由于允许非整数移位,我需要插入新的像素值。

当然,随着图像变大,在Matlab中执行此操作需要相当长的时间。我可以使用任何内置函数来执行此任务吗?

2 个答案:

答案 0 :(得分:1)

函数interp2在规则间隔的网格上插值,例如位图图像。如果您的像素不在常规网格上,那么您将使用griddata

答案 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);