Toon posts:

[alg] vlak herkenning in een bitmap

Pagina: 1
Acties:

Verwijderd

Topicstarter
Naar aanleiding van een topic over vergelijking van plaatjes.

ik heb over dit soort dingen ook eens nagedacht, maar dan over net iets anders. Namelijk het herkennen van vlakken in een plaatje, dus gebieden met een kleine afwijking van kleurtinten.

Mijn idee (misschien totaal achterhaald) was om in een plaatje (bv: 200x200) een willekeurig vlakje van 32x32 te pakken en daar de gemiddelde kleur afwijking te nemen. Als dat minder is dan een bepaalde waarde (bv: 8, uitgaande van 0..255) dan ik het redelijk solide, is het meer dan bv 32 dan is het al weer iets te korrelig.

Mijn idee is dan om het vlakje in een bepaalde richting uit te breiden en dan weer te gemiddelde afwijking te berekenen. Als het resultaat beter is (een kleinere afwijking) dan breid je verder uit in die richting anders ga je de andere kant op. Tot je op een gegeven moment (alle kanten op) niet verder kan (omdat het alleen maar erger word) en dan heb je een vlakje herkend. (of iets wat er op lijkt)

Als je dit algoritme aanpast moet het ook mogelijk zijn andere figuren dan vierkanten te herkennen, lijkt mij.

Heeft iemand hier commentaar op, zou dit idee kunnen werken.
Het is puur theoretisch.

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
Hmz.
* chris snapt er nog niet zoveel van na 2 keer lezen.

  • TiG
  • Registratie: Maart 2001
  • Laatst online: 29-06 14:19

TiG

Maar wat als het vlak nou 64 x 64 is. Het lijkt me dat dan de bedoeling is dat dat hele vlak herkend word en niet alleen een klein deel ervan.

U gaat door voor de retorische vraag...


  • Nikel
  • Registratie: Juli 2000
  • Niet online
Als je gewoon vanuit elke pixel aan de rand van je huidige vlak naar alle aangrenzende pixels kijkt, in plaats van je hele vlak uit te breiden in een keer, dan herken je vanzelf ook andere figuren dan vierkanten.

  • Orphix
  • Registratie: Februari 2000
  • Niet online
wil je niet gewoon een soort magic wand principe?

  • MisterE
  • Registratie: April 2002
  • Laatst online: 09-09 21:28
oftewel, je bedoeld: (denk ik)

je deelt een pic op in vierkanten,van elk vlakje bereken je de gemiddelde kleur. dat doe je ook met het vergelijkingsplaatje.

en daarna ga je die gemiddelden vergelijken.

ALLEEN, bij deze manier, als van het 2e plaatje -laten we zeggen- een gedeelte van de linkerkant weg is dan klopt er dus helemaal niets meer van.

ten 2e, als het plaatje gemanipuleerd is (filters, enz) dan maakt ie er sowieso niets meer van, het vreemde van unique filer, is dat ie dat wel ontdekt....

  • Terror
  • Registratie: Juni 1999
  • Laatst online: 10:34
* Terror voorziet een probleem.

Stel je voor. Plaatje heel breed. Links naar rechts een hel;e geleidelijke overloop van blauw naar rood. (per pixel minder 8 afwijking) Dan zou het geheel als vlak herkent worden toch?

Dell XPS M1530 (Red) | T8300 | 4 GB | 750 GB 7200 rpm | 8600m GT | Wifi N | 1440x900 LG | 9 Cells | Windows 8.1 Pro x64


  • MisterE
  • Registratie: April 2002
  • Laatst online: 09-09 21:28
als je grootte van de vergelijksverkant even groot is als de overgang tussen de pixels heb je daar inderdaad kans op.
het gemiddelde blijft dan hetzelfde.

vraag me niet om die verhouding te berekenen :P

i denk, dat de enige mogelijkheid is, om patronen te zoeken.
vierkanten, rondjes of zoiets....

maar ja, hoe vergelijken mensen 2 plaatjes....als we dat eens wisten.

Verwijderd

Topicstarter
het idee is dat nadat je plaatje op deze manier hebt afgewerkt je plaatje hebt ingedeeld in redelijk effe vierkantejes, met verschillende grootte. Het is immers ontstaan door te verkleinen/vergroten en het beste resultaat te behouden. Nu kan je het plaatje globaal beschrijven aan de hand van die vierkantjes die een bepaalde tint hebben.

Maar misschien blaat ik idd wel wazige shit, misschien moet het algoritme maar eens gaan maken en kijken wat het doet.

  • Tsjipmanz
  • Registratie: Oktober 2000
  • Laatst online: 13-05 14:52

Tsjipmanz

Der Rudi ist da

Op zondag 14 april 2002 18:42 schreef MisterE het volgende:

oftewel, je bedoeld: (denk ik)

je deelt een pic op in vierkanten,van elk vlakje bereken je de gemiddelde kleur. dat doe je ook met het vergelijkingsplaatje.

en daarna ga je die gemiddelden vergelijken.
Dit is natuurlijk uitermate naief, zou niet weten wat je hiermee wilt bereiken. Het geval wil namelijk dat een gemiddelde nog niet veel zegt over de egaalheid van het vlak in kwestie. Simpel voorbeeld: 9 0-pixels en 1 255-pixel leveren hetzelfde op als 10 25-pixels (afronding buiten beschouwing gelaten).

There's no such thing as a mistake, just happy accidents - Bob Ross
Relaxte muziek: altijd okee!
- Soulseek rulez -


  • Tsjipmanz
  • Registratie: Oktober 2000
  • Laatst online: 13-05 14:52

Tsjipmanz

Der Rudi ist da

Op zondag 14 april 2002 16:54 schreef unteraarsch het volgende:

Mijn idee (misschien totaal achterhaald) was om in een plaatje (bv: 200x200) een willekeurig vlakje van 32x32 te pakken en daar de gemiddelde kleur afwijking te nemen. Als dat minder is dan een bepaalde waarde (bv: 8, uitgaande van 0..255) dan ik het redelijk solide, is het meer dan bv 32 dan is het al weer iets te korrelig.

Mijn idee is dan om het vlakje in een bepaalde richting uit te breiden en dan weer te gemiddelde afwijking te berekenen. Als het resultaat beter is (een kleinere afwijking) dan breid je verder uit in die richting anders ga je de andere kant op. Tot je op een gegeven moment (alle kanten op) niet verder kan (omdat het alleen maar erger word) en dan heb je een vlakje herkend. (of iets wat er op lijkt)

Als je dit algoritme aanpast moet het ook mogelijk zijn andere figuren dan vierkanten te herkennen, lijkt mij.

Heeft iemand hier commentaar op, zou dit idee kunnen werken.
Het is puur theoretisch.
Ik denk niet dat je op deze manier echt ver komt. Het basis-idee is in principe niet al te slecht, maar het moet nog even beter doordacht worden.

1) Wat ik hierboven ook al meldde, de gemiddelde afwijking zegt niet alles. Je zou dan beter voor de gemiddelde absolute afwijking kunnen gaan.

2) Je kan het beste vanuit 1 punt beginnen in plaats van uit een vlak, op deze manier herken je ook afwijkende vormen.

3) Je moet niet 1 kant opwerken en als het die kant op niet meer wil, pas de andere kant opwerken, maar je zou beter gebruik kunnen maken van een flood-fill-achtig principe: Je kijkt naar een (gekozen) pixel, en je gaat recursief alle buren af. Is de waarde van de buurpixel binnen een drempel-afstand van de begin-pixel, dan doet deze "mee" en ga je al zijn buurpixels ook recursief behandelen. Om te voorkomen dat je een smooth overgangsgebied als vlak krijg is het dus zaak om elke pixel met de begin-pixel te vergelijken, en niet de vorige.

In het geval van grijswaarden zou je datgene wat jij wilt doen prima kunnen doen met behuld van "flat zones" (en in het binaire geval "connected components"). Dergelijke algoritmes in kleur implementeren is alweer een stuk pittiger.

Het herkennen van figuren wordt trouwens al een stuk moeilijker, ik zou niet weten hoe jij aan de hand van een aantal pixels dat tot een vlak behoort snel en efficient wilt kijken wat voor vorm het heeft.

Naja succes in elk geval, als je leuke resultaten boekt ben ik wel erg benieuwd.

There's no such thing as a mistake, just happy accidents - Bob Ross
Relaxte muziek: altijd okee!
- Soulseek rulez -


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 09-09 20:58

Janoz

Moderator Devschuur®

!litemod

offtopic:
Tsjipmanz + ik zijn op dit moment met ongeveer dit onderwerp bezig :). We zijn een soort filter aan het maken die objecten in een 3D dataset (eigenlijk een stapel van 128 bitmaps op elkaar) selecteert. Wat hier nieuw aan is is dat wij een vorm criterium gebruiken die onafhankelijk van richting en schaal is.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Op maandag 15 april 2002 13:28 schreef Tsjipmanz het volgende:

3) Je moet niet 1 kant opwerken en als het die kant op niet meer wil, pas de andere kant opwerken, maar je zou beter gebruik kunnen maken van een flood-fill-achtig principe: Je kijkt naar een (gekozen) pixel, en je gaat recursief alle buren af. Is de waarde van de buurpixel binnen een drempel-afstand van de begin-pixel, dan doet deze "mee" en ga je al zijn buurpixels ook recursief behandelen. Om te voorkomen dat je een smooth overgangsgebied als vlak krijg is het dus zaak om elke pixel met de begin-pixel te vergelijken, en niet de vorige.
mijn idee was eigenlijk om echt een bitmapje in vierkantjes op te delen, omdat daar makkelijk mee te rekeken valt. Later zou je die vierkantjes eventueel samenkunnen voegen, tot andere vormen.

Het idee is dus eigenlijk om een bitmapje te versimpelen in voor een computer handelbaardere objecten (pixels).

(uiterst globaal) vb:
Afbeeldingslocatie: http://home.12move.nl/~se095545/forum/koe2.jpg

anyway, thanx for the replies

  • Tsjipmanz
  • Registratie: Oktober 2000
  • Laatst online: 13-05 14:52

Tsjipmanz

Der Rudi ist da

Wat wil je eigenlijk bereiken? En wat doe je met gebieden in je voorbeeld die nergens onder vallen? Of een circelvorm? Een omsluitend vierkant of n ingesloten vierkant?

There's no such thing as a mistake, just happy accidents - Bob Ross
Relaxte muziek: altijd okee!
- Soulseek rulez -


Verwijderd

Topicstarter
jah.. wat ik wil (hihi) ik weet het niet zo goed. Het leek me gewoon wel interessant om mee te klooien.

En dit leek mij een redelijke methoden om een plaatje op te delen in handelbare vlakken. Alleen als je ronde figuren krijgt, zit je waarschijnlijk opgescheept met een vierkant met allemaal kleine vierkantje eromheen. Maar mijn idee is dat daar makkelijker een rondje in te herkennen is als in alleen maar 1x1 pixelz

Verwijderd

Topicstarter
Op maandag 15 april 2002 13:46 schreef Janoz het volgende:
offtopic:
Tsjipmanz + ik zijn op dit moment met ongeveer dit onderwerp bezig :). We zijn een soort filter aan het maken die objecten in een 3D dataset (eigenlijk een stapel van 128 bitmaps op elkaar) selecteert. Wat hier nieuw aan is is dat wij een vorm criterium gebruiken die onafhankelijk van richting en schaal is.
kan je hier iets meer over vertellen, of is er een oude topic over. Klinkt wel interessant.

  • MisterE
  • Registratie: April 2002
  • Laatst online: 09-09 21:28
ik denk wat jullie moet doen, ff contact openemen met de maker van 'unique filer'. heb ooit wel eens de site gecheckt maar je kan daar niet echt vinden hoe het werkt.

http://www.uniquefiler.com/index.html
Pagina: 1