visionhdl. EdgeDetector

Найдите ребра объектов

Описание

visionhdl.EdgeDetector находит ребра в полутоновом пиксельном потоке с помощью Sobel, Прюитта или метода Робертса. Объект применяет операцию свертки к входным пикселям с производными матрицами приближения, чтобы найти градиент пиксельного значения вдоль двух ортогональных направлений. Это затем сравнивает сумму квадратов градиентов к настраиваемому порогу, чтобы определить, представляют ли градиенты ребро. Методы Собеля и Прюитта вычисляют градиент в горизонтальных и вертикальных направлениях. Метод Робертса вычисляет градиенты в 45 и 135 градусах.

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

Примечание

При запуске в R2016b, вместо того, чтобы использовать метод step, чтобы выполнить операцию, заданную Системой object™, можно вызвать объект с аргументами, как будто это была функция. Например, y = step(obj,x) и y = obj(x) выполняют эквивалентные операции.

Конструкция

ED = visionhdl.EdgeDetector возвращает Системный объект, ED, который обнаруживает ребра с помощью метода Sobel.

ED = visionhdl.EdgeDetector(Name,Value) возвращает Системный объект, ED, с дополнительными опциями, заданными одним или несколькими Name, аргументы пары Value. Name является именем свойства, и Value является соответствующим значением. Имя должно находиться внутри одинарных кавычек (' '). Можно задать несколько аргументов пары "имя-значение" в любом порядке как Name1,Value1,...,NameN,ValueN. Свойства, не заданные, сохраняют свои значения по умолчанию.

Свойства

Method

Алгоритм обнаружения ребра.

Задайте 'Sobel', 'Prewitt' или метод 'Roberts'.

Значение по умолчанию: 'Sobel'

BinaryImageOutputPort

Включите Edge вывод метода step.

Когда этим свойством является true, метод step возвращает бинарное представление пиксельного значения, обнаружил ли объект ребро в каждом местоположении в кадре.

Значение по умолчанию: true

GradientComponentOutputPorts

Включите G1 и G2 выходные параметры метода step.

Когда этим свойством является true, метод step возвращает два значения, представляющие градиенты, вычисленные в двух ортогональных направлениях на уровне каждого пикселя. Установите тип данных для этого аргумента в свойстве GradientDataType.

По умолчанию: false

ThresholdSource

Источник для порогового значения градиента, которое указывает на ребро.

Установите это свойство на 'Input port' устанавливать порог как входной параметр к методу step. Когда это свойство будет установлено в 'Property', установите порог в свойстве Threshold.

Значение по умолчанию: 'Property'

Threshold

Пороговое значение градиента, которое указывает на ребро, заданное как значение числового скаляра.

Объект сравнивает квадрат этого к сумме квадратов градиентов. Объект бросает это значение к типу данных градиентов. Это свойство применяется, когда вы устанавливаете ThresholdSource на 'Property'.

Значение по умолчанию: 20

LineBufferSize

Размер буфера памяти строки, заданного как целое число.

Выберите степень двойки, которая размещает количество активных пикселей в горизонтальной строке. Если вы задаете значение, которое не является степенью двойки, объект использует следующую самую большую степень двойки. Объект выделяет (N - 1)-by-LineBufferSize ячейки памяти, чтобы сохранить пиксели, где N является количеством строк в дифференциальной матрице приближения. Если вы устанавливаете свойство Method на 'Sobel' или 'Prewitt', то N равняется 3. Если вы устанавливаете свойство Method на 'Roberts', то N равняется 2.

Значение по умолчанию: 2048

RoundingMethod

Режим Rounding используется для операций фиксированной точки.

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

Значение по умолчанию: Floor

OverflowAction

Действие переполнения используется для операций фиксированной точки.

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

Значение по умолчанию: Wrap

GradientDataType

Тип данных для выходных значений градиента, заданных как numerictype(signed,WL,FL), где WL является размером слова и FL, является дробной длиной в битах.

  • 'Full precision' (значение по умолчанию) — Использует правила полной точности на основе типа данных аргумента pixelIn метода step и коэффициентов производных матриц приближения.

  • 'custom' — Используйте тип данных, заданный в theCustomGradientDataType свойстве.

CustomGradientDataType

Тип данных для выходных значений градиента, заданных как numerictype(signed,WL,FL), где WL является размером слова и FL, является дробной длиной в битах.

Значение по умолчанию: numerictype(1,8,0)

Методы

шагОбнаружьте ребра в пикселе изображения
Характерный для всех системных объектов
release

Позвольте изменения значения свойства Системного объекта

Примеры

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

Обнаружьте ребра в изображении миниатюр с помощью метода Sobel.

Подготовьте тестовое изображение путем выбора фрагмента файла изображения.

frmActivePixels = 64;
frmActiveLines = 48;
frmOrig = imread('rice.png');
frmInput = frmOrig(1:frmActiveLines,1:frmActivePixels);
figure
imshow(frmInput,'InitialMagnification',300)
title 'Input Image'

Создайте сериализатор и задайте размер неактивных пиксельных областей.

frm2pix = visionhdl.FrameToPixels(...
      'NumComponents',1,...
      'VideoFormat','custom',...
      'ActivePixelsPerLine',frmActivePixels,...
      'ActiveVideoLines',frmActiveLines,...
      'TotalPixelsPerLine',frmActivePixels+10,...
      'TotalVideoLines',frmActiveLines+10,...
      'StartingActiveLine',6,...     
      'FrontPorch',5);

Создайте объект обнаружения ребра со значениями свойств по умолчанию. Методом обнаружения по умолчанию является Sobel.

edgeDetectSobel = visionhdl.EdgeDetector();

Сериализируйте тестовое изображение с помощью объекта, который вы создали. pixIn является вектором значений интенсивности. ctrlIn является вектором структур управляющего сигнала. Предварительно выделите векторы для выходных сигналов.

Примечание: Этот синтаксис запускается только в R2016b или позже. Если вы используете более ранний релиз, заменяете каждый вызов объекта с эквивалентным синтаксисом step. Например, замените myObject(x) на step(myObject,x).

[pixIn,ctrlIn] = frm2pix(frmInput);

[~,~,numPixelsPerFrame] = getparamfromfrm2pix(frm2pix);
ctrlOut = repmat(pixelcontrolstruct,numPixelsPerFrame,1);
edgeOut = false(numPixelsPerFrame,1);

Для каждого пикселя в потоке вычислите, представляет ли это ребро.

for p = 1:numPixelsPerFrame  
   [edgeOut(p),ctrlOut(p)] = edgeDetectSobel(pixIn(p),ctrlIn(p));
end

Создайте deserializer с форматом, совпадающим с тем из сериализатора. Используйте deserializer, чтобы преобразовать поток выходного пикселя во фрейм изображения.

pix2frm = visionhdl.PixelsToFrame(...
      'NumComponents',1,...
      'VideoFormat','custom',...
      'ActivePixelsPerLine',frmActivePixels,...
      'ActiveVideoLines',frmActiveLines);
  
[frmOutput,frmValid] = pix2frm(edgeOut,ctrlOut);
if frmValid
    figure
    imshow(frmOutput, 'InitialMagnification',300)
    title 'Output Image'
end

Алгоритмы

Этот объект реализует алгоритмы, описанные на странице с описанием блока Edge Detector.

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