Acties:
  • 0 Henk 'm!

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 13-09 15:29
Is het mogelijk het histogram zoals je dat zo mooi ziet als je op het 'info'-knopje drukt direct naar de computer te downloaden? Of moet je dit met de 'hand' berekenen aan de hand van de foto als je dat wilt hebben?

Acties:
  • 0 Henk 'm!

  • Johnny
  • Registratie: December 2001
  • Laatst online: 17:26

Johnny

ondergewaardeerde internetguru

sjroorda schreef op 11 december 2002 @ 21:33:
Is het mogelijk het histogram zoals je dat zo mooi ziet als je op het 'info'-knopje drukt direct naar de computer te downloaden?
Nee
Of moet je dit met de 'hand' berekenen aan de hand van de foto als je dat wilt hebben?
Nee

Een beetje beeldbewerkingsprogramma heeft een histogram functie ingebouwd, deze wordt dan wel opnieuw berekend, de histogram zit niet los bij de foto.

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


Acties:
  • 0 Henk 'm!

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 13-09 15:29
Johnny64 schreef op 11 december 2002 @ 22:16:
Nee

Een beetje beeldbewerkingsprogramma heeft een histogram functie ingebouwd, deze wordt dan wel opnieuw berekend, de histogram zit niet los bij de foto.
Sorry, misschien had ik het doel erbij moeten noemen: heb een db'tje (PHP+MySQL) waarin ik mijn eigen fotoboek bijhoud, en zoiets lijkt me ook leuk om erbij te hebben. Ik zal het ongetwijfeld ook wel zelf kunnen proggen, maar als er standaard manieren bestaan is dat natuurlijk mooi meegenomen ;) Heb in GD-lib niets kunnen vinden, ook met Google niet veel (althans, kant-en-klare scripts), dus misschien toch maar eens in gaan kijken in hoeverre ik dat zelf kan programmeren...

Acties:
  • 0 Henk 'm!

  • Puck
  • Registratie: November 2001
  • Laatst online: 13-09 12:22

Puck

W32.Deadcode.A

Lijkt me wel handig..mocht je iets vinden/maken, post het ook hier dan even ;)

Arrived anxious, left bored


Acties:
  • 0 Henk 'm!

  • T.T.
  • Registratie: April 2000
  • Laatst online: 15-07 15:34

T.T.

Sowieso

het histogram telt toch alleen hoeveel pixels binnen een bepaald "intensiteits-interval" liggen? Wanneer je dus met GD-lib pixel-waarden kan uitlezen, zou je het zelf kunnen maken?

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 13-09 15:29
T.T. schreef op 11 december 2002 @ 22:57:
het histogram telt toch alleen hoeveel pixels binnen een bepaald "intensiteits-interval" liggen? Wanneer je dus met GD-lib pixel-waarden kan uitlezen, zou je het zelf kunnen maken?
Dat is zeker waar; iets waar ik ook niet direct voor terugdeins (dus PuCK, hou het topic in de gaten :P), maar ik weet dan geen andere manier dan pixel-voor-pixel te werk te gaan, en dat gaat niet zo snel... Maar ik zal klussen!

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 13-09 15:29
PuCK (en natuurlijk alle anderen die hier iets aan hebben): mijn eigen code is af... Deze code (PHP-code, want ik gebruik hem in mijn online fotoboek) maakt een afbeelding van 255 pixels breed, waarin de frequentie van de intensiteiten staan. Zie voor uitleg van de code onderaan.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
    // Afbeelding inladen
    $img = imagecreatefromjpeg("afbeelding.jpg");

    // Lege histogram-array laden
    $hist = array_fill(0, 255, 0);
    
    // Afbeelding aflopen en intensiteiten berekenen
    for ($y = 0; $y < imagesy($img); $y++)
        for ($x = 0; $x < imagesx($img); $x++)
        {
            $rgb = imagecolorat($img, $x, $y);
            $r = ($rgb >> 16) & 0xFF;
            $g = ($rgb >> 8) & 0xFF;
            $b = $rgb & 0xFF;
            $index = ($r + $g + $b) / 3;
            $hist[$index]++;
        }
    
    $histogram   = imagecreate(258, 103);
    $bordercolor = imagecolorallocate($histogram, 0, 0, 0);
    $bgcolor     = imagecolorallocate($histogram, 100, 100, 100);
    $graphcolor  = imagecolorallocate($histogram, 255, 255, 255);
    
    imagefill($histogram, 0, 0, $bgcolor);
    imagerectangle($histogram, 0, 0, 257, 102, $bordercolor);
    
    $max = max($hist);
    $factor = 100 / $max;
    for ($i = 0; $i < count($hist); $i++)
        imageline($histogram, $i + 1, 101, $i + 1, 101 - round($hist[$i] * $factor), $graphcolor);
    
    imagepng($histogram, "histogram.png");
    
    // Afbeeldingen uit geheugen verwijderen
    imagedestroy($img);
    imagedestroy($histogram);


r. 2: Ik begin met het inlezen van een afbeelding; dit kan je natuurlijk overslaan als je al met een afbeelding bezig bent waar je het histogram van wilt hebben (let er dan op dat wellicht de variabele $img een andere naam heeft).

r. 5: Initieer een lege intensiteiten-array.

r. 8: Ga elke pixel van de afbeelding af, haal de rood-, groen- en blauwcomponenten uit die pixel, bereken het gemiddelde van deze drie (tenminste, ik ga ervan uit dat ik zo de intensiteit goed bereken; de plaatjes lijken wel op die in Photoshop), en update het histogram met deze waarde.

r. 19: Maak een nieuwe afbeelding aan voor het histogram, initieer een paar leuke kleurtjes en maak een leuk randje

r. 27: Schaal het histogram tot je een maximum van 100 hebt (bereken de schaalfactor en schaal alle totalen).

r. 32: Schrijf afbeelding naar de schijf (je kan hem natuurlijk ook direct uitvoeren naar de browser, of een ander type afbeelding van maken).

r. 35: Verwijder de gebruikte afbeeldingen uit het geheugen.

Een opmerking bij deze code: als je een foto hebt met een (zeer) groot gedeelte van een bepaalde intensiteit, bijvoorbeeld zwart of wit (onder- dan wel overbelichte foto's), dan wordt deze hoge intensiteit naar 100 geschaald, en zal de rest geheel of gedeeltelijk wegvallen. Een oplossing hiervoor is schalen naar gemiddelde of zo (ik geloof dat Photoshop zoiets doen), maar dat is voor eigen creativiteit ;).

Voorbeeld van wat er uit kan komen (een te donkere, dus vertekende, en een goede):

Afbeeldingslocatie: http://student.twi.tudelft.nl/~sjroorda/histogram1.png

Afbeeldingslocatie: http://student.twi.tudelft.nl/~sjroorda/histogram2.png
Pagina: 1