exponenta event banner

видение. TemplateMatcher

Найти шаблон в изображении

Описание

Поиск шаблона на изображении.

  1. Создать vision.TemplateMatcher и задайте его свойства.

  2. Вызовите объект с аргументами, как если бы это была функция.

Дополнительные сведения о работе системных объектов см. в разделе Что такое системные объекты?.

Создание

Описание

пример

tMatcher = vision.TemplateMatcher возвращает объект сопоставления шаблонов, tMatcher. Этот объект выполняет сопоставление шаблонов путем смещения шаблона с шагом в один пиксел по всей внутренней части изображения.

tMatcher = vision.TemplateMatcher(Name,Value) задает свойства, используя одну или несколько пар имя-значение. Заключите каждое имя свойства в кавычки. Например, tMatcher = vision.TemplateMatcher('Metric','Sum of absolute differences')

Свойства

развернуть все

Если не указано иное, свойства не настраиваются, что означает невозможность изменения их значений после вызова объекта. Объекты блокируются при их вызове, и release функция разблокирует их.

Если свойство настраивается, его значение можно изменить в любое время.

Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.

Метрика, используемая для сопоставления шаблонов, указана как 'Sum of absolute differences', 'Sum of squared differences' , или 'Maximum absolute difference'.

Тип вывода, указанный как 'Metric matrix' или 'Best match location'.

Укажите критерии поиска, чтобы найти минимальную разницу между двумя входами, указанные как 'Exhaustive' или 'Three-step'. Если для этого свойства задано значение 'Exhaustive'объект ищет минимальную разность пикселей по пикселям. Если для этого свойства задано значение 'Three-step'объект ищет минимальную разницу, используя неуклонно уменьшающийся размер шага. 'Three-step' метод вычислительно дешевле, чем 'Exhaustive' метод, но иногда не находит оптимального решения. Это свойство применяется при установке OutputValue свойство для 'Best match location'.

Включить вывод метрических значений, указанных как true или false. Это свойство применяется при установке OutputValue свойство для 'Best match location'.

Размер метрических значений, указанных как нечетное число. Размер N матрицы N-на-N метрических значений в виде нечетного числа. Например, если размер матрицы равен 3 на 3, задайте для этого свойства значение 3. Это свойство применяется при установке OutputValue свойство для 'Best match location' и BestMatchNeighborhoodOutputPort свойство для true.

Включение спецификации ROI посредством ввода, указанного как true или false. Установить для этого свойства значение true для определения области интересов (ROI), для которой выполняется сопоставление шаблонов. Если для этого свойства задано значение true, необходимо указать ROI. В противном случае используется все входное изображение.

Разрешить вывод флага, указывающего, находится ли какая-либо часть ROI вне входного изображения, указанного как true или false. При установке для этого свойства значения trueобъект возвращает флаг окупаемости инвестиций. Флаг, если установлено значение false, указывает, что часть ROI находится вне входного изображения. Это свойство применяется при установке ROIInputPort свойство для true

Свойства с фиксированной точкой

Метод округления для операций с фиксированной точкой, указанный как 'Floor', 'Ceiling', 'Convergent', 'Nearest' , 'Round' , 'Simplest' , или 'Zero'.

Действие, выполняемое, когда целочисленный ввод выходит за пределы диапазона, указанное как 'Wrap' или 'Saturate'.

Тип данных продукта, указанный как 'Same as input' или 'Custom'.

Длины слов и дробей продукта, указанные как масштабированные numerictype (Конструктор фиксированных точек). Это свойство применяется только при установке AccumulatorDataType свойство для 'Custom'.

Тип данных аккумулятора, указанный как 'Same as product', 'Same as input', или 'Custom'.

Длины слов и дробей в накопителе, заданные как масштабированные numerictype (Конструктор фиксированных точек). Это свойство применяется только при установке AccumulatorDataType свойство для 'Custom'.

Использование

Описание

пример

location = tMatcher(I,T) возвращает координаты местоположения [x y] наилучшего соответствия шаблона относительно верхнего левого угла изображения между матрицей изображения, Iи матрица шаблона, T. Объект вычисляет местоположение путем сдвига шаблона с шагом в один пиксел по всей внутренней части изображения.

[location,numberOfValues,numValid] = tMatcher(I,T,ROI)возвращает расположение наилучшего соответствия шаблона location, метрические значения вокруг наилучшего соответствия numberOfValuesи логический флаг numValid. Это применимо при установке OutputValue свойство для 'Best match location' и BestMatchNeighborhoodOutputPort свойство для true.

[location,numberOfValues,numValid,ROIvalid] = tMatcher(I,T,ROI) также возвращает логический флаг, ROIvalid чтобы указать, ROI находится вне границ входного изображения I. Это применимо при установке OutputValue свойство для 'Best match location', и BestMatchNeighborhoodOutputPort, ROIInputPort, и ROIValidityOutputPort свойства для true.

[location,ROIvalid] = tMatcher(I,T,ROI)также возвращает логический флаг ROIvalid указание, указано ли ROI находится вне границ входного изображения I. Это применимо при установке OutputValue свойство для 'Best match location', и оба ROIInputPort и ROIValidityOutputPort свойства для true.

Входные аргументы

развернуть все

Входное изображение, указанное как 2-D изображение в градациях серого или цветное изображение.

Входной шаблон, определенный как 2-е оттенки серого или truecolor изображение.

Входной ROI, заданный как четырехэлементный вектор, [x y width height], где первые два элемента представляют координаты верхнего левого угла прямоугольной ROI.

Выходные аргументы

развернуть все

Местоположение наилучшего соответствия шаблона, возвращаемого в виде вектора в формате (x, y). Координаты указывают центр шаблона относительно верхнего левого угла изображения. Дополнительные сведения см. в разделе Алгоритмы

Матрица метрических значений, возвращаемая как матрица. A false значение для numValid указывает, что окрестности вокруг наилучшего соответствия расширены за пределы матрицы метрических значений numberOfValues.

Действительное соседство, возвращено как true или false. A false значение для numValid указывает, что окрестности вокруг наилучшего соответствия расширены за пределы матрицы метрических значений numberOfValues.

Допустимый район окупаемости инвестиций, возвращен как true или false. A false значение для ROIvalid указывает, что ROI находится за пределами входного изображения.

Функции объекта

Чтобы использовать функцию объекта, укажите object™ System в качестве первого входного аргумента. Например, для освобождения системных ресурсов объекта System с именем obj, используйте следующий синтаксис:

release(obj)

развернуть все

stepЗапустить алгоритм объекта System
releaseДеблокирование ресурсов и разрешение изменений значений свойств объекта системы и входных признаков
resetСброс внутренних состояний объекта System

Примеры

свернуть все

В этом примере показано, как удалить эффект движения камеры из видеопотока.

Введение

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

Инициализация

Создайте системный object™ для чтения видео из мультимедийного файла. Мы установили выход только с интенсивностью видео.

% Input video file which needs to be stabilized.
filename = 'shaky_car.avi';

hVideoSource = VideoReader(filename);

Создайте объект matcher System шаблона для вычисления местоположения наилучшего соответствия цели в видеокадре. Мы используем это расположение, чтобы найти трансляцию между последовательными видеокадрами.

hTM = vision.TemplateMatcher('ROIInputPort', true, ...
                            'BestMatchNeighborhoodOutputPort', true);

Создайте объект System для отображения исходного видео и стабилизированного видео.

hVideoOut = vision.VideoPlayer('Name', 'Video Stabilization');
hVideoOut.Position(1) = round(0.4*hVideoOut.Position(1));
hVideoOut.Position(2) = round(1.5*(hVideoOut.Position(2)));
hVideoOut.Position(3:4) = [650 350];

Здесь мы инициализируем некоторые переменные, используемые в цикле обработки.

pos.template_orig = [109 100]; % [x y] upper left corner
pos.template_size = [22 18];   % [width height]
pos.search_border = [15 10];   % max horizontal and vertical displacement
pos.template_center = floor((pos.template_size-1)/2);
pos.template_center_pos = (pos.template_orig + pos.template_center - 1);
W = hVideoSource.Width; % Width in pixels
H = hVideoSource.Height; % Height in pixels
BorderCols = [1:pos.search_border(1)+4 W-pos.search_border(1)+4:W];
BorderRows = [1:pos.search_border(2)+4 H-pos.search_border(2)+4:H];
sz = [W, H];
TargetRowIndices = ...
  pos.template_orig(2)-1:pos.template_orig(2)+pos.template_size(2)-2;
TargetColIndices = ...
  pos.template_orig(1)-1:pos.template_orig(1)+pos.template_size(1)-2;
SearchRegion = pos.template_orig - pos.search_border - 1;
Offset = [0 0];
Target = zeros(18,22);
firstTime = true;

Цикл обработки потока

Это основной цикл обработки, который использует объекты, которые мы создали выше для стабилизации входного видео.

while hasFrame(hVideoSource)
    input = rgb2gray(im2double(readFrame(hVideoSource)));

    % Find location of Target in the input video frame
    if firstTime
      Idx = int32(pos.template_center_pos);
      MotionVector = [0 0];
      firstTime = false;
    else
      IdxPrev = Idx;

      ROI = [SearchRegion, pos.template_size+2*pos.search_border];
      Idx = hTM(input,Target,ROI);

      MotionVector = double(Idx-IdxPrev);
    end

    [Offset, SearchRegion] = updatesearch(sz, MotionVector, ...
        SearchRegion, Offset, pos);

    % Translate video frame to offset the camera motion
    Stabilized = imtranslate(input, Offset, 'linear');

    Target = Stabilized(TargetRowIndices, TargetColIndices);

    % Add black border for display
    Stabilized(:, BorderCols) = 0;
    Stabilized(BorderRows, :) = 0;

    TargetRect = [pos.template_orig-Offset, pos.template_size];
    SearchRegionRect = [SearchRegion, pos.template_size + 2*pos.search_border];

    % Draw rectangles on input to show target and search region
    input = insertShape(input, 'Rectangle', [TargetRect; SearchRegionRect],...
                        'Color', 'white');
    % Display the offset (displacement) values on the input image
    txt = sprintf('(%+05.1f,%+05.1f)', Offset);
    input = insertText(input(:,:,1),[191 215],txt,'FontSize',16, ...
                    'TextColor', 'white', 'BoxOpacity', 0);
    % Display video
    hVideoOut([input(:,:,1) Stabilized]);
end

Заключение

С помощью функции Computer Vision Toolbox™ из командной строки MATLAB ® легко реализовать сложные системы, такие как видеостабилизация.

Приложение

В этом примере используется следующая вспомогательная функция.

Алгоритмы

Типичное использование устройства сопоставления шаблонов включает в себя поиск небольшой области в пределах большего изображения. Область задается шаблонным изображением, которое может быть таким же большим, как входное изображение, но которое обычно меньше, чем входное изображение.

Объект выводит координаты наилучшего соответствия относительно верхнего левого угла изображения. Координаты [x y] местоположения соответствуют центру шаблона. При использовании шаблона с нечетным числом пикселей объект использует центр шаблона. При использовании шаблона с четным числом пикселов объект использует для расположения центрированный верхний левый пиксель. В следующей таблице показано, как объект выводит местоположение (LOC), нечетных и четных шаблонов:

Нечетное число пикселей в шаблонеЧетное число пикселей в шаблоне

Расширенные возможности

.
Представлен в R2012a