Документация Engee

ImageFiltering.jl

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

Ниже перечислены основные функции, предоставляемые пакетом.

Функция Назначение

imfilter

Фильтрует одно-, двух- или многомерный массив img с ядром, вычисляя их корреляцию.

imfilter!

Фильтрует массив img с ядром kernel, вычисляя их корреляцию, и сохраняет результат в imgfilt.

mapwindow

Применяет функцию к скользящим окнам img.

mapwindow!

Вариант функции mapwindow с предварительным выделением памяти для результата.

imgradients

Оценивает градиент изображения img в направлении первого и второго измерений во всех точках изображения с использованием ядра.

padarray

Создает дополненное изображение на основе массива img и спецификации границы.

kernelfactors

Подготавливает разложенное ядро для фильтрации.

findlocalminima

Возвращает координаты элементов, значения которых меньше, чем у всех смежных с ними элементов.

findlocalmaxima

Возвращает координаты элементов, значения которых больше, чем у всех смежных с ними элементов.

Стандартные ядра (фильтры) содержатся в модулях Kernel и KernelFactors.

При обработке изображений и реализации компьютерного зрения часто приходится вычислять градиенты (производные) изображения, для чего есть специальная функция imgradients.

Примеры

Самая часто используемая для фильтрации функция — imfilter. Вот простой пример линейной фильтрации:

julia> using ImageFiltering, TestImages

julia> img = testimage("mandrill");

julia> imgg = imfilter(img, Kernel.gaussian(3));

julia> imgl = imfilter(img, Kernel.Laplacian());

При отображении эти три изображения выглядят так:

filterintro

С помощью функции padarray можно добавлять (или удалять) элементы на границах изображения, используя различные методы для генерирования новых пикселей. В этом примере добавляются пурпурные пиксели сверху, слева, снизу и справа:

julia> using ImageFiltering, TestImages

julia> img = testimage("mandrill")

julia> padarray(img, Fill(colorant"purple", (20, 40), (60, 80)))
введение в дополнение

Возможность: произвольные операции в скользящих окнах

Этот пакет также экспортирует функцию mapwindow, которая позволяет передавать произвольную функцию для работы со значениями в скользящем окне.

Для некоторых функций (в настоящее время это функция extrema) mapwindow предлагает оптимизированные реализации.

Возможность: автоматический выбор КИХ или БПФ

Для линейной фильтрации с конечной импульсной характеристикой можно выбрать прямой алгоритм или алгоритм на основе быстрого преобразования Фурье (FFT). По умолчанию алгоритм выбирается в зависимости от размера ядра. Его также можно указать вручную с помощью Algorithm.FFT() или Algorithm.FIR().

Возможность: многопоточность

При запуске Julia с параметром JULIA_NUM_THREADS=n (где n > 1) КИХ-фильтрация по умолчанию будет выполняться в несколько потоков. Управлять работой алгоритма можно путем указания ресурса согласно определению в ComputationalResources. Например, при вызове imfilter(CPU1(Algorithm.FIR()), img, ...) вычисление будет производиться только в одном потоке.

Возможность: модели

Подмодуль ImageFilter.Models предоставляет готовые модели, связанные с изображениями, и их решатели, которые можно применять для множества задач обработки изображений.

Например, функция solve_ROF_PD() использует прямодвойственный метод и возвращает сглаженную версию изображения с использованием фильтрации Рудина-Ошера-Фатеми (ROF), более известной как сглаживание или регуляризация методом полной вариации (TV).