visionhdl.Opening

Морфологическое открытие бинарных пиксельных данных

Описание

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

Этот объект использует пиксельный интерфейс потоковой передачи со структурой для сигналов управления кадром. Этот интерфейс включает объекту действовать независимо от размера изображения и формата, и соединиться с другими объектами Vision HDL Toolbox™. Объект принимает и возвращает скалярное пиксельное значение. Объект принимает и возвращает управляющие сигналы как структуру, содержащую пять сигналов. Управляющие сигналы указывают на валидность каждого пикселя и его местоположения в системе координат. Чтобы преобразовать пиксельную матрицу в пиксельный поток и управляющие сигналы, используйте visionhdl.FrameToPixels объект. Для полного описания интерфейса смотрите Пиксельный Интерфейс Потоковой передачи.

Примечание

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

Конструкция

O = visionhdl.Opening возвращает Системный объект, O, это выполняет морфологическое открытие на бинарном пиксельном потоке.

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

Свойства

Neighborhood

Пиксельное окружение в виде вектора или матрицы 1s и 0s.

Окружения поддержки объектов до 32×32 пиксели. Чтобы использовать элемент структурирования, задайте Neighborhood как getnhood(strel(shape)).

Когда вы используете мультипиксельный вход вектора, район должен составить по крайней мере два пикселя в каждой размерности.

Значение по умолчанию: ones(3,3)

LineBufferSize

Задайте степень двойки, которая размещает количество активных пикселей в одной горизонтальной линии.

Выберите степень двойки, которая размещает количество активных пикселей в горизонтальной линии. Если вы задаете значение, которое не является степенью двойки, объект использует следующую самую большую степень двойки. Объект выделяет (neighborhood lines – 1)-by-LineBufferSize ячейки памяти, чтобы сохранить пиксели.

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

PaddingMethod

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

  • 'Constant' — Объект заполняет изображение единицами для операции эрозии и нулями для операции расширения. Эти значения предотвращают открытие на контурах активной системы координат.

  • 'None' — Исключите дополнительную логику. Объект не устанавливает пиксели вне фрейма изображения ни к какому конкретному значению. Эта опция уменьшает аппаратные ресурсы, используемые объектом и очищением, требуемым между системами координат, но влияет на точность выходных пикселей в ребрах системы координат. Чтобы обеспечить пиксельную потоковую синхронизацию, выходная система координат одного размера с входным кадром. Однако избегать использования пикселей, вычисленных от неопределенных дополнительных значений, маски от KernelSize/2 пиксели вокруг ребра системы координат для нисходящих операций. Для получения дополнительной информации смотрите Пропускную способность Увеличения с Дополнением Ни одного.

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

Методы

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

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

Примеры

свернуть все

Выполните морфологический открытый на изображении миниатюр.

Загрузите исходное изображение из файла. Выберите фрагмент изображения, которое совпадает с желаемым тестовым размером. Это исходное изображение содержит uint8 значения интенсивности пикселей. Примените порог, чтобы преобразовать в бинарные пиксельные данные.

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

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

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

Создайте объект фильтра.

 mopen = visionhdl.Opening( ...
          'Neighborhood',ones(5,5));

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

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

[pixIn,ctrlIn] = frm2pix(frmInput);

Подготовьтесь обрабатывать пиксели путем предварительного выделения выходных векторов.

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

Для каждого пикселя в заполненной системе координат вычислите превращенное значение. Контролируйте управляющие сигналы определить задержку объекта. Задержка настройки зависит от количества активных пикселей в линии и размере окружения

foundValIn = false;
foundValOut = false;
for p = 1:numPixelsPerFrame  
    if (ctrlIn(p).valid && foundValIn==0)
        foundValIn = p;
    end
    [pixOut(p),ctrlOut(p)] = mopen(pixIn(p),ctrlIn(p));
    if (ctrlOut(p).valid && foundValOut==0)
        foundValOut = p;
    end
end
sprintf('object latency is %d cycles',foundValOut-foundValIn)
ans = 
'object latency is 368 cycles'

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

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

Алгоритмы

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

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

Для просмотра документации необходимо авторизоваться на сайте