[PHP / ALG] Verschil tussen twee pixels bepalen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
Stel, je hebt een plaatje. Als je nu voor iedere rij, voor iedere pixel het verschil met de vorige bepaald, kun je zien waar iets op het plaatje aan de hand is. (Of er een vierkant om heen zetten. Of automatisch bepalen welk deel van het plaatje je gaat gebruiken om een interessante uitsnijding voor thumbnails te maken!).

Alleen, hoe bereken je het verschil tussen twee pixels? Ik had bedacht om de rgb waarden als drie assen voor te stellen, en de twee pixels als punten in dat assenstelsel. Daarna kun je de afstand uitrekenen:

PHP:
1
2
3
4
5
6
7
8
9
10
 // vergelijk met de vorige pixel
 $a =& $inputData[$i][$j-1];
 $b =& $inputData[$i][$j];

 // Bereken het verschil met de vorige pixel. 
 $ab = floor(sqrt(
      pow(0.2125*abs($a['r'] - $b['r']),2) +
      pow(0.7154*abs($a['g'] - $b['g']),2) +
      pow(0.0721*abs($a['b'] - $b['b']),2)
      ));


Alleen, wanneer ik dat weer visualiseer, in een plaatje, krijg ik hetzelfde plaatje (maar dan met grijswaarden) weer terug in plaats van het gehoopte zwarte-lijnen spectakel. Er is dus blijkbaar iets mis met dit algoritme.

Hoe moet ik dit wél aanpakken? Iemand verstand van dit soort dingen?

[ Voor 12% gewijzigd door Skaah op 01-03-2005 00:10 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Voor beeldbewerking is het handiger om in eerste instantie gewoon met grijswaarde beelden te werken. Dit kun je interpreteren als een 3D oppervlak waarop je weer wiskunde los kunt laten. Ik vermoed dat je bezig bent met edge detection? Een simpele manier om dit te doen is door het beeld te differentieren. Hierbij zet je gewoon het verschil in grijdwaarden van twee naastliggende pixels. in een nieuw plaatje. Dit kun je in een aantal richtingen doen (aqfhankelijk van wleke naastliggende pixels je neemt). Probeer hier eerst eens een paar keer mee te experimenteren. Thuis heb ik nog wel een aantal boeken over edge detection en beeldbewerking liggen. Daar kan ik hier niet bij. Misschien later dus nog wel iets meer over kernels ed ;).

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