Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Histogramudjævning | Billedbehandling med OpenCV
Computer Vision Grundlæggende

book
Histogramudjævning

Simpel histogramudjævning

Histogramudjævning er en teknik, der bruges til at forbedre det globale kontrastforhold i et billede. Metoden fungerer ved at omfordele intensitetsværdierne, så de spænder over hele det mulige interval (0 til 255 i 8-bit billeder). Dette er især nyttigt for billeder, der er for mørke eller for lyse, da det gør detaljer mere synlige ved at udjævne histogrammet for pixelintensiteter.

  • cv2.equalizeHist(image)

    • image: input gråtonebillede (skal være enkeltkanal);

    • Returnerer et nyt billede med forbedret kontrast ved at strække og udjævne histogrammet.

Adaptiv histogramudjævning (CLAHE)

CLAHE (Contrast Limited Adaptive Histogram Equalization) er en avanceret version af histogramudjævning, der arbejder på små områder (tiles) af billedet i stedet for hele billedet. Den forbedrer lokal kontrast og undgår at forstærke støj for meget ved at begrænse histogramkontrasten inden for hvert område.

  • cv2.createCLAHE(...) opretter et CLAHE-objekt med:

    • clipLimit: tærskelværdi for kontrastbegrænsning (højere værdi = mere kontrast);

    • tileGridSize: størrelsen på gitteret til opdeling af billedet i felter (f.eks. 8x8).

  • clahe.apply(image) anvender CLAHE på inputbilledet.

Opgave

Swipe to start coding

Du har fået en variabel image:

  • Anvend simpel histogramudligning og gem resultatet i equalized;
  • Definér CLAHE klasseobjekt i variablen clahe;
  • Anvend CLAHE-histogramudligning og gem resultatet i clahe_equalized (parameteranbefaling: clipLimit=2.0 og tileGridSize=(8, 8)).

Løsning

import io
import cv2
import numpy as np
import urllib.request
from PIL import Image
import matplotlib.pyplot as plt

url = "https://content-media-cdn.codefinity.com/courses/ef049f7b-ce21-45be-a9f2-5103360b0655/task_pictures/stone_head.png"
with urllib.request.urlopen(url) as response:
image_data = response.read()
image = np.array(Image.open(io.BytesIO(image_data)))
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Apply histogram equalization
equalized = cv2.equalizeHist(image)

# CLAHE equalization
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
clahe_equalized = clahe.apply(image) # Apply CLAHE

# Show results
plt.figure(figsize=(15, 10))

# Original Image
plt.subplot(3, 2, 1)
plt.imshow(image, cmap="gray")
plt.title("Original Image")
plt.axis("off")

# Simaple Equalized Image
plt.subplot(3, 2, 3)
plt.imshow(equalized, cmap="gray")
plt.title("Equalized Image")
plt.axis("off")

# CLAHE Equalized Image
Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 5
single

single

import io
import cv2
import numpy as np
import urllib.request
from PIL import Image
import matplotlib.pyplot as plt

url = "https://content-media-cdn.codefinity.com/courses/ef049f7b-ce21-45be-a9f2-5103360b0655/task_pictures/stone_head.png"
with urllib.request.urlopen(url) as response:
image_data = response.read()
image = np.array(Image.open(io.BytesIO(image_data)))
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

equalized = ___

clahe = ___
clahe_equalized = ___

# Display the results
plt.figure(figsize=(15, 10))

plt.subplot(3, 2, 1)
plt.imshow(image, cmap="gray")
plt.title("Original Image")
plt.axis("off")

plt.subplot(3, 2, 3)
plt.imshow(equalized, cmap="gray")
plt.title("Equalized Image")
plt.axis("off")

plt.subplot(3, 2, 5)
plt.imshow(clahe_equalized, cmap="gray")
plt.title("CLAHE Equalized Image")
plt.axis("off")

plt.subplot(3, 2, 2)
plt.hist(image.ravel(), bins=255, color="red")
plt.title("Original Histogram")

plt.subplot(3, 2, 4)
plt.hist(equalized.ravel(), bins=255, color="green")
plt.title("Equalized Histogram")

plt.subplot(3, 2, 6)
plt.hist(clahe_equalized.ravel(), bins=255, color="blue")
plt.title("Equalized Histogram")

plt.tight_layout()
plt.show()

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

some-alt