2

与えられた行列 A と BI から、新しい行列 C を計算する必要があります。行列 A は画像ピクセルを表し、C は A の水平方向にシフトされたバージョンです。注意が必要な部分: このシフトは、視差行列 B の値によってピクセルごとに定義されます。例: ピクセル (1,1) は右に 0.1 単位シフトする必要があり、ピクセル (1,2) は左に 0.5 単位シフトする必要があります。

これを後方マッピングとして実装しました。CI の各ピクセルに対して、A で必要なソース位置を計算します (これは、現在のピクセルの位置から B の対応するオフセットを差し引いたものです)。整数以外のシフトが許可されているため、新しいピクセル値を補間する必要があります。

もちろん、これを Matlab で行うと、画像が大きくなるにつれてかなりの時間がかかります。このタスクに利用できる組み込み関数はありますか?

4

2 に答える 2

1

マトリックスは画像であると仮定します。Aつまり、ピクセルが規則的に配置されていることを意味します。つまり、 INTERP2を使用できます。また、ピクセルごとに から補間された値を個別に計算すると仮定しますA。ただし、ルックアップを 1 ステップで実行することはできます。これにより、かなり高速になります。

たとえば、 100x100Aの画像で、各ピクセル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 に答える
1

この関数interp2は、ビットマップ イメージなどの一定間隔のグリッドで値を補間します。ピクセルが通常のグリッド上にない場合は、 を使用しますgriddata

于 2011-08-20T18:35:51.060 に答える