Свертка массива

Чем отличаются эти алгоритмы свертки?

Зачем y=0 а также y<1, x = 0; x < 1 и другие y=1 а также y <-1, x < - 1,

for(int y = 0; y < grey.rows; y++)
for(int x = 0; x < grey.cols; x++)
dst.at<uchar>(y,x) = 0;

Это вторая свертка:

for(int y = 1; y < grey.rows - 1; y++){
for(int x = 1; x < grey.cols - 1; x++)

1

Решение

Первый цикл не является «сверточным», так как операция присваивания имеет «ядро» размера 1. Второй пример кажется использовать ядро ​​размером 3, поэтому для работы ему нужно 3 пикселя: prev / curr / next (вот почему for петли «короче»)

1

Другие решения

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

Во вторых двух петлях свертка включает в себя сверточное ядро это 3×3, поэтому код в цикле будет ссылаться на элементы, начиная с dst.at<uchar>(y-1 , x-1) в dst.at<uchar>(y+1 , x+1),

Таким образом, ядро ​​не может быть оценено по границам, оно только начинается с пикселей, размещенных от 1 вместо 0, и заканчивается до n-2 вместо n-1.

1

По вопросам рекламы [email protected]