【问题标题】:Non-uniform shifting of pixels像素的非均匀移位
【发布时间】:2011-10-31 06:20:09
【问题描述】:

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

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

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

【问题讨论】:

标签: matlab disparity-mapping


【解决方案1】:

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

假设 A 是一个 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);

【讨论】:

  • 是的,矩阵 A 是一个图像。从其他答案来看,我的问题中的表述并没有真正说明这一点。 INTERP2 和 GRIDDATA 都可以很好地完成这项工作。只是 INTERP2 的速度要快得多,因为它在源处假设有规则间隔的数据点。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 2014-02-06
    • 2011-04-04
    • 1970-01-01
    相关资源
    最近更新 更多