Неравномерное смещение пикселей - PullRequest
2 голосов
/ 20 августа 2011

Из заданных матриц A и BI необходимо вычислить новую матрицу C. Матрица A представляет пиксели изображения, а C представляет собой горизонтально смещенную версию A. Хитрая часть: этот сдвиг определяется на пиксель значения в матрице несоответствия B. Например: в то время как пиксель (1,1) должен быть смещен на 0,1 единицы вправо, пиксель (1,2) должен быть сдвинут на 0,5 единицы влево.

Я реализовал это как обратное отображение, где для каждого пикселя в C я вычисляю требуемую исходную позицию в A (которая является просто местоположением моего текущего пикселя минус соответствующее смещение в B). Поскольку допускаются нецелочисленные сдвиги, мне нужно интерполировать новое значение пикселя.

Выполнение этого в Matlab, конечно, занимает довольно много времени, поскольку изображения становятся больше. Есть ли встроенная функция, которую я могу использовать для этой задачи?

Ответы [ 2 ]

1 голос
/ 21 августа 2011

Я предполагаю, что матрица A является изображением, что означает, что пиксели расположены с регулярным интервалом, что означает, что вы можете использовать INTERP2 .Я также предполагаю, что вы рассчитываете для каждого пикселя индивидуально интерполированное значение из A.Однако вы можете выполнить поиск за один шаг, который будет немного быстрее.

Скажем, A - это изображение 100x100, а B - это массив 10000 x 2 с * 1009.* за каждый пиксель.Тогда вы бы вычислили 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);
1 голос
/ 20 августа 2011

Функция interp2 интерполирует значения в сетке с регулярным интервалом, такой как растровое изображение. Если ваши пиксели не лежат на обычной сетке, вы должны использовать griddata.

...