vergelijk afbeeldingen
Ik zou graag iets maken dat afbeeldingen vergelijkt. Als ik een bepaalde afbeelding heb, zou ik graag mijn DB willen door zoeken om te kijken of deze afbeelding al bestaat im mijn DB.
Ik zou natuurlijk gewoon alle pixels kunnen vergelijken per afbeelding. Maar dit gaat natuurlijk zeer lang duren als je een paar duizend afbeeldingen hebt. Heeft iemand een idee hoe ik dit beter kan aan pakken.
Bvd PP
Ik zou natuurlijk gewoon alle pixels kunnen vergelijken per afbeelding. Maar dit gaat natuurlijk zeer lang duren als je een paar duizend afbeeldingen hebt. Heeft iemand een idee hoe ik dit beter kan aan pakken.
Bvd PP
a) "Als ik een bepaalde afbeelding heb, zou ik graag mijn DB willen door zoeken om te kijken of deze afbeelding al bestaat im mijn DB."
waarim wil je dit?
b) hebben de afbeeldingen dezelfde naam?
waarim wil je dit?
b) hebben de afbeeldingen dezelfde naam?
Ik wil een soort van search functie maken. Bezoekers geven een URL op, of uploaden een afbeelding die daarna vergeleken wordt met de andere afbeeldingen in mijn DB. het is een soort van tineye.com alleen dan op kleinere schaal natuurlijk.
De afbeeldingen hebben niet de zelfde bestandsnaam. Ik zou graag willen weten hoe ik zoiets aanpak.
De afbeeldingen hebben niet de zelfde bestandsnaam. Ik zou graag willen weten hoe ik zoiets aanpak.
je zou de kleur waarden van de foto's kunnen gaan vergelijken en dan kijken welke het er dicht bij zitten
Probeer dit eens...
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
if (md5(file_get_contents($foto1)) == md5(file_get_contents($foto2))) {
echo "Foto 1 en foto 2 zijn gelijk.";
} else {
echo "Foto 1 en foto 2 zijn niet gelijk.";
}
?>
if (md5(file_get_contents($foto1)) == md5(file_get_contents($foto2))) {
echo "Foto 1 en foto 2 zijn gelijk.";
} else {
echo "Foto 1 en foto 2 zijn niet gelijk.";
}
?>
Om het snel te houden zou ik de md5 hash van de image opslaan in een aparte kolom, dan kun je gewoon een db query doen op de hash.
Wel een index zetten op de hash anders krijg je een onzettend trage server!
De md5 hash methode werkt perfect. Wanneer de afbeelding precies hetzelfde is. Maar wanneer de kwaliteit of iets anders is veranderd dan zal deze methode niet werken.
Nou ben ik dus verder gaan zoeken en heb een script die de meest voor komende kleuren telt. Mijn probleem is nu hoe kan ik deze kleuren die ik in een array heb gestopt vergelijken.
Als alles precies het zelfde is, is dit geen probleem.
Maar wanneer de kleuren net iets afwijken van het origineel dan is het een heel ander verhaal. Heeft iemand enig idee hoe ik dit voor elkaar kan krijgen.
De afbeeldingen zijn na genoeg gelijk alleen is het donkere vlak iets lichter. Hoe kan ik er voor zorgen dat die ziet dat de kleuren na genoeg gelijk zijn. En dat de gelijkenis bijvoorbeeld 90% is of iets dergelijks.
Bijvoorbeeld:
Origineel:

Kopie:

Nou ben ik dus verder gaan zoeken en heb een script die de meest voor komende kleuren telt. Mijn probleem is nu hoe kan ik deze kleuren die ik in een array heb gestopt vergelijken.
Als alles precies het zelfde is, is dit geen probleem.
Maar wanneer de kleuren net iets afwijken van het origineel dan is het een heel ander verhaal. Heeft iemand enig idee hoe ik dit voor elkaar kan krijgen.
De afbeeldingen zijn na genoeg gelijk alleen is het donkere vlak iets lichter. Hoe kan ik er voor zorgen dat die ziet dat de kleuren na genoeg gelijk zijn. En dat de gelijkenis bijvoorbeeld 90% is of iets dergelijks.
Bijvoorbeeld:
Origineel:

Kopie:

Gewijzigd op 02/05/2011 18:53:25 door peter paul
Ik denk dat wat jij wilt dat je dat niet moet willen. Of het is exact gelijk... of het is niet gelijk. Iets er tussenin is niet te doen of zal een eeuwigheid duren om te controleren.
Kun je niet van beide afbeeldingen kleuren in een array pleuren zo hoe je net deed? En dan kijken hoeveel values het zelfde zijn en daar het percentage gelijkenis berekenen?
Dit begint op machine learning te lijken, en dat is een vakgebied ... gaat net iets verder dan hobby'en.
Anyway, de percentages over de kleuren berekenen is niet haalbaar, er zijn teveel variaties mogelijk.
Wat je zou kunnen proberen is je plaatje converteren naar een zwartwit plaatje, en daar de md5 van nemen, en die met elkaar vergelijken.
Anyway, de percentages over de kleuren berekenen is niet haalbaar, er zijn teveel variaties mogelijk.
Wat je zou kunnen proberen is je plaatje converteren naar een zwartwit plaatje, en daar de md5 van nemen, en die met elkaar vergelijken.
Toch lijkt het me wel gaaf om zoiets te maken, als ik er voor betaalt kreeg dan haha. Ik denk dat je met GD-lib toch best ver zou kunnen komen. Het zal inderdaad niet snel zijn.
Het moet theoretisch wel kunnen en er zijn al programma's die het kunnen. Je zult beide afbeeldingen moeten scannen op kleuren die gebruikt worden en deze bijv opslaan in een array map. Van de primary afbeelding loop je door de array heen en ga je per kleur bekijken welke kleur in de andere afbeelding het dichste bij komt. Het verschil sla je op per kleur die je vergelijkt. Vervolgens kun je dan aan de hand van een score te berekenen hoe goed de kleuren overheen komen met de andere afbeelding.
Om het nog beter te maken zou je ook naar de positie van de kleur moeten kijken en daar de afwijking in registreren maar dat is wel erg heftig ;)
Het moet theoretisch wel kunnen en er zijn al programma's die het kunnen. Je zult beide afbeeldingen moeten scannen op kleuren die gebruikt worden en deze bijv opslaan in een array map. Van de primary afbeelding loop je door de array heen en ga je per kleur bekijken welke kleur in de andere afbeelding het dichste bij komt. Het verschil sla je op per kleur die je vergelijkt. Vervolgens kun je dan aan de hand van een score te berekenen hoe goed de kleuren overheen komen met de andere afbeelding.
Om het nog beter te maken zou je ook naar de positie van de kleur moeten kijken en daar de afwijking in registreren maar dat is wel erg heftig ;)




