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

Scorri per mostrare il menu

book
Filtri Passa Basso e Passa Alto

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

Dopo aver applicato la Trasformata di Fourier:

è 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: retrieves the number of rows and columns from the grayscale image;

  • crow, ccol = rows // 2, cols // 2: computes the center coordinates of the image;

  • mask = np.zeros((rows, cols), np.uint8): creates a mask of zeros with the same dimensions as the image;

  • mask[crow-30:crow+30, ccol-30:ccol+30] = 1: sets a 60×60 square region at the center of the mask to 1, allowing only the low-frequency components (near the center of the frequency domain) to pass through while filtering out high-frequency details.

Filtraggio 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): inizializza una maschera di uni con le stesse dimensioni dell'immagine, il che significa che 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: applica la 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): annulla la traslazione applicata in precedenza per riportare le componenti di frequenza nelle posizioni originali;

  • image_filtered = np.fft.ifft2(dft_inverse): calcola la Trasformata Inversa di Fourier per convertire i dati filtrati dal dominio delle frequenze a quello spaziale;

  • image_filtered = np.abs(image_filtered): prende il valore assoluto per rimuovere 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 salvala nelle variabili rows e cols;
  • Calcola il punto centrale e salvalo 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 salva le frequenze filtrate rispettivamente in lowpass_dft_filtered e highpass_dft_filtered;
  • Esegui la trasformazione inversa per lowpass_dft_filtered:
    • Esegui l'inverso dello shift e salva in lowpass_dft_inverse;
    • Esegui la trasformazione inversa e salva l'immagine in image_lowpass;
    • Rimuovi i valori negativi da image_lowpass.
  • Esegui la trasformazione inversa per highpass_dft_inverse:
    • Esegui l'inverso dello shift e salva in lowpass_dft_inverse;
    • Esegui la trasformazione inversa e salva 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

Chieda ad AI

expand
ChatGPT

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

book
Filtri Passa Basso e Passa Alto

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

Dopo aver applicato la Trasformata di Fourier:

è 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: retrieves the number of rows and columns from the grayscale image;

  • crow, ccol = rows // 2, cols // 2: computes the center coordinates of the image;

  • mask = np.zeros((rows, cols), np.uint8): creates a mask of zeros with the same dimensions as the image;

  • mask[crow-30:crow+30, ccol-30:ccol+30] = 1: sets a 60×60 square region at the center of the mask to 1, allowing only the low-frequency components (near the center of the frequency domain) to pass through while filtering out high-frequency details.

Filtraggio 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): inizializza una maschera di uni con le stesse dimensioni dell'immagine, il che significa che 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: applica la 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): annulla la traslazione applicata in precedenza per riportare le componenti di frequenza nelle posizioni originali;

  • image_filtered = np.fft.ifft2(dft_inverse): calcola la Trasformata Inversa di Fourier per convertire i dati filtrati dal dominio delle frequenze a quello spaziale;

  • image_filtered = np.abs(image_filtered): prende il valore assoluto per rimuovere 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 salvala nelle variabili rows e cols;
  • Calcola il punto centrale e salvalo 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 salva le frequenze filtrate rispettivamente in lowpass_dft_filtered e highpass_dft_filtered;
  • Esegui la trasformazione inversa per lowpass_dft_filtered:
    • Esegui l'inverso dello shift e salva in lowpass_dft_inverse;
    • Esegui la trasformazione inversa e salva l'immagine in image_lowpass;
    • Rimuovi i valori negativi da image_lowpass.
  • Esegui la trasformazione inversa per highpass_dft_inverse:
    • Esegui l'inverso dello shift e salva in lowpass_dft_inverse;
    • Esegui la trasformazione inversa e salva 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
Switch to desktopCambia al desktop per esercitarti nel mondo realeContinua da dove ti trovi utilizzando una delle opzioni seguenti
Siamo spiacenti che qualcosa sia andato storto. Cosa è successo?
some-alt