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', поиски объектов минимального различия с помощью постоянно уменьшающегося размера шага. '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 Объект (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.

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

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

Введите изображение в виде любого 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 = 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® легко реализовать сложные системы как видео стабилизация.

Приложение

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

Алгоритмы

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

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

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

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

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