visionhdl.GrayscaleDilation

Морфологическое расширение данных пикселей полутонового цвета

Описание

visionhdl.GrayscaleDilation Осуществляют морфологическое расширение потока значений интенсивности пикселей. Можно задать район, или элемент структурирования, до 32 × 32 пикселей. Для элементов структурирования линий, квадратов или прямоугольников шириной более 8 пикселей объект использует алгоритм Ван Херка, чтобы найти максимальное. Этот алгоритм использует только три компаратора, чтобы найти максимумы всех строк, затем использует дерево сравнения, чтобы найти максимальное значение результатов строк.

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

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

Примечание

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

Конструкция

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

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

Свойства

Neighborhood

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

Объект поддерживает районы до 32 × 32 пикселей. Чтобы использовать элемент структурирования, задайте Neighborhood как getnhood(Набор Image Processing Toolbox) (strel(Набор Image Processing Toolbox) (shape)). Минимальный размер окрестности - матрица 2 × 2 или вектор-столбец 2 × 1. Если окрестность является вектором-строкой, она должна быть шириной не менее 8 столбцов и не содержать нулей.

По умолчанию: ones(5,5)

LineBufferSize

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

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

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

Методы

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

Разрешить изменение значения свойства системного объекта

Примеры

свернуть все

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

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

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

Figure contains an axes. The axes with title Input Image contains an object of type image.

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

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

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

mdilate = visionhdl.GrayscaleDilation( ...
          'Neighborhood',ones(4,4));

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

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

[pixIn,ctrlIn] = frm2pix(frmInput);

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

[~,~,numPixelsPerFrame] = getparamfromfrm2pix(frm2pix);
pixOut = uint8(zeros(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)] = mdilate(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 104 cycles'

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

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

Figure contains an axes. The axes with title Output Image contains an object of type image.

Алгоритмы

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

См. также

| | | (Image Processing Toolbox)

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