visionhdl.BilateralFilter

Выполните 2-D фильтрацию потока пикселей

Описание

The visionhdl.BilateralFilter объект фильтрует изображения при сохранении ребер. Некоторые применения двусторонней фильтрации являются обесцениванием при сохранении ребер, отделением текстуры от освещения и карикатурой для улучшения ребер. Фильтр заменяет каждый пиксель в центре окрестности средним значением, которое вычисляется с помощью пространственных и интенсивных Гауссовых фильтров. Объект определяет коэффициенты фильтра из:

  • Пространственное расположение по соседству (подобно Гауссову фильтру размытия)

  • Интенсивность, различие от значения центра окрестности

Объект предоставляет два стандартных параметра отклонения для независимого управления пространственными и коэффициентами интенсивности.

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

  1. Создайте visionhdl.BilateralFilter Объекту и установите его свойства.

  2. Вызывайте объект с аргументами, как будто это функция.

Дополнительные сведения о работе системных объектов см. в разделе «Что такое системные объекты?».

Создание

Описание

пример

filt2d = visionhdl.BilateralFilter(Name,Value) возвращает двухсторонний фильтр System object™. Задайте свойства с помощью пар "имя-значение". Заключайте каждое имя свойства в одинарные кавычки.

Для примера:

filt2d = visionhdl.BilateralFilter('CoefficientsDataType','Custom',...
                      'CustomCoefficientsDataType',numerictype(0,18,17))

Свойства

расширить все

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

Если свойство настраивается, можно изменить его значение в любой момент.

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Использование Системных объектов.

Размер области изображения, используемой для вычисления среднего значения, заданный как N -by N пиксельный квадрат.

Пространственная стандартная цель отклонения, используемая для вычисления коэффициентов для пространственного Гауссова фильтра, заданная как положительное вещественное число. Этот параметр не имеет пределов, но рекомендуемые значения от 0,1 до 10. На верхнем конце распределение становится плоским, и коэффициенты малы. На нижнем конце распределение достигает пиков в центре и имеет небольшие коэффициенты в остальной части окрестности. Эти краевые значения также зависят от размера окрестности и типа данных, используемых для коэффициентов.

Цель стандартного отклонения интенсивности, используемая для вычисления коэффициентов для Гауссова фильтра интенсивности, заданная как положительное вещественное число. Этот параметр не имеет пределов, но рекомендуемые значения от 0,1 до 10. На верхнем конце распределение становится плоским, и коэффициенты малы. На нижнем конце распределение достигает пиков в центре и имеет небольшие коэффициенты в остальной части окрестности. Эти краевые значения также зависят от размера окрестности и типа данных, используемых для коэффициентов.

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

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

  • 'Constant' - Интерпретируйте пиксели вне системы координат изображения как имеющие постоянное значение.

  • 'Replicate' - Повторите значение пикселей на краю изображения.

  • 'Symmetric' - Установите значение пикселей заполнения, чтобы зеркально отобразить ребро изображения.

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

Для получения дополнительной информации об этих методах см. Раздел «Заполнение ребер».

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

Зависимости

Этот параметр применяется, когда вы задаете PaddingMethod на 'Constant'.

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

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

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

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

Метод для определения типа данных коэффициентов фильтра. Коэффициенты обычно требуют типа данных с большей точностью, чем тип входных данных.

  • 'Custom' - Устанавливает тип данных коэффициентов, соответствующий типу данных, заданному в CustomCoefficientsDataType свойство.

  • 'Same as first input''- Устанавливает тип данных коэффициентов, соответствующих типу данных pixelIn аргумент.

Тип данных для коэффициентов фильтра, заданный как numerictype(0,WL,FL), где WL - размер слова, а FL - длина дроби в битах.

Задайте неподписанный тип данных, который может представлять значения менее 1. Коэффициенты обычно требуют типа данных с большей точностью, чем тип входных данных. Объект вычисляет коэффициенты на основе размера окрестности и значений IntensityStdDev и SpatialStdDev. Большие окрестности распространяют Гауссову функцию таким образом, что каждое значение коэффициента меньше. Большее стандартное отклонение уплощает Гауссов так, что коэффициенты являются более равномерными по своей природе, а меньшее стандартное отклонение создает пиковую характеристику.

Примечание

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

Зависимости

Это свойство применяется при установке CoefficientsDataType на 'Custom'.

Метод для определения типа данных выходов пикселей.

  • 'Same as first input''- Устанавливает тип данных выходных пикселей, соответствующий типу данных pixelIn.

  • 'Custom' - Устанавливает тип данных выходных пикселей, чтобы соответствовать типу данных, заданному в CustomOutputDataType свойство.

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

Зависимости

Это свойство применяется при установке OutputDataType на 'Custom'.

Использование

Описание

пример

[pixelOut,ctrlOut] = filt2d(pixelIn,ctrlIn) возвращает отфильтрованное значение пикселя и сопутствующие сигналы управления.

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

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

расширить все

Один пиксель изображения в потоке пикселей, заданный как скалярное значение, представляющее интенсивность. Целочисленные и типы данных с фиксированной точкой размером более 16 битов не поддерживаются.

double и single типы данных поддерживаются для симуляции, но не для генерации HDL-кода.

Типы данных: uint8 | uint16 | int8 | int16 | fi | logical | double | single

Сигналы управления, сопровождающие входной поток пикселей, заданные как pixelcontrol структура, содержащая пять logical сигналы типа данных. Сигналы описывают валидность пикселя и его местоположение в системе координат. Для получения дополнительной информации смотрите Pixel Control Structure.

Типы данных: struct

Выходные аргументы

расширить все

Один пиксель изображения в потоке пикселей, возвращенный как скалярное значение, представляющее интенсивность. Целочисленные и типы данных с фиксированной точкой размером более 16 битов не поддерживаются.

double и single типы данных поддерживаются для симуляции, но не для генерации HDL-кода.

Типы данных: uint8 | uint16 | int8 | int16 | fi | logical | double | single

Сигналы управления, сопровождающие вывод потока пикселей, возвращенные как pixelcontrol структура, содержащая пять logical сигналы типа данных. Сигналы описывают валидность пикселя и его местоположение в системе координат. Для получения дополнительной информации смотрите Pixel Control Structure.

Типы данных: struct

Функции объекта

Чтобы использовать функцию объекта, задайте системный объект в качестве первого входного параметра. Например, чтобы освободить системные ресурсы системного объекта с именем obj, используйте следующий синтаксис:

release(obj)

расширить все

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

Примеры

свернуть все

Загрузите входное изображение и создайте объекты сериализатора и десериализатора.

frmOrig = imread('rice.png');
frmActivePixels = 48;
frmActiveLines = 32;
frmIn = frmOrig(1:frmActiveLines,1:frmActivePixels);
figure
imshow(frmIn,'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);
[~,~,numPixPerFrm] = getparamfromfrm2pix(frm2pix);

pix2frm = visionhdl.PixelsToFrame(...
      'NumComponents',1,...
      'VideoFormat','custom',...
      'ActivePixelsPerLine',frmActivePixels,...
      'ActiveVideoLines',frmActiveLines);

Написание функции, которая создает и вызывает Системный object™. Вы можете сгенерировать HDL из этой функции.

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

function  [pixOut,ctrlOut] = BilatFilt(pixIn,ctrlIn)
%bilatFilt 
% Filters one pixel according to the default spatial and intensity standard
% deviation, 0.5.
% pixIn and pixOut are scalar intensity values.
% ctrlIn and ctrlOut are structures that contain control signals associated
% with the pixel.
% You can generate HDL code from this function.

  persistent filt2d;
  if isempty(filt2d)
    filt2d = visionhdl.BilateralFilter(...
      'CoefficientsDataType','Custom',...
      'CustomCoefficientsDataType',numerictype(0,18,17));
 
  end    
 [pixOut,ctrlOut] = filt2d(pixIn,ctrlIn);
end

Фильтрация изображения осуществляется вызовом функции для каждого пикселя.

pixOutVec = zeros(numPixPerFrm,1,'uint8');
ctrlOutVec = repmat(pixelcontrolstruct,numPixPerFrm,1);

[pixInVec,ctrlInVec] = frm2pix(frmIn);
for p = 1:numPixPerFrm
    [pixOutVec(p),ctrlOutVec(p)] = BilatFilt(pixInVec(p),ctrlInVec(p));
end
[frmOut,frmValid] = pix2frm(pixOutVec,ctrlOutVec);

if frmValid
   figure;
   imshow(frmOut,'InitialMagnification',300)
   title 'Output Image'
end

См. также

Блоки

Объекты

Введенный в R2017b