Выравнивание видоискателя - PullRequest
1 голос
/ 17 декабря 2011

Есть ли кто-нибудь, кто работал с Метод выравнивания видоискателя ? Первый шаг ( Edge Detection ) более или менее понятен. Написано, что ", чтобы извлечь края, мы берем квадратный градиент изображения в четырех одинаково разнесенных направлениях: горизонтальном, вертикальном и двух диагональных направлениях." ( 1 ). И «затем мы выполняем интегральную проекцию каждого градиентного изображения в направлении, перпендикулярном направлению градиента» ( 2 ). Для горизонтального направления я реализовал этот алгоритм следующим образом:

function pl = horgrad(a)
[h,w] = size(a);
b = uint8(zeros(h,w));
for i = 1 : h
        for j = 2 : w
                % abs() instead of squaring
                b(i,j) = abs(a(i,j) - a(i,j-1));     % (1)
        end
end
pl = sum(b);     % (2)

Настоящая проблема для меня - второй шаг: Выравнивание кромок . Что означает px [i] 1 , py [i] 1 , pu [i] 1 и pv [i] 1 ? Почему они равны 1? Как меняется i-counter?

1 Ответ

1 голос
/ 19 декабря 2011

Как я понимаю алгоритм, px , py , pu и pv являются интегральными проекциями в каждом из 4 направлений.Итак, px - это pl в вашем коде.px [i] 0 - каждая точка в этом векторе - pl (i) в коде. px [i] 1 - получить общее количество точек, используемых для создания проекции (коэффициент нормализации?).Таким образом, сумма всех px [i] 1 будет высотой изображения h.Для другого направления это похоже.

Повторяя мой комментарий к вашему вопросу, для лучшей производительности вы должны стараться избегать циклов, особенно вложенных циклов, особенно когда это так просто, как в вашем случае:

b(:,2:end)=abs(diff(a,1,2));
...