vision.TemplateMatcher

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

Описание

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

  1. Создайте vision.TemplateMatcher Объекту и установите его свойства.

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

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

Создание

Описание

пример

tMatcher = vision.TemplateMatcher возвращает объект шаблона matcher, 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'объект ищет минимальное различие, используя постоянно уменьшающийся размер шага. The 'Three-step' метод в вычислительном отношении дешевле, чем 'Exhaustive' метод, но иногда не находит оптимального решения. Это свойство применяется, когда вы устанавливаете OutputValue свойство к 'Best match location'.

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

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

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

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

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

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

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

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

Словосочетание продукта и длины дроби, заданные как масштабированные numerictype (Fixed-Point Designer) объект. Это свойство применяется только при установке AccumulatorDataType свойство к 'Custom'.

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

Слово аккумулятора и длины дробей, заданные как масштабируемые numerictype (Fixed-Point Designer) объект. Это свойство применяется только при установке 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-D виде черно-белого или цветного изображения.

Информация только для чтения входа, определенная как вектор с четырьмя элементами, [<reservedrangesplaceholder3> <reservedrangesplaceholder2> <reservedrangesplaceholder1> <reservedrangesplaceholder0>] , где первые два элемента представляют координаты верхнего левого угла прямоугольной информации только для чтения.

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

расширить все

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

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

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

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

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

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

release(obj)

расширить все

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

Примеры

свернуть все

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

Введение

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

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

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

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

hVideoSource = VideoReader(filename);

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

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

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

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