Woensdag avond

Post date: 25-Jun-2009 09:18:45

Er zijn nog een aantal problemen die gefixt moeten worden. Daar gaan we:

Donkere blokjes

We pakken het herkennen van blokjes anders aan: lichtintensiteit is toch niet zo'n handige manier om blokjes van een grijs/zwarte achtergrond te onderscheiden. Daarom bekijken we van elke pixel de RGB (rood, groen, blauw) waarde. Als een van de drie kleuren in voldoende mate aanwezig is (boven een minimumwaarde) hebben we waarschijnlijk te maken met een kleur. Die pixels maken we wit, tenzij de gevonden kleur te grijs is, dat wil zeggen dat de RGB waardes van de pixel te dicht bij elkaar liggen (dat zijn namelijk grijswaarden). Op deze manier worden de groene en blauwe blokjes zo uit de afbeelding gehaald. De gele blokjes lijken soms een beetje wit (en wit is een grijsachtige kleur), dus die worden nu niet gevonden. Daarom wordt vervolgens alsnog de lichte pixels omgezet in wit, en de nog niet aangeraakte pixels worden zwart. Bijkomend voordeel is dan de schaduwen nu worden gezien als grijs (en niet zo licht) en dus vaak zwart worden.

Onnodige randen

Het blok met gaten staat meestal gedraaid. Na het uitknippen van dit blok blijven er dan witte driehoeken om het blok heen staan. Van elk gevonden blok wordt gecontroleerd of ze in een van de driehoeken passen, wat tijdverspilling is. Daarom kleuren we de driehoeken nu zwart.

Schaling

Om de matchingskans te verhogen schalen we een van de plaatjes zodat ze even groot zijn. Dat gaat goed zolang je vormendoos niet dezelfde vormen met verschillende groottes heeft.

Duurtlang

Ondanks alle inspanningen blijkt matlab over het matchen van 5 blokjes nu maar liefst 6 minuten te staan rekenen. Dit komt omdat voor elke blok+gat combinatie alle 360 mogelijke hoeken worden uitgeprobeerd. Dat kan sneller: we laten de code nu stappen van 10 graden per keer zetten, en vanaf de beste matchhoek nog tien hoeken rechtsom en linksom te proberen. Dat garandeert geen optimale match, maar geeft een goede benadering. Bij het testen blijkt de runtime te zijn afgenomen naar 1 minuut, zonder zichtbare verkeerde matches.

Resultaat:

Hieronder nog een voorbeeld van een foutje toen zijkanten nog wit werden gekleurd(perspectief problemen), waardoor het rode blokje wordt gezien als een ruit-achtig figuur: