Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Filtri Passa Basso e Passa Alto | Elaborazione delle Immagini con OpenCV
Fondamenti di Computer Vision

bookFiltri Passa Basso e Passa Alto

Uno dei principali vantaggi della Trasformata di Fourier è che consente di eseguire filtraggio passa-alto e passa-basso.

Dopo aver applicato la Trasformata di Fourier:

dft = np.fft.fft2(image)
dft_shift = np.fft.fftshift(dft)

è necessario creare una maschera di filtraggio

Filtraggio Passa-Basso (Sfocatura)

Un filtro passa-basso rimuove le componenti ad alta frequenza, producendo un'immagine sfocata. Maschera passa-basso:

rows, cols = image.shape 
crow, ccol = rows // 2, cols // 2 

mask = np.zeros((rows, cols), np.uint8)
mask[crow-30:crow+30, ccol-30:ccol+30] = 1
  • rows, cols = image.shape: recupera il numero di righe e colonne dall'immagine in scala di grigi;
  • crow, ccol = rows // 2, cols // 2: calcola le coordinate centrali dell'immagine;
  • mask = np.zeros((rows, cols), np.uint8): crea una maschera di zeri con le stesse dimensioni dell'immagine;
  • mask[crow-30:crow+30, ccol-30:ccol+30] = 1: imposta una regione quadrata 60×60 al centro della maschera a 1, consentendo il passaggio solo delle componenti a bassa frequenza (vicino al centro del dominio delle frequenze) e filtrando i dettagli ad alta frequenza.

Filtro passa-alto (Rilevamento dei bordi)

Un filtro passa-alto rimuove le componenti a bassa frequenza ed esalta i bordi. Maschera passa-alto:

highpass_mask = np.ones((rows, cols), np.uint8)
highpass_mask[crow-5:crow+5, ccol-5:ccol+5] = 0
  • highpass_mask = np.ones((rows, cols), np.uint8): inizializza una maschera di uni con le stesse dimensioni dell'immagine, quindi tutte le frequenze sono inizialmente consentite;
  • highpass_mask[crow-5:crow+5, ccol-5:ccol+5] = 0: imposta a zero un piccolo quadrato 10×10 al centro (regione a bassa frequenza), bloccando di fatto tali frequenze.

Applicazione del filtro

Dopo aver creato la maschera, è necessario applicare un filtro e trasformare la foto nuovamente nel dominio spaziale:

dft_filtered = dft_shift * mask

dft_inverse = np.fft.ifftshift(dft_filtered) # Inverse shifting
image_filtered = np.fft.ifft2(dft_inverse) # Inverse transformation
image_filtered = np.abs(image_filtered) # Remove negative values
  • dft_filtered = dft_shift * mask: applicazione della maschera nel dominio delle frequenze (ad esempio, passa-basso o passa-alto) tramite moltiplicazione elemento per elemento con la DFT traslata dell'immagine;
  • dft_inverse = np.fft.ifftshift(dft_filtered): inversione della traslazione applicata in precedenza per riportare le componenti di frequenza nelle posizioni originali;
  • image_filtered = np.fft.ifft2(dft_inverse): calcolo della Trasformata Inversa di Fourier per convertire i dati filtrati dal dominio delle frequenze a quello spaziale;
  • image_filtered = np.abs(image_filtered): calcolo del valore assoluto per eliminare eventuali componenti immaginarie residue, ottenendo un'immagine filtrata a valori reali.
Compito

Swipe to start coding

Ti viene fornita un'immagine della pecora nella variabile image e un'immagine nel dominio delle frequenze nella variabile dft_shift:

  • Ottieni la forma della matrice image e memorizzala nelle variabili rows e cols;
  • Calcola il punto centrale e memorizzalo in crow e ccol;
  • Definisci low_mask come un array di zeri con forma (rows, cols) e tipo np.uint8;
  • Seleziona la regione centrale 20x20 di low_mask e riempila con 1.
  • Definisci high_mask come un array di uni con forma (rows, cols) e tipo np.uint8;
  • Seleziona la regione centrale 20x20 di high_mask e riempila con 0;
  • Applica low_mask e high_mask a dft_shift e memorizza le frequenze filtrate rispettivamente in lowpass_dft_filtered e highpass_dft_filtered;
  • Esegui la trasformazione inversa per lowpass_dft_filtered:
    • Esegui l'inverso dello shifting e memorizza in lowpass_dft_inverse;
    • Esegui la trasformazione inversa e memorizza l'immagine in image_lowpass;
    • Rimuovi i valori negativi da image_lowpass.
  • Esegui la trasformazione inversa per highpass_dft_inverse:
    • Esegui l'inverso dello shifting e memorizza in lowpass_dft_inverse;
    • Esegui la trasformazione inversa e memorizza l'immagine in image_highpass;
    • Rimuovi i valori negativi da image_highpass.

Soluzione

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 3
single

single

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

close

Awesome!

Completion rate improved to 3.45

bookFiltri Passa Basso e Passa Alto

Scorri per mostrare il menu

Uno dei principali vantaggi della Trasformata di Fourier è che consente di eseguire filtraggio passa-alto e passa-basso.

Dopo aver applicato la Trasformata di Fourier:

dft = np.fft.fft2(image)
dft_shift = np.fft.fftshift(dft)

è necessario creare una maschera di filtraggio

Filtraggio Passa-Basso (Sfocatura)

Un filtro passa-basso rimuove le componenti ad alta frequenza, producendo un'immagine sfocata. Maschera passa-basso:

rows, cols = image.shape 
crow, ccol = rows // 2, cols // 2 

mask = np.zeros((rows, cols), np.uint8)
mask[crow-30:crow+30, ccol-30:ccol+30] = 1
  • rows, cols = image.shape: recupera il numero di righe e colonne dall'immagine in scala di grigi;
  • crow, ccol = rows // 2, cols // 2: calcola le coordinate centrali dell'immagine;
  • mask = np.zeros((rows, cols), np.uint8): crea una maschera di zeri con le stesse dimensioni dell'immagine;
  • mask[crow-30:crow+30, ccol-30:ccol+30] = 1: imposta una regione quadrata 60×60 al centro della maschera a 1, consentendo il passaggio solo delle componenti a bassa frequenza (vicino al centro del dominio delle frequenze) e filtrando i dettagli ad alta frequenza.

Filtro passa-alto (Rilevamento dei bordi)

Un filtro passa-alto rimuove le componenti a bassa frequenza ed esalta i bordi. Maschera passa-alto:

highpass_mask = np.ones((rows, cols), np.uint8)
highpass_mask[crow-5:crow+5, ccol-5:ccol+5] = 0
  • highpass_mask = np.ones((rows, cols), np.uint8): inizializza una maschera di uni con le stesse dimensioni dell'immagine, quindi tutte le frequenze sono inizialmente consentite;
  • highpass_mask[crow-5:crow+5, ccol-5:ccol+5] = 0: imposta a zero un piccolo quadrato 10×10 al centro (regione a bassa frequenza), bloccando di fatto tali frequenze.

Applicazione del filtro

Dopo aver creato la maschera, è necessario applicare un filtro e trasformare la foto nuovamente nel dominio spaziale:

dft_filtered = dft_shift * mask

dft_inverse = np.fft.ifftshift(dft_filtered) # Inverse shifting
image_filtered = np.fft.ifft2(dft_inverse) # Inverse transformation
image_filtered = np.abs(image_filtered) # Remove negative values
  • dft_filtered = dft_shift * mask: applicazione della maschera nel dominio delle frequenze (ad esempio, passa-basso o passa-alto) tramite moltiplicazione elemento per elemento con la DFT traslata dell'immagine;
  • dft_inverse = np.fft.ifftshift(dft_filtered): inversione della traslazione applicata in precedenza per riportare le componenti di frequenza nelle posizioni originali;
  • image_filtered = np.fft.ifft2(dft_inverse): calcolo della Trasformata Inversa di Fourier per convertire i dati filtrati dal dominio delle frequenze a quello spaziale;
  • image_filtered = np.abs(image_filtered): calcolo del valore assoluto per eliminare eventuali componenti immaginarie residue, ottenendo un'immagine filtrata a valori reali.
Compito

Swipe to start coding

Ti viene fornita un'immagine della pecora nella variabile image e un'immagine nel dominio delle frequenze nella variabile dft_shift:

  • Ottieni la forma della matrice image e memorizzala nelle variabili rows e cols;
  • Calcola il punto centrale e memorizzalo in crow e ccol;
  • Definisci low_mask come un array di zeri con forma (rows, cols) e tipo np.uint8;
  • Seleziona la regione centrale 20x20 di low_mask e riempila con 1.
  • Definisci high_mask come un array di uni con forma (rows, cols) e tipo np.uint8;
  • Seleziona la regione centrale 20x20 di high_mask e riempila con 0;
  • Applica low_mask e high_mask a dft_shift e memorizza le frequenze filtrate rispettivamente in lowpass_dft_filtered e highpass_dft_filtered;
  • Esegui la trasformazione inversa per lowpass_dft_filtered:
    • Esegui l'inverso dello shifting e memorizza in lowpass_dft_inverse;
    • Esegui la trasformazione inversa e memorizza l'immagine in image_lowpass;
    • Rimuovi i valori negativi da image_lowpass.
  • Esegui la trasformazione inversa per highpass_dft_inverse:
    • Esegui l'inverso dello shifting e memorizza in lowpass_dft_inverse;
    • Esegui la trasformazione inversa e memorizza l'immagine in image_highpass;
    • Rimuovi i valori negativi da image_highpass.

Soluzione

Switch to desktopCambia al desktop per esercitarti nel mondo realeContinua da dove ti trovi utilizzando una delle opzioni seguenti
Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 3
single

single

some-alt