В этом примере показано, как выполнить угловое обнаружение с помощью алгоритма от ускоренного теста сегмента (FAST) функций. Алгоритм FAST определяет, присутствует ли угол путем тестирования круговой области вокруг потенциального центра угла. Тест обнаруживает угол, если непрерывный раздел пикселей является или более ярким, чем центр плюс порог или более темным, чем центр минус порог. Алгоритм подходит для FPGAs. Для другого углового алгоритма обнаружения для FPGAs смотрите пример детектирования углов методом Харриса.
В реализации программного обеспечения этот алгоритм позволяет, чтобы быстрый тест исключил потенциальные углы, только тестируя четыре пикселя вдоль осей. Алгоритмы программного обеспечения только выполняют полный тест, если быстрый тест передает. Аппаратная реализация может легко выполнить все тесты параллельно, таким образом, быстрый тест не особенно выгоден и не включен в этот пример.
Алгоритм FAST может использоваться во многих размерах или шкалах. Этот пример обнаруживает углы с помощью круга на шестнадцать пикселей. В этих шестнадцати пикселях, если какие-либо девять непрерывных пикселей встречают более яркому или более темному пределу затем, обнаруживается угол.
Система Компьютерного зрения Toolbox™ включает алгоритм Детектирования углов методом FAST программного обеспечения в detectFASTFeatures
функция. Этот пример использует эту функцию в качестве поведенческой модели, чтобы выдержать сравнение с проектом Алгоритма FAST для оборудования в Simulink®. Функция имеет параметры для установки минимального контраста и минимального качества.
Минимальный контрастный параметр является пороговым значением, которое добавлено или вычтено из центрального пиксельного значения прежде по сравнению со звонком пикселей.
Минимальные качественные средства управления параметром, которые обнаружили углы, достаточно "сильны", чтобы быть отмеченными как фактические углы. Метрика силы в исходной газете FAST основана на подведении итогов различий пикселей в круговой области к центральному пикселю [2]. Более поздние версии этого алгоритма используют различную метрику силы на основе самого маленького изменения в пиксельном значении, которое не делало бы обнаружение больше углом. detectFastFeatures
использует метрику самого маленького изменения.
Этот код читает первую систему координат видео, преобразует его в шкалу полутонов и вызывает detectFASTFeatures
. Результатом является вектор из угловых местоположений. Чтобы отобразить угловые местоположения, используйте вектор, чтобы чертить яркие зеленые точки по угловым пикселям в выходной системе координат.
v = VideoReader('rhinos.avi'); I = rgb2gray(readFrame(v)); % create output RGB frame Y = repmat(I,[1 1 3]); corners = detectFASTFeatures(I,'minContrast',15/255,'minQuality',1/255); locs = corners.Location; for ii = 1:size(locs,1) Y(floor(locs(ii,2)),floor(locs(ii,1)),2) = 255; % green dot end imshow(Y)
Другие угловые методы обнаружения работают совершенно по-другому по сравнению с методом FAST, и неожиданный результат - то, что FAST не обнаруживает углы на сгенерированных изображениях компьютера, которые отлично выравниваются к x
и y
оси. Поскольку обнаруженный угол должен иметь звонок более темных или более легких пиксельных значений вокруг центра, который включает оба ребра угла, четкие изображения не работают хорошо. Например, попробуйте Алгоритм FAST для входного изображения, используемого в примере детектирования углов методом Харриса Харриса.
I = imread('cornerboxes.png'); Ig = rgb2gray(I); corners = detectFASTFeatures(Ig,'minContrast',15/255,'minQuality',1/255)
corners = 0x1 cornerPoints array with properties: Location: [0x2 single] Metric: [0x1 single] Count: 0
Вы видите, что функция обнаружила нулевые углы. Это, потому что Алгоритм FAST требует звонка контрастирующих пикселей больше, чем на полпути вокруг центра угла. В компьютере сгенерированное изображение оба ребра поля в углу находятся в звонке используемого пикселя, таким образом, тест для угла перестал работать. Обходное решение к этой проблеме должно добавить размытость (путем применения Гауссова фильтра) к изображению так, чтобы углы были менее точными, но могли быть обнаружены. После размывания Алгоритм FAST теперь обнаруживает более чем 100 углов.
h = fspecial('gauss',5); Ig = imfilter(Ig,h); corners = detectFASTFeatures(Ig,'minContrast',15/255,'minQuality',1/255) locs = corners.Location; for ii = 1:size(locs,1) I(floor(locs(ii,2)),floor(locs(ii,1)),2) = 255; % green dot end imshow(I)
corners = 136x1 cornerPoints array with properties: Location: [136x2 single] Metric: [136x1 single] Count: 136
Модель Simulink использует detectFASTFeatures
функционируйте как поведенческую модель, чтобы проверить результаты аппаратного алгоритма. Можно использовать блок MATLAB function, чтобы запустить код MATLAB в Simulink.
modelname = 'FASTCornerHDL'; open_system(modelname); set_param(modelname,'SampleTimeColors','on'); set_param(modelname,'SimulationCommand','Update'); set_param(modelname,'Open','on'); set(allchild(0),'Visible','off');
Код в блоке MATLAB function должен или сгенерировать код С или быть объявлен значением внешних параметров. Внешнее объявление позволяет заданной функции запускаться в MATLAB, в то время как остальная часть блока MATLAB function запускается в Simulink. detectFASTFeatures
функция не поддерживает генерацию кода, таким образом, блок MATLAB function должен использовать внешнюю функцию помощника.
Для покадрового визуального сравнения и способности варьироваться контрастный параметр, функция помощника берет входное изображение и минимальный контраст как входные параметры. Это возвращает выходное изображение с зелеными точками, отмечающими обнаруженные углы.
function Y = FASTHelper(I,minContrast) Y = I; corners = detectFASTFeatures(I(:,:,1),'minContrast',double(minContrast)/255,'minQuality',1/255); locs = corners.Location; for ii = 1:size(locs,1) Y(floor(locs(ii,2)),floor(locs(ii,1)),2) = 255; % green dot end end
Блок MATLAB function должен иметь заданный размер для выходного массива. Быстрый способ задать выходной размер состоит в том, чтобы скопировать вход в выход прежде, чем вызвать функцию помощника. Это - код в блоке MATLAB function:
function Y = fcn(I,minContrast) coder.extrinsic('FASTHelper'); Y = I; Y = FASTHelper(I,minContrast); end
Алгоритм FAST, реализованный в блоке Vision HDL Toolbox Corner Detector в этой модели, тестирует 9 непрерывных пикселей от звонка 16 пикселей и сравнивает их значения с центральным пиксельным значением. Ядро 7x7
пиксели вокруг каждого тестового пикселя включают звонок на 16 пикселей. Схема показывает центральный пиксель и звонок 16 пикселей вокруг этого, который используется для теста. Кольцевые пиксели, по часовой стрелке от главной середины,
indices = [22 29 37 45 46 47 41 35 28 21 13 5 4 3 9 15];
Эти пиксельные индексы используются для выбора и сравнения. Порядок должен быть непрерывным, но звонок может начаться в любой точке.
После вычислительных угловых метрик с помощью этих звонков пикселей алгоритм определяет максимальную угловую метрику в каждой области и подавляет другие обнаруженные углы. Модель затем накладывает неподавленные угловые маркеры на исходное входное изображение.
Аппаратный алгоритм находится в подсистеме FASTHDLAlgorithm. Эта подсистема поддерживает генерацию HDL-кода.
open_system([modelname '/FASTHDLAlgorithm'],'force');
Чтобы определить присутствие угла, ищите все возможные непрерывные сегменты на 9 пикселей звонка, которые имеют значения, или больше, чем или меньше, чем пороговое значение.
В оборудовании можно выполнить все эти сравнения параллельно. Каждый блок компаратора расширяется до 16 компараторов. Выход блока является 16 выборами из двух альтернатив, представляющими каждый сегмент звонка.
Алгоритм FAST идентифицирует многих, много потенциальных углов. Чтобы уменьшать последующую обработку, все углы кроме углов с максимальной угловой метрикой в конкретной области могут быть удалены или подавлены. Существует много алгоритмов для немаксимального подавления, подходящего для реализации программного обеспечения, но немногих подходящих для оборудования. В программном обеспечении используется основанный на градиенте подход, который может быть интенсивно использующим ресурсы в оборудовании. В этой модели простой, но очень эффективный метод должен сравнить угловые метрики в 5x5
ядро и приводит к булеву результату. Булев выход верен, если угловая метрика в центре ядра больше нуля (т.е. это - угол), и также это - максимум всех других угловых метрик в 5x5
область. Большее, чем нуль условие совпадает с установкой minQuality
к 1
для detectFASTFeatures
функция.
Поскольку обработка пиксельного потока слева направо и от начала до конца, результаты содержат некоторые направленные эффекты, такой как, который обнаруженные углы не всегда отлично выравнивают с объектами. Подсистема NonMaxSuppress включает постоянный блок, который позволяет вам отключать подавление и визуализировать полные результаты.
open_system([modelname '/FASTHDLAlgorithm/NonMaxSuppress'],'force');
При выходе подсистемы NonMaxSuppress пиксельный поток включает маркеры для самого сильного угла в каждом 5x5 область. Затем модель перестраивает обнаруженные углы с исходным пиксельным потоком с помощью блока Pixel Stream Aligner. После того, как исходный поток и маркеры выравниваются вовремя, модель накладывает зеленую точку на углах. Подсистема Наложения содержит альфа-микшер с константами для альфа-значений и цвета.
Выходные средства просмотра показывают наложенные зеленые точки для обнаруженных углов. Поведенческий Video Viewer показывает выход detectFastFeatures
функция и HDL Video Viewer показывают выход алгоритма HDL.
Немаксимальный алгоритм подавления мог быть улучшен следующими градиентами и использованием стратегии нескольких-передач, но тот расчет будет также использовать больше аппаратных ресурсов.
В этом примере показано, как начать использовать detectFASTFeatures
в MATLAB и затем перемещаются в Simulink для фрагмента FPGA проекта. Аппаратный алгоритм в блоке Corner Detector включает тест звонка вокруг центрального пикселя в ядре и угловую метрику силы. Модель использует немаксимальную функцию подавления, чтобы удалить всех кроме самых сильных обнаруженных углов. Проект затем накладывает угловые местоположения на исходный ввод видео, подсвечивая углы зеленого цвета.
[1] Rosten, E. и Т. Драммонд. "Плавя Точки и Линии для Высокой производительности, Отслеживающей" Продолжения Международной конференции IEEE по вопросам Компьютерного зрения, Издание 2 (октябрь 2005): стр 1508-1511.
[2] Rosten, E. и Т. Драммонд. "Машинное обучение для Высокоскоростного Углового Компьютерного зрения" Обнаружения - Примечания Лекции ECCV 2006 в Информатике, 2006, 430-43. doi:10.1007/11744023_34.