ImageFiltering.jl
ImageFiltering поддерживает операции линейной и нелинейной фильтрации массивов с упором на операции, применяемые при обработке изображений.
Ниже перечислены основные функции, предоставляемые пакетом.
Функция | Назначение |
---|---|
Фильтрует одно-, двух- или многомерный массив img с ядром, вычисляя их корреляцию. |
|
Фильтрует массив img с ядром kernel, вычисляя их корреляцию, и сохраняет результат в imgfilt. |
|
Применяет функцию к скользящим окнам img. |
|
Вариант функции |
|
Оценивает градиент изображения img в направлении первого и второго измерений во всех точках изображения с использованием ядра. |
|
Создает дополненное изображение на основе массива img и спецификации границы. |
|
Подготавливает разложенное ядро для фильтрации. |
|
Возвращает координаты элементов, значения которых меньше, чем у всех смежных с ними элементов. |
|
Возвращает координаты элементов, значения которых больше, чем у всех смежных с ними элементов. |
Стандартные ядра (фильтры) содержатся в модулях 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());
При отображении эти три изображения выглядят так:
С помощью функции 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).