visionhdl. Эрозия

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

Описание

visionhdl.Erosion заменяет каждый пиксель на локальный минимум окружения вокруг пикселя. Объект работает с потоком бинарных значений интенсивности.

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

Примечание

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

Конструкция

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

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

Свойства

Neighborhood

Пиксельное окружение, заданное как матрица или вектор единиц и нулей.

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

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

LineBufferSize

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

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

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

Методы

шагСообщите о разрушенном пиксельном значении на основе окружения
Характерный для всех системных объектов
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);

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

 merode = visionhdl.Erosion( ...
          'Neighborhood',ones(2,7));

Сериализируйте тестовое изображение путем вызова объекта сериализатора. 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)] = merode(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 102 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

Алгоритмы

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

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