Filtri 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.
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 variabilirows
ecols
; - Calcola il punto centrale e memorizzalo in
crow
eccol
; - Definisci
low_mask
come un array di zeri con forma(rows, cols)
e tiponp.uint8
; - Seleziona la regione centrale 20x20 di
low_mask
e riempila con1
. - Definisci
high_mask
come un array di uni con forma(rows, cols)
e tiponp.uint8
; - Seleziona la regione centrale 20x20 di
high_mask
e riempila con0
; - Applica
low_mask
ehigh_mask
adft_shift
e memorizza le frequenze filtrate rispettivamente inlowpass_dft_filtered
ehighpass_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 l'inverso dello shifting e memorizza in
- 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
.
- Esegui l'inverso dello shifting e memorizza in
Soluzione
Grazie per i tuoi commenti!
single
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Awesome!
Completion rate improved to 3.45
Filtri 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.
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 variabilirows
ecols
; - Calcola il punto centrale e memorizzalo in
crow
eccol
; - Definisci
low_mask
come un array di zeri con forma(rows, cols)
e tiponp.uint8
; - Seleziona la regione centrale 20x20 di
low_mask
e riempila con1
. - Definisci
high_mask
come un array di uni con forma(rows, cols)
e tiponp.uint8
; - Seleziona la regione centrale 20x20 di
high_mask
e riempila con0
; - Applica
low_mask
ehigh_mask
adft_shift
e memorizza le frequenze filtrate rispettivamente inlowpass_dft_filtered
ehighpass_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 l'inverso dello shifting e memorizza in
- 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
.
- Esegui l'inverso dello shifting e memorizza in
Soluzione
Grazie per i tuoi commenti!
single