Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Kuvan etsiminen kuvasta

Sivun loppuun

Kooderi_J [04.02.2009 16:12:22]

#

Eli tarkoitus olisi tehdä/löytää koodi/kirjasto, jolla voi etsiä isommasta kuvasta pienemmän kuvan. Pienempi kuva on kopiotu isommasta ja leikattu pienemmäksi niin haluaisin löytää isommasta kuvasta pikselin, jossa pienempi kuva on. Oliko selvästi selitetty?

Siis halauaisin löytää täsmällisen kuvan rajauksen alkuperäisestä.

trilog [04.02.2009 16:32:32]

#

Mikä kieli?

tgunner [04.02.2009 16:58:21]

#

Mitä tämä tarkoittaa?

Kooderi_ kirjoitti:

haluaisin löytää isommasta kuvasta pikselin, jossa pienempi kuva on

Miten pikselissä voi olla kuva?

ville-v [04.02.2009 17:09:38]

#

Laita esimerkkikuva, niin on helpompi tajuta mitä höpiset.

Metabolix [04.02.2009 17:11:40]

#

Valitse mieleisesi kieli ja lataa kuvat muistiin pakkaamattomassa muodossa. Käy sitten läpi jokainen pikseli (jokainen x- ja y-koordinaatti) ja vertaa jokaisesta pikselistä lähtien aluetta pienempään palaan.

for x0 := 0 to kuva_w - 1 do begin
  for y0 := 0 to kuva_h - 1 do begin
    { Aluksi "kaikki 0 vertailua ovat onnistuneet". }
    ok := True;
    for xi := 0 to pala_w - 1 do begin
      for yi := 0 to pala_h - 1 do begin
        { Verrataan pikseliä. Jos on eri, kuva ei ole tässä. }
        if kuva[x0 + xi, y0 + yi] <> pala[xi, yi] then ok := False;
        if not ok then break;
      end;
      if not ok then break;
    end;
    { Jos ei sattunut virheitä, löytyi paikka kuvalle. }
    if ok then begin
      Inc(osumia);
      Writeln('(', x0, ', ', y0, ')');
    end;
  end;
end;
Writeln(osumia, ' osumaa.');

Grez [04.02.2009 17:20:13]

#

Ja sitten jos kuvat on vaikka JPG-pakattu, niin revi hiuksia päästä.. Sitten täytyy tehdä joku vertailu, jossa on pieni toleranssi. Eli yksinkertaisimmillaan hyväksyy arvon samaksi jos heittää vaikka max. 10...

JussiR [04.02.2009 17:35:18]

#

tgunner kirjoitti:

Mitä tämä tarkoittaa?

Kooderi_ kirjoitti:

haluaisin löytää isommasta kuvasta pikselin, jossa pienempi kuva on

Miten pikselissä voi olla kuva?

Hän tarkoitti varmaan X, Y kohtaa vasemmassa yläkulmassa kuvasta, joka löytyi kuvasta.

Kooderi_J [04.02.2009 17:38:08]

#

tgunner kirjoitti:

Mitä tämä tarkoittaa?

Kooderi_ kirjoitti:

haluaisin löytää isommasta kuvasta pikselin, jossa pienempi kuva on

Miten pikselissä voi olla kuva?

Joo, tarkotin sitä kohtaa isommassa kuvassa, josta pienempi löytyi. Elikkä X, Y koordinatit sille. Onko tälläinen tarkistaminen todella hidasta puuha?

Niin ja kiitoksia vastauksista.


Python tai C++ käytössä.

Grez [04.02.2009 18:08:32]

#

Kooderi_ kirjoitti:

Onko tälläinen tarkistaminen todella hidasta puuha?

Riippuu kuvien koosta ja sisällöstä. Jos kuva on täysin muuttumattomana on testaus nopeampaa (heti ekan bitin ollessa väärä, voidaan todeta että kuva ei ole tässä) kuin esim. JPEG -pakattujen tai muuten vaurioituneiden kuvien vertaaminen.

Antti Laaksonen [04.02.2009 18:34:03]

#

Yksinkertainen menetelmä on tosiaan käydä läpi kaikki pienen kuvan mahdolliset esiintymiskohdat suuressa kuvassa ja tarkistaa jokaisessa kohdassa pienen kuvan pikselit yksi kerrallaan.

Tavallisilla kuvilla tämä on nopeaa, koska jos pieni kuva ei ole tietyssä kohdassa suuressa kuvassa, ensimmäinen väärä pikseli löytyy luultavasti melko pian eikä läheskään kaikkia pienen kuvan pikseleitä tarvitse tarkistaa.

Kaikkein ikävimmässä tapauksessa pieni kuva esiintyy joka kohdassa suuressa kuvassa eli esim. molemmat kuvat ovat yksivärisiä. Tällöin joka kerta täytyy käydä läpi kaikki pienen kuvan pikselit, mikä on hidasta.

Jos tehokkaammat algoritmit kiinnostavat, yksi sopiva hakusana voisi olla "two-dimensional pattern matching". Mutta kannattaa kokeilla ensin tuota suoraviivaista perusalgoritmia, joka voi hyvin riittää.

JussiR [06.02.2009 17:30:07]

#

Googleta FindBitmap


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta