[PHP] hoe vind ik de positie van een hoek binnen afbeelding

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • NeFoRcE
  • Registratie: Mei 2004
  • Laatst online: 09-10 14:43

NeFoRcE

Hallo? Bent u daar?

Topicstarter
Dag,

Ik zal denk ik wel de gebruikte zoekwoorden verkeerd hebben, of ik ben de eerste die dit zoekt.. maar mijn vraag is als volgt:

Hoe vind ik de XY van de linker onderhoek van een willekeurig gedeelte van een afbeelding? Voorbeeld:

Afbeeldingslocatie: http://www.infobunker.nl/wp-content/uploads/2011/08/postzegel.jpg

Van bijvoorbeeld bovenstaande afbeelding zoek ik de beginpixel van de hoek waar het gekleurde gedeelte begint. Dus niet de kartelrand, maar de afbeelding an sich. Is zoiets überhaupt mogelijk?

Ik zat al op edge detection en corner detection te zoeken, maar dan krijg ik photoshop achtige resultaten...

Professioneel Heftruck Syndroom

Beste antwoord (via NeFoRcE op 15-03-2016 20:51)


  • BarôZZa
  • Registratie: Januari 2003
  • Laatst online: 17:22
Verbose zou inderdaad genoeg info terug moeten geven.

En anders kan je natuurlijk de uiterste pixels opzoeken, bij rechthoeken niet al te lastig.

Ik raad trouwens aan om gewoon imagemagick gewoon aan te roepen via http://php.net/manual/en/function.exec.php . De php library is niet altijd compleet en werkt een stuk onhandiger imo.

Alle reacties


Acties:
  • 0 Henk 'm!

Verwijderd

wat je zoekt is 'auto image crop' of 'auto image trim'. Dat geeft bv deze link op StackOverflow waarin de ImageMagick trim functie genoemd wordt. Zal voor clipart beter werken dan gescande afbeeldingen.

Je zou ook de thumbnail functie van MS project Oxford kunnen proberen. Niet direct bedoeld voor het trimmen maar de automatische uitsnedes zijn meestal prima.

Edit: Bij SO vraag noemt iemand seam carving. Mooi algoritme voor je probleem en zo leer ik ook wat nieuws door je vraag :)

[ Voor 13% gewijzigd door Verwijderd op 13-03-2016 09:35 ]


Acties:
  • 0 Henk 'm!

  • NeFoRcE
  • Registratie: Mei 2004
  • Laatst online: 09-10 14:43

NeFoRcE

Hallo? Bent u daar?

Topicstarter
Thanks! Ben even aan het stoeien gegaan, en heb eerst de brightness omhoog geknald zodat de kartelrand niet meer zichtbaar was, en vervolgens getrimd. Vet. Dank!

Professioneel Heftruck Syndroom


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
NeFoRcE schreef op zondag 13 maart 2016 @ 09:57:
Thanks! Ben even aan het stoeien gegaan, en heb eerst de brightness omhoog geknald zodat de kartelrand niet meer zichtbaar was, en vervolgens getrimd. Vet. Dank!
Je bent op zoek naar edge detection/shape detection. In dit geval is het denk het eenvoudigst om je image gewoon als zwart/wit ( enkel kanaal ) te behandelen, en er een eenvoudige edge detection kernel overheen te gooien. Het contrast is vrij groot, dus dan kun je redelijk eenvoudig het juiste punt vinden. Mocht je dan nog de verkeerde edge vinden kun je met een erosie kernel zorgen dat je minder gevoelig bent voor de kartel rand.

[ Voor 9% gewijzigd door Woy op 13-03-2016 10:54 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • NeFoRcE
  • Registratie: Mei 2004
  • Laatst online: 09-10 14:43

NeFoRcE

Hallo? Bent u daar?

Topicstarter
Woy schreef op zondag 13 maart 2016 @ 10:52:
[...]

Je bent op zoek naar edge detection/shape detection. In dit geval is het denk het eenvoudigst om je image gewoon als zwart/wit ( enkel kanaal ) te behandelen, en er een eenvoudige edge detection kernel overheen te gooien. Het contrast is vrij groot, dus dan kun je redelijk eenvoudig het juiste punt vinden. Mocht je dan nog de verkeerde edge vinden kun je met een erosie kernel zorgen dat je minder gevoelig bent voor de kartel rand.
Ik ben hier even mee aan het stoeien gegaan, maar ik kom er niet uit. Documentatie word ik niet bijzonder veel wijzer van. Zou je mij een duw in de richting kunnen geven wat betreft de PHP hiervan? Ik heb ook het gevoel dat je met exec() veel meer kunt bereiken, maar dat is niet op de hosting server toegestaan dacht ik.

Daarnaast is er nog een tweede issue bijgekomen. Hoe kan ik afbeeldingen automatisch laten uitlijnen door een horizon te vinden? Stel ik upload de postzegel maar deze is schuin ingescand. Hoe kan ik GD / Imagick dan deze toch recht positioneren? 'PHP Imagick find horizon' of iets dergelijks levert mij helaas niet de gewenste resultaten? :(

Professioneel Heftruck Syndroom


Acties:
  • +1 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Ik heb geen ervaring met PHP, dus op dat vlak kan ik je niet heel erg veel helpen. Met mijn snelle google ("image processing php kernel") kom ik hier op uit: http://php.net/manual/en/imagick.convolveimage.php

Als je eerst een Edge detection kernel gebruikt ( en daarna eventueel een erosion kernel om een juiste threshold te creëren ). Dan kun je in het resultaat zoeken op een lijn, als je de richting van die lijn berekend dan kun je een simpele rotatie uitvoeren om die lijn recht te zetten.

Voor een korte uitleg over image processing: Wikipedia: Kernel (image processing)

[ Voor 15% gewijzigd door Woy op 14-03-2016 10:39 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • +1 Henk 'm!

  • narotic
  • Registratie: Maart 2002
  • Laatst online: 02-11-2021
Als je dit goed aan wilt pakken heb je waarschijnlijk meer aan OpenCV dan aan imagemagick. Zie bijvoorbeeld de tutorial voor Automatic perspective correction for quadrilateral objects.

- = Step Into The Pit | Industrial Strength = -


Acties:
  • +1 Henk 'm!

  • BarôZZa
  • Registratie: Januari 2003
  • Laatst online: 17:22
NeFoRcE schreef op maandag 14 maart 2016 @ 10:23:
[...]


Ik ben hier even mee aan het stoeien gegaan, maar ik kom er niet uit. Documentatie word ik niet bijzonder veel wijzer van. Zou je mij een duw in de richting kunnen geven wat betreft de PHP hiervan? Ik heb ook het gevoel dat je met exec() veel meer kunt bereiken, maar dat is niet op de hosting server toegestaan dacht ik.

Daarnaast is er nog een tweede issue bijgekomen. Hoe kan ik afbeeldingen automatisch laten uitlijnen door een horizon te vinden? Stel ik upload de postzegel maar deze is schuin ingescand. Hoe kan ik GD / Imagick dan deze toch recht positioneren? 'PHP Imagick find horizon' of iets dergelijks levert mij helaas niet de gewenste resultaten? :(
Volgens mij doet dit precies wat je wil: http://php.net/manual/en/imagick.deskewimage.php

Voor de rest zou ik gewoon http://www.imagemagick.org/script/index.php checken, daar heb je enorm veel goed gegroepeerde documentatie met uitleg, plaatjes en dergelijke.

Acties:
  • 0 Henk 'm!

  • NeFoRcE
  • Registratie: Mei 2004
  • Laatst online: 09-10 14:43

NeFoRcE

Hallo? Bent u daar?

Topicstarter
Woy schreef op maandag 14 maart 2016 @ 10:37:
Ik heb geen ervaring met PHP, dus op dat vlak kan ik je niet heel erg veel helpen. Met mijn snelle google ("image processing php kernel") kom ik hier op uit: http://php.net/manual/en/imagick.convolveimage.php

Als je eerst een Edge detection kernel gebruikt ( en daarna eventueel een erosion kernel om een juiste threshold te creëren ). Dan kun je in het resultaat zoeken op een lijn, als je de richting van die lijn berekend dan kun je een simpele rotatie uitvoeren om die lijn recht te zetten.

Voor een korte uitleg over image processing: Wikipedia: Kernel (image processing)
Ik dev op een Windows bak met Xampp. Ik zag alleen al een paar keer dat bepaalde methodes van Imagick niet werken. Kijk ik in de docs, dan zie ik iets van; PECL 2.0.0 required. Mede daardoor heb ik je tips niet aan de praat kunnen krijgen.
narotic schreef op maandag 14 maart 2016 @ 10:53:
Als je dit goed aan wilt pakken heb je waarschijnlijk meer aan OpenCV dan aan imagemagick. Zie bijvoorbeeld de tutorial voor Automatic perspective correction for quadrilateral objects.
OpenCV heb ik naar gezocht, het enige wat ik alleen vind zijn libraries voor face-detection. Daarnaast kwamen dingen voorbij als dl('extension opencv') of iets dergelijks, wat al sinds php 5.3 removed is. Ook dit kreeg ik niet aan de praat helaas.
BarôZZa schreef op maandag 14 maart 2016 @ 12:34:
[...]

Volgens mij doet dit precies wat je wil: http://php.net/manual/en/imagick.deskewimage.php

Voor de rest zou ik gewoon http://www.imagemagick.org/script/index.php checken, daar heb je enorm veel goed gegroepeerde documentatie met uitleg, plaatjes en dergelijke.
Ik heb deze functionaliteit nu ingebouwd, en met enig succes. Scheef ingescande zegels worden rechtgetrokken. Daarnaast wordt het nu goed afgesneden d.m.v. een tresshold level.

Ik zit nu echter met nog 1 probleem. Hoe kom ik erachter of de deskew-methode de afbeelding linksom of rechtsom heeft gedraaid? Momenteel (maar dat is opzich een smerige oplossing) draai ik het origineel op deze manier:

- Imagick clone gemaakt van originele afbeelding
- Clone zwartwit gemaakt
- Deskewen van clone
- Clone heeft nu een breder formaat dan originele afbeelding
- Orignele afbeelding net zolang 'rotaten' met 0.1 graad, tot ie dezelfde breedte heeft als de deskewed image.


Maar ja, dan hang ik alleen nog met het feit... CW of CCW draaien, hoe kom ik daar achter?

Professioneel Heftruck Syndroom


Acties:
  • 0 Henk 'm!

  • narotic
  • Registratie: Maart 2002
  • Laatst online: 02-11-2021
Ik heb verder geen enkele ervaring met ImageMagick, maar volgens deze thread zou de hoek in de image artifacts opgeslagen moeten worden. Wellicht dat je wat terugkrijgt als je die uitleest.

- = Step Into The Pit | Industrial Strength = -


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • BarôZZa
  • Registratie: Januari 2003
  • Laatst online: 17:22
Verbose zou inderdaad genoeg info terug moeten geven.

En anders kan je natuurlijk de uiterste pixels opzoeken, bij rechthoeken niet al te lastig.

Ik raad trouwens aan om gewoon imagemagick gewoon aan te roepen via http://php.net/manual/en/function.exec.php . De php library is niet altijd compleet en werkt een stuk onhandiger imo.

Acties:
  • 0 Henk 'm!

  • NeFoRcE
  • Registratie: Mei 2004
  • Laatst online: 09-10 14:43

NeFoRcE

Hallo? Bent u daar?

Topicstarter
Dank allen!

Het is een combinatie geworden van meerdere oplossingen. Uiteindelijk is het exec() met imagick commands. Hierdoor was het mogelijk, om het hele script (incl allerlei testmeuk te reduceren van iets van 100 regels, naar slechts 1 regel. So far althans. Want hij zegt nu de afbeelding recht, zonder dat ik eerst de black thresshold moet aanpassen. Die commandline werkt echt way better dan de PHP lib. Dank nogmaals! Ik kan weer verder!

Professioneel Heftruck Syndroom

Pagina: 1