2013-12-01 9 views
0

У меня есть данные 2D-изображения, и я хотел бы вычислить абсолютную разницу между соседними пикселями. Каждый пиксель имеет 8 соседей (вверх, вниз вправо и диагонали), и мне нужно записать результаты в 1D-вектор.эффективная реализация вычисления соседних разностей в matlab

Прямо сейчас я сначала создаю список пар ребер (i, j), где i и j - индекс местоположения пикселя. Например, пиксели в изображении 3x3 обозначены как 1-9, и это определяет диапазон i и j. Затем я перебираю все пары ребер, чтобы вычислить разницу. Проблема в том, что это очень медленно, так как в изображении очень много ребер.

Есть ли лучший способ сделать это? Огромное спасибо.

ответ

1

Вы хотите записать разницу один или два раза? Если вы считаете 8 разницей на пиксель, тогда вы записываете каждую разницу дважды: один раз между i и j и один раз (с той же разницей абс) между j и i.

Вот вариант без петель для 2D изображений I

d1 = abs(I(:,1:end-1) - I(:,2:end)); % difference left-right 
d2 = abs(I(1:end-1,:) - I(2:end,:)); % diff up 
d3 = abs(I(1:end-1,1:end-1) - I(2:end,2:end)); % 1st diagonal 
d4 = abs(I(1:end-1,2:end) - I(2:end,1:end-1)); % 1st diagonal 
allDiff = [d1(:); d2(:); d3(:); d4(:) ]; % stack them together. 
0

Вычислительного таким образом, как сделать различие между абсом краевого пикселем и пикселем, соответствующей горизонтальным и удовлетворяющим пороговым сказать, 1,2,3 .... и сохранение значения горизонтального пикселя подобно тому же способу, также удовлетворяющему для горизонтальной противоположности и выполняющему тот же метод, что и выше. предположим, что краевой пиксель I (i, j), затем I (i, j + r), горизонтальный пиксель и I (i, j-r) вертикальный пиксель

Смежные вопросы