Конволюцията се използва за много неща като изчисляване на производни, откриване на ръбове, прилагане на замъглявания и т.н. и всичко това се прави с помощта на „ядро на конволюция“. Конволюционното ядро е много малка матрица и в тази матрица всяка клетка има число, а също и опорна точка.
Точката на закрепване се използва за познаване на позицията на ядрото по отношение на изображението. Започва в горния ляв ъгъл на изображението и се движи последователно върху всеки пиксел. Ядрото припокрива няколко пиксела на всяка позиция в изображението. Всеки пиксел, който се припокрива, се умножава и след това се добавя. И сумата се задава като стойността на текущата позиция.
Конволюцията е процесът, при който всеки елемент от изображението се добавя към неговите локални съседи и след това се претегля от ядрото. Свързано е с форма на математическа конволюция.
В Convolution матрицата не извършва традиционно умножение на матрици, но се обозначава с *.
Да предположим, че има две 3x3 матрици, едната е ядро, а другата е изображение. При конволюцията редовете и колоните на ядрото се обръщат и след това се умножават и след това се извършва сумиране. Елементите, които присъстват в центъра на матрицата, т.е. в [2,2] на изображението, ще бъдат претеглена комбинация от матрицата на изображението и теглата ще бъдат дадени от ядрото. По същия начин всички останали елементи на матрицата ще бъдат претеглени и след това теглата ще бъдат изчислени.
Следва псевдокод за описание на процеса на навиване:
For each image row in input image: For each pixel in image row: Set accumulator to zero For each kernel row in kernel: For each element in kernel row: If element position corresponding* to pixel position then Multiply element value corresponding*to pixelvalue Add result to accumulator Endif Set output image pixel to accumulator
Конволюцията може да се изчисли с помощта на множество for цикли. Но използването на for цикли причинява много повтарящи се изчисления, а също така размерът на изображението и ядрото се увеличава. С помощта на техниката на дискретно преобразуване на Фурие изчисляването на конволюцията може да се извърши бързо. При тази техника цялата операция на навиване се преобразува в просто умножение.
При конволюцията проблемът възниква, когато ядрото е близо до ръба или ъглите, защото ядрото е двуизмерно.
За да се преодолеят тези проблеми, могат да се направят следните неща:
- Единиците могат да бъдат игнорирани
- Допълнителни пиксели могат да бъдат създадени близо до краищата.
Допълнителни пиксели могат да бъдат създадени по следните начини:
- Дублиран краен пиксел.
- Отразете ръбове
- Пикселите могат да се копират от другия край.