logo

Koncept konvolucije

Konvolucija se uporablja za številne stvari, kot je izračun izpeljank, zaznavanje robov, uporaba zamegljenosti itd., in vse to se izvaja z uporabo 'konvolucijskega jedra'. Konvolucijsko jedro je zelo majhna matrika in v tej matriki ima vsaka celica številko in tudi sidrišče.

Sidrna točka se uporablja za poznavanje položaja jedra glede na sliko. Začne se v zgornjem levem kotu slike in se zaporedno pomika na vsako slikovno piko. Jedro prekriva nekaj slikovnih pik na vsakem mestu na sliki. Vsaka slikovna pika, ki se prekriva, se pomnoži in nato doda. In vsota je nastavljena kot vrednost trenutne pozicije.

primerek v Javi
Koncept konvolucije

Konvolucija je postopek, v katerem je vsak element slike dodan svojim lokalnim sosedom, nato pa ga jedro uteži. Povezan je z obliko matematične konvolucije.

V Convolution matrika ne izvaja tradicionalnega množenja matrik, ampak je označena z *.

Recimo, da obstajata dve matriki 3x3, ena je jedro, druga pa del slike. Pri konvoluciji se vrstice in stolpci jedra obrnejo in nato pomnožijo, nato pa se izvede seštevanje. Elementi, ki so prisotni v središču matrike, tj. v [2,2] slike, bodo utežena kombinacija matrike slike, uteži pa bo podalo jedro. Podobno bodo uteženi vsi drugi elementi matrike, nato pa bodo uteži izračunane.

Sledi psevdo koda za opis procesa konvolucije:

tipkopis vsak
 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 

Konvolucijo je mogoče izračunati z uporabo več for zank. Toda uporaba zank for povzroči veliko ponavljajočih se izračunov, povečata pa se tudi velikost slike in jedra. Z uporabo tehnike diskretne Fourierove transformacije je mogoče hitro izračunati konvolucijo. Pri tej tehniki se celotna operacija konvolucije pretvori v preprosto množenje.

Pri konvoluciji se težava pojavi, ko je jedro blizu roba ali vogalov, ker je jedro dvodimenzionalno.

Za premagovanje teh težav je mogoče narediti naslednje:

  1. Ene je mogoče prezreti
  2. Dodatne slikovne pike je mogoče ustvariti ob robovih.

Dodatne slikovne pike je mogoče ustvariti na naslednje načine:

  1. Podvojeni robni piksel.
  2. Odsev robov
  3. Piksle je mogoče kopirati z drugega konca.