Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Kulma- ja Kohdetunnistus | Kuvankäsittely OpenCV:llä
Tietokonenäön Perusteet

bookKulma- ja Kohdetunnistus

Kulman tunnistus

Kulman tunnistusta käytetään voimakkaiden intensiteettimuutosten havaitsemiseen, joissa kaksi reunaa kohtaavat. Sitä hyödynnetään piirteiden yhdistämisessä, kohteiden seurannassa ja rakenteiden tunnistuksessa.

Suositut menetelmät:

  • Harris-kulmantunnistin (cv2.cornerHarris): tunnistaa kulmat gradienttimuutosten perusteella;
# Load image and convert to grayscale
image = cv2.imread("image.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Convert to float32
gray = np.float32(gray)

# Apply Harris Corner Detection
harris_corners = cv2.cornerHarris(gray, blockSize=2, ksize=3, k=0.04)
harris_corners = cv2.dilate(harris_corners, None)  # Improve visibility

# Mark detected corners in red
image[harris_corners > 0.01 * harris_corners.max()] = [0, 0, 255]
Note
Huomio

Parametrit:

  • src: syöteharmaasävykuva (oltava float32);
  • blockSize: paikallisen ikkunan koko gradienttien laskentaan;
  • ksize: Sobel-operaattorin aukon koko (pariton, esim. 3, 5, 7);
  • k: Harris-tunnistimen vapaa parametri (tyypillisesti: 0.04 - 0.06).
  • Shi-Tomasi-kulmantunnistin (cv2.goodFeaturesToTrack): valitsee kuvan vahvimmat kulmat;
# Load image and convert to grayscale
image = cv2.imread("image.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Detect corners
corners = cv2.goodFeaturesToTrack(gray, maxCorners=100, qualityLevel=0.01, minDistance=10)

# Draw detected corners in blue
for corner in corners:
    x, y = np.int32(corner[0])
    cv2.circle(image, (x, y), 5, (255, 0, 0), -1)
Note
Huomio

Parametrit:

  • image: syöteharmaasävykuva;
  • maxCorners: havaittavien kulmien enimmäismäärä;
  • qualityLevel: havaittujen kulmien vähimmäislaatu (alue: 0.01 - 0.1);
  • minDistance: havaittujen kulmien välinen vähimmäisetäisyys.
Note
Lisätietoa

cv2.circle()-menetelmän parametrit kohteiden korostamiseen:

  • image: kuva, johon ympyrä piirretään;
  • center_coordinates: ympyrän keskipisteen koordinaatit, esitettynä kahden arvon tuplena: (X, Y);
  • radius: ympyrän säde;
  • color: ympyrän reunan väri. BGR-muodossa, annetaan tuplena (esim. (255, 0, 0) siniselle);
  • thickness: ympyrän reunan paksuus pikseleinä. Arvo -1 täyttää koko ympyrän määritellyllä värillä.

Blob-havainnointi

Blob-havainnointi tunnistaa samankaltaisen intensiteetin alueet kuvasta, mikä on hyödyllistä kohteiden tunnistuksessa ja seurannassa.

Yksi suosituista blob-havainnoinnin menetelmistä on SimpleBlobDetector

  • cv2.SimpleBlobDetector: tunnistaa avainpisteet, jotka edustavat blob-alueita koon, muodon ja intensiteetin perusteella.
# Set up SimpleBlobDetector parameters
params = cv2.SimpleBlobDetector_Params()

# Adjust parameters for better detection
params.minThreshold = 5
params.maxThreshold = 255
params.filterByArea = True
params.minArea = 100
params.maxArea = 5000
params.filterByCircularity = True
params.minCircularity = 0.02
params.filterByConvexity = True
params.minConvexity = 0.5
params.filterByInertia = True
params.minInertiaRatio = 0.001

# Create detector and detect blobs
detector = cv2.SimpleBlobDetector_create(params)
keypoints = detector.detect(gray)

# Draw blobs on the image
image_with_blobs = cv2.drawKeypoints(image, keypoints, None, (0, 255, 0),
                                     cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
Note
Huomio

Parametrit:

  • minThreshold, maxThreshold: intensiteettialue kohteiden tunnistukseen;
  • filterByArea: mahdollistaa suodatuksen kohteen koon perusteella;
    • minArea, maxArea: määrittää havaittujen kohteiden kokorajat;
  • filterByCircularity: mahdollistaa suodatuksen pyöreyden perusteella;
    • minCircularity: pienemmät arvot tunnistavat pitkulaisia kohteita;
  • filterByConvexity: mahdollistaa suodatuksen konveksisuuden perusteella;
    • minConvexity: pienemmät arvot sallivat kuperat muodot;
  • filterByInertia: mahdollistaa suodatuksen pituussuhteen perusteella;
    • minInertiaRatio: pienemmät arvot tunnistavat pitkulaisia kohteita.
Tehtävä

Swipe to start coding

Sinulle on annettu tehdaskuva (factory) ja auringonkukkakuva (sunflowers):

  • Muunna factory-kuva harmaasävykuvaksi ja tallenna muuttujaan gray_factory;
  • Muunna sunflowers-kuva harmaasävykuvaksi ja tallenna muuttujaan gray_sunflowers;
  • Harris-detektoria varten kuvan matriisi tulee muuntaa muotoon float32, tee tämä ja tallenna muuttujaan gray_float;
  • Käytä Harris-kulmadetektoria ja tallenna tulos muuttujaan harris_corners (suositellut parametrit: blockSize=2, ksize=3, k=0.04);
  • Paranna dilate()-tuloksen näkyvyyttä käyttämällä harris_corners;
  • Käytä Shi-Tomasi -kulmadetektoria kuvaan ja tallenna tulos muuttujaan shi_tomasi_corners (suositellut parametrit: gray_factory, maxCorners=100, qualityLevel=0.01, minDistance=10)
  • Luo SimpleBlobDetector_Params-olio parametrien alustamista varten ja tallenna muuttujaan params;
  • Luo blob-detektori määritellyillä parametreilla ja tallenna muuttujaan detector;
  • Tunnista blob-avaimet ja tallenna muuttujaan keypoints.

Ratkaisu

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 8
single

single

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

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

close

Awesome!

Completion rate improved to 3.45

bookKulma- ja Kohdetunnistus

Pyyhkäise näyttääksesi valikon

Kulman tunnistus

Kulman tunnistusta käytetään voimakkaiden intensiteettimuutosten havaitsemiseen, joissa kaksi reunaa kohtaavat. Sitä hyödynnetään piirteiden yhdistämisessä, kohteiden seurannassa ja rakenteiden tunnistuksessa.

Suositut menetelmät:

  • Harris-kulmantunnistin (cv2.cornerHarris): tunnistaa kulmat gradienttimuutosten perusteella;
# Load image and convert to grayscale
image = cv2.imread("image.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Convert to float32
gray = np.float32(gray)

# Apply Harris Corner Detection
harris_corners = cv2.cornerHarris(gray, blockSize=2, ksize=3, k=0.04)
harris_corners = cv2.dilate(harris_corners, None)  # Improve visibility

# Mark detected corners in red
image[harris_corners > 0.01 * harris_corners.max()] = [0, 0, 255]
Note
Huomio

Parametrit:

  • src: syöteharmaasävykuva (oltava float32);
  • blockSize: paikallisen ikkunan koko gradienttien laskentaan;
  • ksize: Sobel-operaattorin aukon koko (pariton, esim. 3, 5, 7);
  • k: Harris-tunnistimen vapaa parametri (tyypillisesti: 0.04 - 0.06).
  • Shi-Tomasi-kulmantunnistin (cv2.goodFeaturesToTrack): valitsee kuvan vahvimmat kulmat;
# Load image and convert to grayscale
image = cv2.imread("image.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Detect corners
corners = cv2.goodFeaturesToTrack(gray, maxCorners=100, qualityLevel=0.01, minDistance=10)

# Draw detected corners in blue
for corner in corners:
    x, y = np.int32(corner[0])
    cv2.circle(image, (x, y), 5, (255, 0, 0), -1)
Note
Huomio

Parametrit:

  • image: syöteharmaasävykuva;
  • maxCorners: havaittavien kulmien enimmäismäärä;
  • qualityLevel: havaittujen kulmien vähimmäislaatu (alue: 0.01 - 0.1);
  • minDistance: havaittujen kulmien välinen vähimmäisetäisyys.
Note
Lisätietoa

cv2.circle()-menetelmän parametrit kohteiden korostamiseen:

  • image: kuva, johon ympyrä piirretään;
  • center_coordinates: ympyrän keskipisteen koordinaatit, esitettynä kahden arvon tuplena: (X, Y);
  • radius: ympyrän säde;
  • color: ympyrän reunan väri. BGR-muodossa, annetaan tuplena (esim. (255, 0, 0) siniselle);
  • thickness: ympyrän reunan paksuus pikseleinä. Arvo -1 täyttää koko ympyrän määritellyllä värillä.

Blob-havainnointi

Blob-havainnointi tunnistaa samankaltaisen intensiteetin alueet kuvasta, mikä on hyödyllistä kohteiden tunnistuksessa ja seurannassa.

Yksi suosituista blob-havainnoinnin menetelmistä on SimpleBlobDetector

  • cv2.SimpleBlobDetector: tunnistaa avainpisteet, jotka edustavat blob-alueita koon, muodon ja intensiteetin perusteella.
# Set up SimpleBlobDetector parameters
params = cv2.SimpleBlobDetector_Params()

# Adjust parameters for better detection
params.minThreshold = 5
params.maxThreshold = 255
params.filterByArea = True
params.minArea = 100
params.maxArea = 5000
params.filterByCircularity = True
params.minCircularity = 0.02
params.filterByConvexity = True
params.minConvexity = 0.5
params.filterByInertia = True
params.minInertiaRatio = 0.001

# Create detector and detect blobs
detector = cv2.SimpleBlobDetector_create(params)
keypoints = detector.detect(gray)

# Draw blobs on the image
image_with_blobs = cv2.drawKeypoints(image, keypoints, None, (0, 255, 0),
                                     cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
Note
Huomio

Parametrit:

  • minThreshold, maxThreshold: intensiteettialue kohteiden tunnistukseen;
  • filterByArea: mahdollistaa suodatuksen kohteen koon perusteella;
    • minArea, maxArea: määrittää havaittujen kohteiden kokorajat;
  • filterByCircularity: mahdollistaa suodatuksen pyöreyden perusteella;
    • minCircularity: pienemmät arvot tunnistavat pitkulaisia kohteita;
  • filterByConvexity: mahdollistaa suodatuksen konveksisuuden perusteella;
    • minConvexity: pienemmät arvot sallivat kuperat muodot;
  • filterByInertia: mahdollistaa suodatuksen pituussuhteen perusteella;
    • minInertiaRatio: pienemmät arvot tunnistavat pitkulaisia kohteita.
Tehtävä

Swipe to start coding

Sinulle on annettu tehdaskuva (factory) ja auringonkukkakuva (sunflowers):

  • Muunna factory-kuva harmaasävykuvaksi ja tallenna muuttujaan gray_factory;
  • Muunna sunflowers-kuva harmaasävykuvaksi ja tallenna muuttujaan gray_sunflowers;
  • Harris-detektoria varten kuvan matriisi tulee muuntaa muotoon float32, tee tämä ja tallenna muuttujaan gray_float;
  • Käytä Harris-kulmadetektoria ja tallenna tulos muuttujaan harris_corners (suositellut parametrit: blockSize=2, ksize=3, k=0.04);
  • Paranna dilate()-tuloksen näkyvyyttä käyttämällä harris_corners;
  • Käytä Shi-Tomasi -kulmadetektoria kuvaan ja tallenna tulos muuttujaan shi_tomasi_corners (suositellut parametrit: gray_factory, maxCorners=100, qualityLevel=0.01, minDistance=10)
  • Luo SimpleBlobDetector_Params-olio parametrien alustamista varten ja tallenna muuttujaan params;
  • Luo blob-detektori määritellyillä parametreilla ja tallenna muuttujaan detector;
  • Tunnista blob-avaimet ja tallenna muuttujaan keypoints.

Ratkaisu

Switch to desktopVaihda työpöytään todellista harjoitusta vartenJatka siitä, missä olet käyttämällä jotakin alla olevista vaihtoehdoista
Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 8
single

single

some-alt