visionhdl. BilateralFilter

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

Описание

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

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

  • Различие в интенсивности от окружения сосредотачивает значение

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

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

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

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

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.

Создание

Синтаксис

filt2d = visionhdl.BilateralFilter(Name,Value)

Описание

пример

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

Например:

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

Свойства

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

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

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

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

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

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

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

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

Метод для дополнения контура входного изображения.

  • Constant — Интерпретируйте пиксели вне фрейма изображения как наличие постоянного значения.

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

  • Symmetric — Заполните входную матрицу ее зеркальным отображением.

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

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

Зависимости

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

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

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

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

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

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

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

  • 'Same as first input'' — Наборы тип данных коэффициентов, чтобы совпадать с типом данных аргумента pixelIn метода step.

Тип данных для коэффициентов фильтра, заданных как 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)

Описание

пример

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

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

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

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

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

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

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

Управляющие сигналы сопроводительный пиксельный поток, заданный как структура, содержащая пять сигналов logical. Сигналы описывают валидность пикселя и местоположение пикселя в кадре. Смотрите Пиксельную Управляющую структуру.

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

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

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

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

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

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

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

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

release(obj)

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

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

Примеры

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

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

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