Кто-нибудь работал с методом выравнивания видоискателя? Первый шаг (Обнаружение границ) более или менее понятен. Написано, что "для извлечения краев мы берем квадрат градиента изображения в четырех равноотстоящих направлениях: горизонтальном, вертикальном и двух диагональных направлениях" (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-счетчик?
b(:,2:end)=abs(diff(a,1,2));
- person yuk   schedule 19.12.2011b(1:h,2:w) = abs(a(1:h,2:w) - a(1:h,1:w-1));
У него такая же скорость. А также более понятно. - person 108rom   schedule 19.12.2011