Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Lågpass- och Högpassfilter | Bildbehandling med OpenCV
Grundläggande Datorseende

Svep för att visa menyn

book
Lågpass- och Högpassfilter

En av de viktigaste fördelarna med Fouriertransformen är att den möjliggör högpass- och lågpassfiltrering.

Efter att vi har applicerat Fouriertransformen:

vi behöver skapa en filtreringsmask

Lågpassfiltrering (suddning)

Ett lågpassfilter tar bort högfrekventa komponenter, vilket resulterar i en suddig bild. Lågpassmask:

  • rows, cols = image.shape: hämtar antalet rader och kolumner från gråskalebilden;

  • crow, ccol = rows // 2, cols // 2: beräknar bildens mittkoordinater;

  • mask = np.zeros((rows, cols), np.uint8): skapar en mask av nollor med samma dimensioner som bilden;

  • mask[crow-30:crow+30, ccol-30:ccol+30] = 1: sätter ett 60×60 kvadratiskt område i mitten av masken till 1, vilket tillåter endast lågfrekventa komponenter (nära mitten av frekvensdomänen) att passera medan högfrekventa detaljer filtreras bort.

Högpassfiltrering (Kantdetektering)

Ett högpassfilter tar bort lågfrekventa komponenter och förstärker kanter. Högpassmask:

  • highpass_mask = np.ones((rows, cols), np.uint8): initierar en mask av ettor med samma dimensioner som bilden, vilket innebär att alla frekvenser initialt tillåts passera;

  • highpass_mask[crow-5:crow+5, ccol-5:ccol+5] = 0: sätter en liten 10×10 ruta i mitten (lågfrekvensområde) till noll, vilket effektivt blockerar dessa frekvenser.

Applicering av filtret

Efter att masken har skapats måste vi applicera ett filter och transformera vårt foto tillbaka till det spatiala domänet:

  • dft_filtered = dft_shift * mask: applicerar frekvensdomänmasken (t.ex. lågpass- eller högpass) genom elementvis multiplikation med den skiftade DFT:n av bilden;

  • dft_inverse = np.fft.ifftshift(dft_filtered): återställer skiftet som tidigare applicerats för att återföra frekvenskomponenterna till sina ursprungliga positioner;

  • image_filtered = np.fft.ifft2(dft_inverse): beräknar den inversa Fouriertransformen för att konvertera de filtrerade frekvensdata tillbaka till det spatiala domänet;

  • image_filtered = np.abs(image_filtered): tar absolutvärdet för att ta bort eventuella kvarvarande imaginära komponenter, vilket resulterar i en realvärdesfiltrerad bild.

Uppgift

Swipe to start coding

Du har fått en bild av fåret i variabeln image och en bild i frekvensdomänen i variabeln dft_shift:

  • Hämta formen på matrisen image och spara i variablerna rows och cols;
  • Beräkna mittpunkten och spara i crow och ccol;
  • Definiera low_mask som en array av nollor med formen (rows, cols) och typen np.uint8;
  • Välj det 20x20 stora centrumområdet i low_mask och fyll det med 1.
  • Definiera high_mask som en array av ettor med formen (rows, cols) och typen np.uint8;
  • Välj det 20x20 stora centrumområdet i high_mask och fyll det med 0;
  • Applicera low_mask och high_maskdft_shift och spara de filtrerade frekvenserna i lowpass_dft_filtered respektive highpass_dft_filtered;
  • Utför invers transformation för lowpass_dft_filtered:
    • Utför invers skiftning och spara i lowpass_dft_inverse;
    • Utför invers transformation och spara bilden i image_lowpass;
    • Ta bort negativa värden för image_lowpass.
  • Utför invers transformation för highpass_dft_inverse:
    • Utför invers skiftning och spara i lowpass_dft_inverse;
    • Utför invers transformation och spara bilden i image_highpass;
    • Ta bort negativa värden för image_highpass.

Lösning

Switch to desktopByt till skrivbordet för praktisk övningFortsätt där du är med ett av alternativen nedan
Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 2. Kapitel 3
Vi beklagar att något gick fel. Vad hände?

Fråga AI

expand
ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

book
Lågpass- och Högpassfilter

En av de viktigaste fördelarna med Fouriertransformen är att den möjliggör högpass- och lågpassfiltrering.

Efter att vi har applicerat Fouriertransformen:

vi behöver skapa en filtreringsmask

Lågpassfiltrering (suddning)

Ett lågpassfilter tar bort högfrekventa komponenter, vilket resulterar i en suddig bild. Lågpassmask:

  • rows, cols = image.shape: hämtar antalet rader och kolumner från gråskalebilden;

  • crow, ccol = rows // 2, cols // 2: beräknar bildens mittkoordinater;

  • mask = np.zeros((rows, cols), np.uint8): skapar en mask av nollor med samma dimensioner som bilden;

  • mask[crow-30:crow+30, ccol-30:ccol+30] = 1: sätter ett 60×60 kvadratiskt område i mitten av masken till 1, vilket tillåter endast lågfrekventa komponenter (nära mitten av frekvensdomänen) att passera medan högfrekventa detaljer filtreras bort.

Högpassfiltrering (Kantdetektering)

Ett högpassfilter tar bort lågfrekventa komponenter och förstärker kanter. Högpassmask:

  • highpass_mask = np.ones((rows, cols), np.uint8): initierar en mask av ettor med samma dimensioner som bilden, vilket innebär att alla frekvenser initialt tillåts passera;

  • highpass_mask[crow-5:crow+5, ccol-5:ccol+5] = 0: sätter en liten 10×10 ruta i mitten (lågfrekvensområde) till noll, vilket effektivt blockerar dessa frekvenser.

Applicering av filtret

Efter att masken har skapats måste vi applicera ett filter och transformera vårt foto tillbaka till det spatiala domänet:

  • dft_filtered = dft_shift * mask: applicerar frekvensdomänmasken (t.ex. lågpass- eller högpass) genom elementvis multiplikation med den skiftade DFT:n av bilden;

  • dft_inverse = np.fft.ifftshift(dft_filtered): återställer skiftet som tidigare applicerats för att återföra frekvenskomponenterna till sina ursprungliga positioner;

  • image_filtered = np.fft.ifft2(dft_inverse): beräknar den inversa Fouriertransformen för att konvertera de filtrerade frekvensdata tillbaka till det spatiala domänet;

  • image_filtered = np.abs(image_filtered): tar absolutvärdet för att ta bort eventuella kvarvarande imaginära komponenter, vilket resulterar i en realvärdesfiltrerad bild.

Uppgift

Swipe to start coding

Du har fått en bild av fåret i variabeln image och en bild i frekvensdomänen i variabeln dft_shift:

  • Hämta formen på matrisen image och spara i variablerna rows och cols;
  • Beräkna mittpunkten och spara i crow och ccol;
  • Definiera low_mask som en array av nollor med formen (rows, cols) och typen np.uint8;
  • Välj det 20x20 stora centrumområdet i low_mask och fyll det med 1.
  • Definiera high_mask som en array av ettor med formen (rows, cols) och typen np.uint8;
  • Välj det 20x20 stora centrumområdet i high_mask och fyll det med 0;
  • Applicera low_mask och high_maskdft_shift och spara de filtrerade frekvenserna i lowpass_dft_filtered respektive highpass_dft_filtered;
  • Utför invers transformation för lowpass_dft_filtered:
    • Utför invers skiftning och spara i lowpass_dft_inverse;
    • Utför invers transformation och spara bilden i image_lowpass;
    • Ta bort negativa värden för image_lowpass.
  • Utför invers transformation för highpass_dft_inverse:
    • Utför invers skiftning och spara i lowpass_dft_inverse;
    • Utför invers transformation och spara bilden i image_highpass;
    • Ta bort negativa värden för image_highpass.

Lösning

Switch to desktopByt till skrivbordet för praktisk övningFortsätt där du är med ett av alternativen nedan
Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 2. Kapitel 3
Switch to desktopByt till skrivbordet för praktisk övningFortsätt där du är med ett av alternativen nedan
Vi beklagar att något gick fel. Vad hände?
some-alt