Изображение можно рассматривать как функцию интенсивности от двух переменных. Эту функцию можно дифференцировать, результат называется производной изображения. Для дискретной функции частные производные заменяются разностями изменения значений в окрестности пикселя.
Производная изображения может быть вычислена с помощью небольших свёрточных фильтров размера 2 × 2 или 3 × 3, таких как дискретный оператор Лапласа, операторы Собеля, Робертса и Прюитт. Однако, маска большего размера обычно даёт лучшее приближение производной, и примерами таких фильтров являются гауссовы производные и фильтры Габора. Иногда необходимо удалить высокочастотный шум и это можно учесть в фильтре, так что гауссово ядро будет действовать как полосовой фильтр. Использование фильтров Габора в обработке изображений мотивировано некоторыми их сходствами с восприятием в зрительной системе человека.
Значение пикселя производной вычисляется как свёртка
где — ядро производной, — значения пикселей в области изображения, а — оператор свёртки.
Производные Собеля Ядра производных, известные как оператор Собеля определеный следующим образом для и направлений соответственно:
где означает 2-мерную операцию свёртки.
Этот оператор является и может быть разложен на произведение интерполяционного и дифференцирующего ядер, так что , например, может быть записано как
Производные Фарида и Симончелли Фарид и Симончелли предложили использовать пару ядер — одно для интерполяции, другое для дифференцирования (сравните с фильтром Собеля выше). Эти ядра имеют фиксированный размер 5 x 5 и 7 x 7 и оптимизированы таким образом, чтобы преобразование Фурье аппроксимировало правильное соотношение производных.
В коде Matlab так называемый 5-точечный фильтр — это k = [0,030320 0,249724 0,439911 0,249724 0,030320]; d = [0,104550 0,292315 0,000000 -0,292315 -0,104550]; d2 = [0,232905 0,002668 -0,471147 0,002668 0,232905]; а 7-точечный фильтр — k = [ 0,004711 0,069321 0,245410 0,361117 0,245410 0,069321 0,004711]; d = [ 0,018708 0,125376 0,193091 0,000000 -0,193091 -0,125376 -0,018708]; d2 = [ 0,055336 0,137778 -0,056554 -0,273118 -0,056554 0,137778 0,055336];
Например, производные первого порядка можно вычислить в Matlab с помощью свёртки следующим образом:
Iu = conv2(d, k, im, 'same'); % вертикальная производная (Y) Iv = conv2(k, d, im, 'same'); % горизонтальная производная (X)
Фарид и Симончелли вывели коэффициенты первой производной, которые более точны по сравнению с приведёнными выше. Однако последние согласуются с интерполятором второй производной и, следовательно, лучше использовать, если требуются как первая, так и вторая производные. Если же нужна только первая производная, применяют оптимальные коэффициенты первой производной; более подробную информацию можно найти в их статье.
Производные Хаста Хаст представил производные фильтры на основе произвольных кубических сплайнов. Он продемонстрировал, как производные первого и второго порядка могут быть вычислены более точно с использованием кубических или тригонометрических сплайнов. Эффективные производные фильтры должны иметь нечётную длину, чтобы производная вычислялась для центрального пикселя. Однако любой кубический фильтр настраивается по четырём точкам выборки, что приводит к центру, расположенному между пикселями. Эта проблема решается с помощью двойной фильтрации, в результате чего получаются фильтры размером 7x7. Идея заключается в том, чтобы сначала выполнить фильтрацию путём интерполяции, чтобы получить интерполированные значения между пикселями, после чего процедура повторяется с использованием производных фильтров, где центральное значение теперь приходится на центры пикселей. Это легко доказывается ассоциативным законом для свёртки
Таким образом, свёрточное ядро для вычисления производной с использованием интерполирующего ядра и дифференцирующего ядра становится
Свертка коммутативна, поэтому порядок двух ядер не имеет значения и есть возможность вставить ядро производной второго порядка, как и производной первого порядка. Эти ядра выводятся из того факта, что любая сплайн-поверхность может быть подогнана под квадратную область пикселей, в отличие от поверхностей Безье. Хаст доказывает, что такая поверхность может быть реализована как разделимая свёртка.
,
где — базовая матрица сплайна, и — векторы, содержащие переменные и , такие что
Ядра свёрток можно теперь записать как
Производные первого порядка в центральном пикселе тогда вычисляются как
и
Аналогично, для ядер производной второго порядка
и
Кубический сплайн-фильтр оценивается в его центре , поэтому
Аналогично, производные первого порядка становятся:
И таким же образом производные второго порядка равны
Любой кубический фильтр может быть применён и использован для вычисления производных изображения с помощью приведённых выше уравнений, таких как кривые Безье, сплайны Эрмита или B-сплайны.
Пример ниже в Matlab использует для вычисления производных
M = [1,-3,3,-1; -1,4,-5,2; 0,1,0,-1; 0,0,2,0] * 0.5; u = [0.125;0.25;0.5;1]; up = [0.75;1;1;0]; d = up'*M; k = u'*M; Iu = conv2(conv(d, k), conv(k, k), im,'same'); % вертикальная производная (Y) Iv = conv2(conv(k, k), conv(d, k), im,'same'); % горизонтальная производная (X)
Другие подходы Поворачивающиеся фильтры могут использоваться для вычисления производных. Кроме того, Савицкий и Голэй предлагают подход сглаживания методом наименьших квадратов, который может быть использован для вычисления производных, а Лу и др. подробно рассматривают этот подход. Шарр показывает, как создавать фильтры производных путём минимизации ошибки в частотной области, а Яне и др. более подробно обсуждают принципы , включая фильтры производных.
См. также Градиент изображения
Примечания
Ссылки derivative5.m Farid and Simoncelli: 5-Tap 1st and 2nd discrete derivatives. derivative7.m Farid and Simoncelli: 7-Tap 1st and 2nd discrete derivatives kernel.m Hast: 1st and 2nd discrete derivatives for Cubic splines, Catmull-Rom splines, Bezier splines, B-Splines and Trigonometric splines.
Категория:Обработка изображений Категория:Обобщённые производные