Обмен технологиями

C: Краткий обзор функции filter2D

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

в OpenCVfilter2D Функция представляет собой очень мощный инструмент для свертки изображений с применением различных линейных фильтров. Эта функция обрабатывает каждый пиксель изображения и изменяет характеристики изображения путем свертки его с указанным ядром (или фильтром) свертки.Ниже рассказывается оfilter2DПодробное введение функции:

прототип функции

В OpenCVfilter2DПрототип функции следующий:

void cv::filter2D(InputArray src, OutputArray dst, int ddepth, InputArray kernel,  
                  Point anchor = Point(-1,-1), double delta = 0,  
                  int borderType = BORDER_DEFAULT);

Описание параметра

  • источник: Введите изображение.
  • летнее время: Выходное изображение и входное изображение.srcИметь одинаковый размер и количество каналов.
  • глубина : Желаемая глубина выходного изображения (тип данных). Когда он равен -1, это означает, что выходное изображение имеет ту же глубину, что и входное изображение.
  • ядро : Ядро свертки (или фильтр), представляющее собой одноканальную матрицу с плавающей запятой. Эта матрица определяет, как выполнять операции свертки над входным изображением.
  • якорь : точка привязки ядра, которая указывает относительное положение точки фильтра в ядре. Точка привязки должна располагаться внутри ядра; значение по умолчанию (-1,-1) означает, что точка привязки расположена в центре ядра.
  • дельта: необязательное значение, которое будет использоваться при сохранении отфильтрованных пикселей вdstранее добавленные к отфильтрованным пикселям.
  • borderType : метод экстраполяции пикселей, используемый для обработки пикселей за пределами границы изображения. Он определяет, как обрабатываются граничные пиксели, когда ядро ​​свертки превышает границу изображения.Общие варианты включают в себяBORDER_CONSTANTBORDER_REPLICATEBORDER_REFLECTждать.

Принцип работы

filter2D Функция фактически выполняет операцию свертки (хотя технически она вычисляет корреляцию, а не строгую свертку, поскольку переворот ядра не требуется). Операция свертки включает в себя «наложение» ядра свертки на входное изображение, умножение соответствующих элементов каждой подматрицы того же размера, что и ядро ​​свертки, а затем сложение результатов. Этот процесс генерирует новое значение пикселя, которое помещается в соответствующее место выходного изображения. Поскольку ядро ​​свертки скользит по всему входному изображению, этот процесс повторяется до тех пор, пока не будет создано полное выходное изображение.

Сценарии применения

Изменив ядро ​​свертки,filter2DФункции могут достигать различных эффектов обработки изображений, включая, помимо прочего:

  • Повышение резкости изображения: использование определенного ядра свертки с повышением резкости может сделать края изображения более четкими.
  • средний фильтр: использование среднего ядра свертки может уменьшить шум изображения, но может сделать изображение размытым.
  • Гауссов фильтр : Фильтрация по Гауссу — это широко используемый метод сглаживания изображения, который может уменьшить шум изображения, сохраняя при этом информацию о краях.Хотяfilter2DСама функция напрямую не обеспечивает генерацию гауссовских ядер, но может быть переданаgetGaussianKernelфункция генерирует ядро ​​Гаусса и используетfilter2DВыполните фильтрацию по Гауссу.
  • обнаружение края: Путем разработки определенных ядер свертки (таких как оператор Собеля, оператор Лапласа и т. д.) можно обнаружить края изображения.

Образец кода

Ниже приводится использованиеfilter2DПример кода функции средней фильтрации (версия Python):

#include