Het Begin
De laatste tijd ben ik heel geïnteresseerd geworden in Machine Vision, en ben ik er veel mee gaan experimenteren. Ik ben begonnen met een projectje om met de webcam bepaalde objecten te herkennen. Eerst gewoon door op kleur te filteren, maar nu wil ik het slimmer gaan aanpakken. Ik wil een programma schrijven om een blauw kruis in het beeld te herkennen.
De Hough Transform
Een paar beschrijvingen van de hough transform.
http://en.wikipedia.org/wiki/Hough_transform - Een Wikipedia artikel over de Hough transform.
http://www.cs.tu-bs.de/rob/lehre/bv/HNF.html - Een werkende applet die de Hough transformaties doet.
http://homepages.inf.ed.ac.uk/rbf/HIPR2/hough.htm - Een hele goede beschrijving van de Hough transform.
Het Idee
Het idee is vrij simpel. Eerst moet al het blauw uit het beeldje gefiltert worden. Daarna wordt er een edge detector tegenaangegooid, en op dat beeldje kan de Hough transform losgelaten worden. De Hough transform vindt dan de sterkste lijnen in het beeldje.

Het eerste is het origineel. De 2e is alleen het blauw, en de 3e is na edge detection en met de herkende lijnen. In dit geval werkt het allemaal prima, maaaar...
Het Probleem
Zoals de "maaaar" net al aangaf, werkt het lang niet altijd. En ik denk dat het probleem ligt in de manier waarop ik de resultaten van de Hough transform verwerk.
Uit de Hough transform komt dus een grafiekje met snijpunten tussen sinusachtige golven. Hoe meer golven door een punt gaan, hoe meer pixels op die lijn zitten. Het probleem is alleen dat niet alle punten van één lijn ook écht op één lijn liggen. Als ik nu uit het Hough transform plaatje de 4 punten kies waar de meeste golven doorheen gaan, krijg ik meerdere lijnen die praktisch hetzelfde zijn.
Even weer een plaatje ter verduidelijking waar het dus de mist in gaat.

Dit heb ik opgelost door lijnen te negeren die teveel op reeds gevonden lijnen lijken, zoals in het allereerste plaatje te zien is. Maar dit werkt ook niet altijd. Als het object ver weg van de camera staat staan de lijnen ook dichter bij elkaar, en kunnen ze dus ook genegeerd worden, terwijl ze er eigenlijk gewoon bijhoren. En dit werkt ook andersom. Als het object dichtbij staat, dan kunnen sommige lijnen niet genegeerd worden, terwijl dat wel moet gebeuren. Zoals hier.

Dus...
Als ik nog wat dingen verder moet vertellen of met wat code moet strooien dan doe ik dat graag
. Iemand ideeën?
De laatste tijd ben ik heel geïnteresseerd geworden in Machine Vision, en ben ik er veel mee gaan experimenteren. Ik ben begonnen met een projectje om met de webcam bepaalde objecten te herkennen. Eerst gewoon door op kleur te filteren, maar nu wil ik het slimmer gaan aanpakken. Ik wil een programma schrijven om een blauw kruis in het beeld te herkennen.
De Hough Transform
Een paar beschrijvingen van de hough transform.
http://en.wikipedia.org/wiki/Hough_transform - Een Wikipedia artikel over de Hough transform.
http://www.cs.tu-bs.de/rob/lehre/bv/HNF.html - Een werkende applet die de Hough transformaties doet.
http://homepages.inf.ed.ac.uk/rbf/HIPR2/hough.htm - Een hele goede beschrijving van de Hough transform.
Het Idee
Het idee is vrij simpel. Eerst moet al het blauw uit het beeldje gefiltert worden. Daarna wordt er een edge detector tegenaangegooid, en op dat beeldje kan de Hough transform losgelaten worden. De Hough transform vindt dan de sterkste lijnen in het beeldje.
Het eerste is het origineel. De 2e is alleen het blauw, en de 3e is na edge detection en met de herkende lijnen. In dit geval werkt het allemaal prima, maaaar...
Het Probleem
Zoals de "maaaar" net al aangaf, werkt het lang niet altijd. En ik denk dat het probleem ligt in de manier waarop ik de resultaten van de Hough transform verwerk.
Uit de Hough transform komt dus een grafiekje met snijpunten tussen sinusachtige golven. Hoe meer golven door een punt gaan, hoe meer pixels op die lijn zitten. Het probleem is alleen dat niet alle punten van één lijn ook écht op één lijn liggen. Als ik nu uit het Hough transform plaatje de 4 punten kies waar de meeste golven doorheen gaan, krijg ik meerdere lijnen die praktisch hetzelfde zijn.
Even weer een plaatje ter verduidelijking waar het dus de mist in gaat.
Dit heb ik opgelost door lijnen te negeren die teveel op reeds gevonden lijnen lijken, zoals in het allereerste plaatje te zien is. Maar dit werkt ook niet altijd. Als het object ver weg van de camera staat staan de lijnen ook dichter bij elkaar, en kunnen ze dus ook genegeerd worden, terwijl ze er eigenlijk gewoon bijhoren. En dit werkt ook andersom. Als het object dichtbij staat, dan kunnen sommige lijnen niet genegeerd worden, terwijl dat wel moet gebeuren. Zoals hier.
Dus...
Als ik nog wat dingen verder moet vertellen of met wat code moet strooien dan doe ik dat graag