logo

Concetto di convoluzione

La convoluzione viene utilizzata per molte cose come calcolare le derivate, rilevare i bordi, applicare sfocature ecc. E tutto ciò viene fatto utilizzando un 'kernel di convoluzione'. Un nucleo di convoluzione è una matrice molto piccola e in questa matrice ogni cella ha un numero e anche un punto di ancoraggio.

Il punto di ancoraggio serve per conoscere la posizione del kernel rispetto all'immagine. Inizia dall'angolo in alto a sinistra dell'immagine e si sposta su ciascun pixel in sequenza. Il kernel sovrappone pochi pixel in ciascuna posizione dell'immagine. Ogni pixel sovrapposto viene moltiplicato e quindi sommato. E la somma è impostata come valore della posizione corrente.

Concetto di convoluzione

La convoluzione è il processo in cui ogni elemento dell'immagine viene aggiunto ai suoi vicini locali e quindi viene ponderato dal kernel. È legato a una forma di convoluzione matematica.

In Convoluzione, la matrice non esegue la tradizionale moltiplicazione di matrici ma è denotata con *.

Supponiamo che ci siano due matrici 3x3, una è il kernel e l'altra è un pezzo di immagine. Nella convoluzione, le righe e le colonne del kernel vengono invertite, quindi moltiplicate e quindi viene eseguita la somma. Gli elementi che sono presenti al centro della matrice, cioè in [2,2] dell'immagine, saranno una combinazione ponderata della matrice dell'immagine e i pesi saranno dati dal kernel. Allo stesso modo, tutti gli altri elementi della matrice verranno ponderati e quindi verranno calcolati i pesi.

Di seguito è riportato lo pseudo codice per descrivere il processo di convoluzione:

 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 

La convoluzione può essere calcolata utilizzando più cicli for. Ma l'uso dei cicli for causa molti calcoli ripetuti e aumenta anche la dimensione dell'immagine e del kernel. Utilizzando la tecnica della trasformata discreta di Fourier, il calcolo della convoluzione può essere eseguito rapidamente. In questa tecnica, l'intera operazione di convoluzione viene convertita in una semplice moltiplicazione.

Nella convoluzione, il problema si verifica quando il kernel è vicino al bordo o agli angoli perché il kernel è bidimensionale.

Per superare questi problemi si possono fare le seguenti cose:

  1. Quelli possono essere ignorati
  2. È possibile creare pixel aggiuntivi vicino ai bordi.

È possibile creare pixel aggiuntivi nei seguenti modi:

  1. Pixel del bordo duplicato.
  2. Riflettere i bordi
  3. I pixel possono essere copiati dall'altra parte.