Középiskolai Matematikai és Fizikai Lapok
Informatika rovattal
Kiadja a MATFUND Alapítvány
Már regisztráltál?
Új vendég vagy?

Az I. 211. feladat (2009. április)

I. 211. A képen látható objektumok szerkezetének egyszerűsítésére a vázkijelölés módszerét alkalmazhatjuk. Ennek alapötlete, hogy az objektumot annak egy pixel vastag ,,középvonalával'' helyettesítjük. Így az objektumok kevesebb információval leírhatók és a kapott vázak az objektumok összehasonlítására alkalmazhatók például a karakterfelismerésben.

Olvassunk be egy fekete-fehér képet, majd a fekete alakzatok vázát vékonyítási módszerrel határozzuk meg és jelenítsük meg. A vékonyítási módszertől azt várjuk el, hogy végpontot ne töröljön, őrizze meg az alakzatok összefüggőségét és egy pixel vastag vázat határozzon meg.

Algoritmus: Rendeljünk a fekete színhez 1 és a fehér színhez 0 értéket. A vékonyítás során az alakzat kontúrpontjain történhet változás, azaz az olyan 1 értékű pontokon, amelyeknek 8-környezetében van legalább egy 0 érték. A szomszéd pontokat a következőképpen jelöljük:

Első lépés: Az s0 pontot töröljük, ha a következő négy feltétel mindegyike teljesül:

A Szomszédszám (s0) az s0 pont 1 értékű szomszédjainak száma. Az Átmenet (s0) pedig a 0-1 átmenetek száma az s1,s2,...,s7,s8,s1 sorozatban.

Például:

Második lépés: Az i. és ii. feltétel ugyanaz, de az iii. és az iv. helyett az

feltételek teljesülése esetén töröljük a pontokat.

Az első lépésben az alakzat összes szélső pontját megvizsgáljuk és törlésre kijelöljük a négy feltételnek eleget tevő pontokat. A törlést a teljes átvizsgálás után hajtjuk végre. Ezután a második lépésben a feltételek második változatával jelöljük meg a törlendő pontokat. Majd ebben az esetben is a teljes kép elemzése után hajtjuk végre a törlést.

A váz meghatározásához a két lépést addig folytatjuk, amíg már nem tapasztalunk változást.

Készítsünk programot, amely a bemeneti adatállományban megadott fekete-fehér BMP kép vázát meghatározza és az eredeti képpel együtt a képernyőn megjeleníti. A program parancssori argumentuma legyen a képállomány neve. Más, eltérő képtípust is használhatunk, például RAW állományt, de akkor a program parancssori argumentuma a kép függőleges, vízszintes mérete és a képállomány neve legyen.

Beküldendő a program forráskódja (i211.pas, i211.cpp, ...), valamint a program rövid dokumentációja (i211.txt, i211.pdf, ...). A dokumentáció tartalmazza a megoldás rövid leírását, és megadja, hogy a forrásállomány melyik fejlesztőkörnyezetben fordítható és hogyan paraméterezhető.

(10 pont)

A beküldési határidő 2009. május 15-én LEJÁRT.


Megoldásokról

A feladat stílusa eltér a megszokottól. Egyrészt grafikai programozás feladat ritkábban fordul elő, másrészt egy megadott algoritmust kellett kódolni. Az algoritmus viszonylag összetett és több lépésből áll. Megértése komoly próbatétel volt a versenyzők számára. Különböző programozási környezetekben eltérő nehézséget jelentett a képállomány beolvasása, majd megjelenítése. Többen kerestek a grafika kezeléséhez programkönyvtárakat. Ezekben eltérő eszközök, eljárások és függvények álltak rendelkezésre a grafikai probléma megoldásához. A vizuális környezetek, illetve ezek programozási eszközei, készen tartalmazzák a kép beolvasást és módosítást. Így, amíg például freepascalban a BMP-állományok szerkezetét is meg kellett ismerni a beolvasás kódolásához, addig delphiben erre kész komponens, illetve metódus van. Persze nem felesleges a képállományok szerkezetének megismerése se, de ez most plusz feladatot jelentett.

Minta megoldásként Turbo Delphi környezetben készült megoldást mutatunk be. A tömörített állomány több fekete-fehér képet tartalmaz, amelyekkel a működés jól tesztelhető.

megoldas.zip


Statisztika:

8 dolgozat érkezett.
10 pontot kapott:Horváth 135 Loránd, Kővágó Zoltán, Szabó 928 Attila, Uray Marcell János.
7 pontot kapott:2 versenyző.
2 pontot kapott:2 versenyző.

A KöMaL 2009. áprilisi informatika feladatai