Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Histogrammin Tasoitus | Kuvankäsittely OpenCV:llä
Konenäön Perusteet

book
Histogrammin Tasoitus

Yksinkertainen histogrammin tasoitus

Histogrammin tasoitus on tekniikka, jota käytetään kuvan globaalin kontrastin parantamiseen. Se toimii jakamalla intensiteettiarvot uudelleen niin, että ne kattavat koko mahdollisen alueen (0–255 8-bittisissä kuvissa). Tämä on erityisen hyödyllistä kuville, jotka ovat liian tummia tai liian kirkkaita, sillä se tekee piirteistä näkyvämpiä tasoittamalla pikselien intensiteettien histogrammin.

  • cv2.equalizeHist(image)

    • image: syöteharmaasävykuva (täytyy olla yksikanavainen);

    • Palauttaa uuden kuvan, jossa kontrastia on parannettu venyttämällä ja tasoittamalla histogrammia.

Adaptiivinen histogrammin tasoitus (CLAHE)

CLAHE (Contrast Limited Adaptive Histogram Equalization) on kehittynyt versio histogrammin tasoituksesta, joka toimii kuvan pienillä alueilla (laatoilla) koko kuvan sijaan. Se parantaa paikallista kontrastia ja estää kohinan liiallisen korostumisen rajoittamalla histogrammin kontrastia jokaisessa laatassa.

  • cv2.createCLAHE(...) luo CLAHE-olion seuraavilla parametreilla:

    • clipLimit: kontrastin rajoituksen kynnysarvo (suurempi arvo = enemmän kontrastia);

    • tileGridSize: ruudukon koko, jolla kuva jaetaan pienempiin osiin (esim. 8x8).

  • clahe.apply(image) soveltaa CLAHE-menetelmää syötekuvaan.

Tehtävä

Swipe to start coding

Sinulle on annettu image-muuttuja:

  • Käytä yksinkertaista histogrammin tasoitusta ja tallenna tulos muuttujaan equalized;
  • Määrittele CLAHE-luokan olio muuttujaan clahe;
  • Käytä CLAHE-histogrammin tasoitusta ja tallenna tulos muuttujaan clahe_equalized (suositellut parametrit: clipLimit=2.0 ja tileGridSize=(8, 8)).

Ratkaisu

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
Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 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()

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

We use cookies to make your experience better!
some-alt