Неравномерное смещение пикселей

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

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

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


person Atze Kaputtnik    schedule 20.08.2011    source источник
comment
проверьте функцию GRIDDATA для интерполяции   -  person Amro    schedule 20.08.2011


Ответы (2)


Я предполагаю, что матрица 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);
person Jonas    schedule 21.08.2011
comment
Да, матрица A является изображением. Судя по другим ответам, формулировка моего вопроса не совсем ясна. INTERP2 и GRIDDATA отлично справляются со своей задачей. Только то, что INTERP2 намного быстрее, поскольку он предполагает регулярное расположение точек данных в источнике. - person Atze Kaputtnik; 21.08.2011

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

person nibot    schedule 20.08.2011