exponenta event banner

visionhdl. BilateralFilter

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

Описание

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 на 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 сигналы типа данных. Сигналы описывают достоверность пикселя и его местоположение в кадре. Дополнительные сведения см. в разделе Структура пиксельного управления.

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

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

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

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

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

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

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

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

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

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

release(obj)

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

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

Примеры

свернуть все

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

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™. Из этой функции можно создать ЛПВП.

Примечание.Синтаксис этого объекта выполняется только в 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