vision.TemplateMatcher

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

Описание

Определять местоположение шаблона в изображении.

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

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

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.

Создание

Описание

пример

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

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

Свойства

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

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

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

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты (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-by-N матрица метрических значений как нечетное число. Например, если матричный размер имеет размер 3х3, устанавливает это свойство на 3. Это свойство применяется, когда вы устанавливаете OutputValue свойство к 'Best match location' и BestMatchNeighborhoodOutputPort свойство к true.

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

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

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

Округление метода для операций фиксированной точки, заданных как 'Floor', 'Ceiling', 'Convergent'самый близкий вокруг , '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.

Входные параметры

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

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

Введите шаблон, заданный как 2D изображение полутонового или истинного цвета.

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

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

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

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

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

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

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

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

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

release(obj)

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

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

Примеры

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

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

Введение

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

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

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

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

hVideoSource = vision.VideoFileReader(filename, ...
                                      'ImageColorSpace', 'Intensity',...
                                      'VideoOutputDataType', 'double');

Создайте шаблон 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);
fileInfo = info(hVideoSource);
W = fileInfo.VideoSize(1); % Width in pixels
H = fileInfo.VideoSize(2); % 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 = fileInfo.VideoSize;
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 ~isDone(hVideoSource)
    input = 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

Релиз

Здесь вы вызываете метод релиза на объектах закрыть любые открытые файлы и устройства.

release(hVideoSource);

Заключение

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

Приложение

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

Алгоритмы

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

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

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

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

Представленный в R2012a