2

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

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

当然,随着图像变大,在 Matlab 中执行此操作需要相当长的时间。是否有任何内置功能可以用于此任务?

4

2 回答 2

1

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

于 2011-08-20T18:35:51.060 回答
1

我假设矩阵A是一个图像,这意味着像素是规则间隔的,这意味着您可以使用INTERP2。我还假设您为每个像素单独计算插值从A. 但是,您可以一步执行查找,这会快很多。

SayA是一个 100x100 的图像,B是一个 10000×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);
于 2011-08-21T02:19:55.847 回答