Reunanilmaisu algoritmi (Edge Detection)

Reunanilmaisu algoritmia käytetään erottelemaan kuvasta kohteiden ääriviivoja esim. kohteen muodot, teksti tai vaikkapa lattialla oleva viiva, jota seurataan robotilla.

Algoritmi on varsin yksinkertainen, käydään kuvaa läpi pikseli kerralaan ja jokaista pikseliä kohden käydään sen naapuripikselit läpi, 8 pikseliä ja etsitään niistä tummin ja vaalein pikseli. Seuraavaksi algoritmi tutkii ylittääkö tummimman ja vaaleimman pikselin arvojen erotus asetetun kynnysarvon yli ja jos ylittää, asetetaan alkuperäisen muutettavan pikselin arvoksi 1 (musta) ja kynnysarvon alle jäävät pikselit asetetaan 0 (valkea) arvoon.

Reunanilmaisu algoritmi, Javalla tehty:

public void reunanilmaisu(int arvo)   
{
    int x,y,x1,y1;
    int tummin = 0;
    int vaalein = 255;
    int testi = 0;
    Color vari;
 
    for(y=1; y<h; y++)  // h on kuvan korkeus
    {
          for(x=1; x<w; x++) // w on kuvan leveys
          {
              for(y1=-1; y1<1; y1++) // naapuripikseleiden läpikäynti
              {
                  for(x1=-1; x1<1; x1++) // naapuripikseleiden läpikäynti
                  {
                      if((y1 == 0) && (x1 == 0)) // ei huomioida muutettavaa pikseliä
                      {}
                      else
                      {
                          vari = kuva_2D[y+y1][x+x1];
                          testi = vari.getRed();      // yksinkertaistettu..
                          if(testi > tummin)            
                          {
                              tummin = testi;
                          }
                          if(testi < vaalein) 
                          {
                              vaalein = testi;
                          }
                      }
                  }
 
            }
 
            if((tummin - vaalein) > arvo) // etsi sopiva kynnysarvo (threshold)
            {                              
                kuva_2D[y-1][x-1] = Color.black; 
            }
            else 
            {
                kuva_2D[y-1][x-1] = Color.white;
            }
            tummin = 0;
            vaalein= 255;    
        }
    }
}

Testiohjelmalla tehty testi:
reunanilmaisu.jpg

Täältä löytyy testiohjelma:
http://www.elisanet.fi/robotti_projektit/Konenako_ohjelmia.zip

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License