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ä.
Mikä kieli?
Mitä tämä tarkoittaa?
Kooderi_ kirjoitti:
haluaisin löytää isommasta kuvasta pikselin, jossa pienempi kuva on
Miten pikselissä voi olla kuva?
Laita esimerkkikuva, niin on helpompi tajuta mitä höpiset.
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.');
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...
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.
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ä.
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.
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ää.
Googleta FindBitmap
Aihe on jo aika vanha, joten et voi enää vastata siihen.