Это действительно оператор Prewitt .
После индексации в src
(входное изображение) с srcStride
числом элементов массива, которое нужно пропустить, чтобы обратиться к следующему соседу в y-директиве, можно увидеть, что h
берет элементы из src
в следующем порядке и со следующими весами:
-1/6 0 1/6
-1/6 0 1/6
-1/6 0 1/6
Это соответствует свертке со следующим ядром (помните, что свертка отражает ядро):
| 1 0 -1 |
| 1 0 -1 | / 6
| 1 0 -1 |
Это снова соответствует двум извилинам
h = src * ( [1 0 -1] / 2 ) * ( [1 1 1]^T / 3 )
То есть он применяет производный фильтр (центральную разность) по горизонтали и равномерный сглаживающий фильтр по вертикали.
Обратите внимание, что фильтр равномерного сглаживания имеет некоторые очень плохие качества (он будет отображать знак некоторых частотных компонентов и, как правило, плохо справляется с сглаживанием), поэтому всегда лучше использовать оператор Собеля (который использует треугольный сглаживающий фильтр) или предпочтительно градиенты Гаусса .