Градиенты изображения
Пример
В этом примере методы оценки градиента сравниваются в плане точности, с которой оценивается ориентация градиента.
using Images
values = LinRange(-1,1,128);
w = 1.6*pi;
## Определим функцию синусоидальной дифракционной решетки, f(x,y) = sin( (w*x)^2 + (w*y)^2 ),
## вместе с ее точными частными производными.
I = [sin( (w*x)^2 + (w*y)^2 ) for y in values, x in values];
Ix = [2*w*x*cos( (w*x)^2 + (w*y)^2 ) for y in values, x in values];
Iy = [2*w*y*cos( (w*x)^2 + (w*y)^2 ) for y in values, x in values];
## Определим точную ориентацию градиентов.
direction_true = atan.(Iy./Ix);
for kernelfunc in (KernelFactors.prewitt, KernelFactors.sobel,
KernelFactors.ando3, KernelFactors.scharr,
KernelFactors.bickley)
## Оценим градиенты и их ориентацию.
Gy, Gx = imgradients(I,kernelfunc, "replicate");
direction_estimated = atan.(Gy./Gx);
## Определим среднее абсолютное отклонение между оценочной и истинной
## ориентациями. Значения на границе игнорируются, так как предполагается, что они
## ошибочные.
error = mean(abs.(direction_true[2:end-1,2:end-1] -
direction_estimated[2:end-1,2:end-1]));
error = round(error, digits=5);
println("Using \$kernelfunc results in a mean absolute deviation of \$error")
end
Результат выполнения этого кода:
Using ImageFiltering.KernelFactors.prewitt results in a mean absolute deviation of 0.01069
Using ImageFiltering.KernelFactors.sobel results in a mean absolute deviation of 0.00522
Using ImageFiltering.KernelFactors.ando3 results in a mean absolute deviation of 0.00365
Using ImageFiltering.KernelFactors.scharr results in a mean absolute deviation of 0.00126
Using ImageFiltering.KernelFactors.bickley results in a mean absolute deviation of 0.00038
Параметр kernelfun
Выбрать конечно-разностную схему можно с помощью параметра kernelfun
. С помощью параметра border
можно также указать, как следует поступать с пикселями на границе изображения.
Варианты для kernelfun
Как правило, значением kernelfun
может быть любая функция, соответствующая следующему интерфейсу:
kernelfun(extended::NTuple{N,Bool}, d) -> kern_d,
где kern_d
— это ядро для получения производной по -му измерению -мерного массива. Параметр extended[i]
имеет значение true, если изображение имеет размер больше 1 по измерению . В параметре kern_d
можно передать плотное или разложенное ядро, причем если ядро является разделяемым, рекомендуется разложенное представление.
Ниже описываются некоторые допустимые варианты kernelfun
.
KernelFactors.prewitt
В варианте prewit [3] градиент вычисляется на основе следующих ядер:
См. также описание функций KernelFactors.prewitt
и Kernel.prewitt
.
KernelFactors.sobel
В варианте sobel [4] задаются следующие ядра:
См. также описание функций KernelFactors.sobel
и Kernel.sobel
.
KernelFactors.ando3
В варианте ando3 [5] задаются следующие ядра:
См. также описание функций KernelFactors.ando3
и Kernel.ando3
; KernelFactors.ando4
и Kernel.ando4
; KernelFactors.ando5
и Kernel.ando5
.
KernelFactors.scharr
В варианте scharr [6] задаются следующие ядра:
См. также описание функций KernelFactors.scharr
и Kernel.scharr
.
KernelFactors.bickley
В варианте bickley [7,8] задаются следующие ядра:
См. также описание функций KernelFactors.bickley
и Kernel.bickley
.
Варианты для border
С помощью аргумента border
указывается способ дополнения для экстраполяции изображения за пределами его исходных границ. Для иллюстрации результаты дополнения с использованием каждого варианта показаны на примере изображения, состоящего из строки из шести пикселей, которые следуют по алфавиту:
"circular"
Пиксели границы переносятся в противоположную сторону. Например, при обращении по индексам за пределами левой границы возвращаются значения начиная с правой границы.
Подробные сведения
Для понимания различий между методами оценки градиента следует отличать (1) непрерывное аналоговое изображение со скалярными значениями x_1,x_2 \in \mathbb{R}
, и (2) его дискретную цифровую реализацию
Аналоговое изображение
Градиент непрерывного аналогового изображения
где
Цифровое изображение
На практике мы получаем цифровое изображение
Простым способом аппроксимации частных производных является использование центрально-разностных формул
и
Однако центрально-разностные формулы очень чувствительны к шуму. При работе с зашумленными данными изображения получить более точную аппроксимацию частных производных можно с помощью подходящего взвешенного сочетания соседних уровней интенсивности на изображении. Взвешенное сочетание можно представить как операцию дискретной свертки между изображением и ядром, которое описывает требуемые веса. В частности, если
Ядро также часто называют маской или сверточной матрицей.
Весовые схемы и погрешность аппроксимации
От выбора весов зависит величина погрешности аппроксимации и изотропность конечно-разностной схемы. Конечно-разностная схема является изотропной, если погрешность аппроксимации не зависит от ориентации системы координат, или анизотропной, если погрешность аппроксимации отклоняется в каком-либо направлении [2]. В случае с непрерывным аналоговым изображением величина градиента будет инвариантной при повороте системы координат, но на практике при конечном множестве дискретных точек получить идеальную изотропность невозможно. Поэтому конечно-разностная схема обычно считается изотропной, если начальный член погрешности в аппроксимации не имеет предпочтительных направлений.
Большинство конечно-разностных схем, используемых при обработке изображений, основаны на ядрах
где
Разделяемые ядра
Ядро называется разделяемым, если оно может быть выражено как свертка двух одномерных фильтров. При матричном представлении ядра разделяемость означает, что матрицу ядра можно записать как внешнее произведение двух векторов. Разделяемые ядра дают вычислительные преимущества, так как вместо двухмерной свертки можно выполнить последовательность одномерных.
Справочные материалы
-
B. Jahne, Digital Image Processing (5th ed.). Springer Publishing Company, Incorporated, 2005. 10.1007/3-540-27563-0
-
M. Patra and M. Karttunen, Stencils with isotropic discretization error for differential operators, Numer. Methods Partial Differential Eq., vol. 22, pp. 936—953, 2006. doi:10.1002/num.20129
-
J. M. Prewitt, Object enhancement and extraction, Picture processing and Psychopictorics, vol. 10, no. 1, pp. 15—19, 1970.
-
P.-E. Danielsson and O. Seger, Generalized and separable sobel operators, in Machine Vision for Three-Dimensional Scenes, H. Freeman, Ed. Academic Press, 1990, pp. 347—379. doi:10.1016/b978-0-12-266722-0.50016-6
-
S. Ando, Consistent gradient operators, IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 22, no.3, pp. 252—265, 2000. doi:10.1109/34.841757
-
H. Scharr and J. Weickert, An anisotropic diffusion algorithm with optimized rotation invariance, Mustererkennung 2000, pp. 460—467, 2000. doi:10.1007/978-3-642-59802-9_58
-
A. Belyaev, Implicit image differentiation and filtering with applications to image sharpening, SIAM Journal on Imaging Sciences, vol. 6, no. 1, pp. 660—679, 2013. doi:10.1137/12087092x
-
W. G. Bickley, Finite difference formulae for the square lattice, The Quarterly Journal of Mechanics and Applied Mathematics, vol. 1, no. 1, pp. 35—42, 1948. doi:10.1093/qjmam/1.1.35