[Alg] Plaatjes fuzzy vergelijken

Pagina: 1
Acties:
  • 143 views sinds 30-01-2008
  • Reageer

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 15-05 14:44

_Thanatos_

Ja, en kaal

Topicstarter
Laat ik eerst es uitleggen wat ik bedoel met fuzzy: Je kunt van een plaatje een "fuzzy code" berekenen die een soort CRC is voor een plaatje, met als verschil dat de fuzzy code gebaseerd is op de inhoud van het plaatje, in plaats van op de binaire data. Door deze fuzzy codes met elkaar te vergelijken, kun je dus aan programma schrijven dat plaatjes opzoekt die op elkaar lijken. Met "op elkaar lijken" bedoel ik dan dus dat het ene plaatje bijvoorbeeld sterkere JPEG compressie heeft, of een spam-tag, of een andere grootte dan de ander.

Er is al een programma die dit kan, nml Unique Filer. En ik was dus zeer geinteresseerd in het algoritme dat zij gebruiken. Weet iemand hier meer over?

Mijn ultieme doel is dan om een zelfde soort programma te schrijven dat ook automatisch van iedere set op-elkaar-lijkende plaatjes die met de beste kwaliteit uitzoekt.

日本!🎌


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:32

.oisyn

Moderator Devschuur®

Demotivational Speaker

Bij ons op de universiteit hebben ze onderzoek gedaan naar het berekenen van de 'afstand' tussen 2 plaatjes, even zoeken...

.edit: hmm kan het niet echt vinden. Ik kwam wel bij deze uit: Pattern matching using similarity measures. (is een ftp dir)

En ik kan je wel vertellen: het is geen lichte stof ;)

[ Voor 50% gewijzigd door .oisyn op 17-12-2003 17:13 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • MisterE
  • Registratie: April 2002
  • Laatst online: 19-04 12:43
Mij heeft hier ooit ook een vraag ovver gesteld, daar kreeg ik ook wat antwoorden op. Het is iig niet makkelijk zoiets te maken.
Dus je kan mijn touwtje hierover ff zoeken...

  • Hu9o
  • Registratie: Mei 2001
  • Laatst online: 14:40

Hu9o

Schokkend

Je kan toch ook gewoon kijken hoeveel procent van het plaatje rode pixels heeft. (gem van alle rood waardes. Vervolgens alle plaatjes afzoeken en ook dit percentage bepalen. Vervolgens kan je stellen dat als beide percentages niet meer dan 0.1 procent afwijken ze wellicht op elkaar lijken.

Uiterraard is dit niet foolproof, daar ben ik ook van bewust en ook niet erg resource efficient. Maar denk dat het toch werkt.

>>>>>>>>>>>>>>>>>>>>>>>>>Vertel Microsoft over dit probleem <<<<<<<<<<<<<<<<<<<<<<<<<


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

M'n vriendin heeft hierover een practicum/vak gehad met Matlab, was hoop geemmer met Fourier-transformaties e.d. voor zover ik me kan herinneren. In haar geval ging het om een biomedisch stuk programmatuur dat automatisch uit rontgenfoto's afwijkingen (kanker e.d.) kon herkennen, en voor de test deden ze gezichtsherkenning.

* curry684 gaat z'n vriendin eens vragen of ze zin heeft hier te reageren :P

edit:
is trouwens geen Delphi-specifiek probleem, topic renamed naar [Alg] :)

[ Voor 10% gewijzigd door curry684 op 17-12-2003 22:49 ]

Professionele website nodig?


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Wat zijn je mogelijke verschillen? Er is een groot aantal dimensies waarlangs plaatjes kunnen verschillen. Stel, ik neem een plaatje B. Ik verschuif alle pixels over een afstand van 1 langs de x-as, en dat plaatje noem ik V. Plaatje K maak ik door bij alle pixels de roodwaarde met 1 te verhogen. Wat is dan de verhouding tussen d(B,V) en d(B,K) ? En d(V,K)? Is dat d(B,V)+d(V,K) ?

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Verwijderd

Tijdje geleden ook eens gebouwd gebaseerd op een artikel dat met een HaarWavelet wat coefficienten berekende.
'k Heb de sources nog liggen en het werkte wonderschoon! Het algoritme was heerlijk ongevoelig voor dingen als teksten over plaatjes, etc.

Het enige nadeel was dat het progje in PHP nogal lang deed over het berekenen van een signatuur: ca. 6 seconden op een dual processor server.
Het zoeken in de database was best snel, hoewel de queries draken waren.

'k Wil de sources wel posten, maar daar mag een modje eerst even toestemming voor geven O-) (ca. 200 regels voor het berekenen van signaturen)

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15:26

Janoz

Moderator Devschuur®

!litemod

Hu9o schreef op 17 december 2003 @ 22:46:
Je kan toch ook gewoon kijken hoeveel procent van het plaatje rode pixels heeft. (gem van alle rood waardes. Vervolgens alle plaatjes afzoeken en ook dit percentage bepalen. Vervolgens kan je stellen dat als beide percentages niet meer dan 0.1 procent afwijken ze wellicht op elkaar lijken.

Uiterraard is dit niet foolproof, daar ben ik ook van bewust en ook niet erg resource efficient. Maar denk dat het toch werkt.
En toen was het plaatje een tikkeltje donkerder of roder gemaakt waardoor het plaatje nog steeds (voor het oog) hetzelfde is, maar procentueel al helemaal nergens meer op lijkt ;)


Waarschijnlijk zul je het inderdaad in de hoek van de fourier reeksen moeten zoeken. Zodra het plaatje getransformeerd is naar het frequentie domein is het vergelijken van vormen wat makkelijker.

@jigal : Het lijkt me makkelijker om het als een linkje op te nemen.

[ Voor 4% gewijzigd door Janoz op 18-12-2003 09:17 ]

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


Verwijderd

Een mogelijke manier om zoiets te doen is door een zwart-wit contrast-foto van het originele te maken met ongeveer evenveel wit- als zwart-waarden. (50% van de pixels wit en 50% van de pixels zwart).
Van hieruit zou je een scan kunnen doen om alles om te zetten in vector graphics. Die vector graphics kan je opslaan met weinig data en kunnen makkelijk geschaald worden als je twee foto's vergelijk met verschillende groottes.
Bij het vergelijke zelf zet je de 2 vectorgraphics foto's bovenop elkaar en ga je kijken hoeveel zwart en wit pixels er overeen komen.

Kort samengevat:
1) Lees afbeeldingen
2) Zet om naar zwart/wit met 1/1 zwart/wit verdeling
3) Analyseer ze en zet om naar vectorgraphics
4) Om te vergelijken: zet vectorgraphics om in zwart-wit bitmap en gebruik and-operator

Bvb:

Vectorgraphics foto omgezet naar zwart/wit, resultaat:
11111
10001
11111
11111

2de foto:
11111
10011
11111
11111

Vergeleken, met and operator:
11111
11101
11111
11111

Hier zien we dat er slechts 1 pixel niet overeenkomt, dus de foto is 95% gelijk aan de andere.

Natuurlijk is het omzetten van de foto in vector graphics geen eenvoudige karwij ;)

[ Voor 18% gewijzigd door Verwijderd op 18-12-2003 10:22 ]


  • Lurge
  • Registratie: Maart 2000
  • Niet online

Lurge

ActueleWind

Janoz schreef op 18 december 2003 @ 09:16:
[...]

@jigal : Het lijkt me makkelijker om het als een linkje op te nemen.
mmh, lijkt me beter als ie de source hier post want als het hier staat blijft het tenminste staan voor de search, anders heb je dik kans dat het over een paar maanden niet meer bereikbaar is en weer word gevraagd. (toch?)

[ Voor 34% gewijzigd door Lurge op 18-12-2003 10:23 ]

ActueleWind


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Verwijderd schreef op 18 december 2003 @ 01:21:
'k Wil de sources wel posten, maar daar mag een modje eerst even toestemming voor geven O-) (ca. 200 regels voor het berekenen van signaturen)
Ben ik eigenlijk wel benieuwd naar, maar dan idd wel als linkje zoals Janoz aangeeft :) Eventueel de absolute kernpunten hier inline voor het archief, maar 200 regels code is gewoon niet echt handelbaar op het forum. Mocht de hosting een gevaar zijn regel ik wel dat het op faq.tweakers.net gemirrored wordt :Y)

M'n vriendin is ondertussen op zoek naar de documentatie over het systeem dat ze toen met Mathematica (geen Matlab dus) hebben gemaakt.

[ Voor 20% gewijzigd door curry684 op 18-12-2003 11:01 ]

Professionele website nodig?


  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
ditto interesse ;)

ooit ergens gelezen dat je eigenlijk de morph ruimte kunt pakken (4D veld) en dan de energie meten om de ene te laten morphen naar de andere. Siggraph papertje die ik helaas niet kan terugvinden.

zelf heb ik al realtime trackin van simpele objects gecreerd maar dit is niet zo mooi (denk ik) (iets met dawson notatie ofzo die bedoelt is om de vorm van bepaalde delen van de picture uniform weer te geven (ie: scale en rotation-less), agh tis allemaal weer tijdje geleden) als de moderne wavelet 'gevallen'.

ik geloof dat de lekkerste gevallen nog steeds met Neural Nets werken. Ook zat in een test versie van DB2 van IBM geloof ik zo'n zoek op vorm van een image. ie: teken een bloem (simpel) dan zoek en dat vind ie de images met daarin een "bloem" (of een bommenwerper in de vorm van een bloem of coz ;) ).

edit: die unique filer lijkt trouwens niet bestand tegen "rotation" (of staat toch niet op de site). dus lijkt een histogram en normalised colorspace wel een optie.

[ Voor 11% gewijzigd door hobbit_be op 18-12-2003 12:29 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

hobbit_be schreef op 18 december 2003 @ 12:26:
ik geloof dat de lekkerste gevallen nog steeds met Neural Nets werken.
Neurale netwerken kunnen het beste werken, echter het grootste nadeel van een neuraal netwerk is dat het niet objectief oordeelt maar voor 100% afhankelijk is van z'n training. Je moet het ding dus een aantal plaatjes van een bloem voeren, en daarna 1000+ plaatjes erdoorheen draaien en iedere keer melden of hij al of niet gelijk heeft met z'n melding dat het al of niet een bloem is.

Dit is voor zwart-wit plaatjes al complexe code, full-colour is het gewoon crimineel moeilijk en langzaam. Moderne wiskunde doet ook wonderen als het puur om 'mate van gelijkheid' gaat :)

Professionele website nodig?


  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
offtopic:
curry kent blijkbaar zoek de tank in het veld verhaal ;)

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

hobbit_be schreef op 18 december 2003 @ 12:34:
offtopic:
curry kent blijkbaar zoek de tank in het veld verhaal ;)
Hum nee maar ik kan me er wel iets bij voorstellen, vertel eens :P

Professionele website nodig?


  • -=bas=-
  • Registratie: Oktober 2000
  • Laatst online: 22-04-2025
Mijn ultieme doel is dan om een zelfde soort programma te schrijven dat ook automatisch van iedere set op-elkaar-lijkende plaatjes die met de beste kwaliteit uitzoekt.
Je zal ook duidelijk moeten definieren wat 'de beste kwaliteit' omvat. Met bestaande algoritmen kan je bepalen of een plaatje gelijkenis vertoond (in een bepaalde mate). Maar een computer kan bijvoorbeeld niet echt eenvoudig 'zien' of een plaatje onscherp is.

Dit onderwerp is idd voldoende om een hele studie aan te wijden. :)
Ik kan wel een aantal technieken opsommen, maar om er iets mee te doen kan je beter met Google aan de slag gaan.
Eenvoudig ff iets bouwen is er niet bij, maar dat was denk ik al duidelijk geworden.

Senile! Senile Oekaki


  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

curry684 schreef op 18 december 2003 @ 12:36:
Hum nee maar ik kan me er wel iets bij voorstellen, vertel eens :P
VS had een neuraal netwerk gemaakt om russische tanks te herkennen.

Toen het ding eindelijk 'in het echt' ging werken, bakte het neurale netwerk er niks van.

Wat bleek nu? De voorbeelden van Russische tanks waren allemaal brakke spionage-foto's, en de voorbeelden van 'vriendelijke' tanks waren prachtige scherpe kleurenplaatjes. Tsja... wat heb je dan geleerd... :-)

Siditamentis astuentis pactum.


  • Bzzje
  • Registratie: November 2000
  • Laatst online: 26-05 21:36

Bzzje

Negeren is vooruitzien

Een simpele manier die gebruikt wordt is om het plaatje op te delen in een x-tal vlakjes (stel 10 bij 10, dus 100 vakjes)
Per vlakje dan de gemiddelde waarde nemen en die kan je dan onderling vergelijken.

Door de grootte (of hoeveelheid) van vlakjes te veranderen kan je gedetailleerder te werk gaan en het maakt (bijna) niet uit wat de resolutie van het plaatje is, omdat hij een gemiddelde neemt en evenveel vergelijkpunten houdt.

Negeren is vooruitzien


  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
Varienaja schreef op 18 december 2003 @ 12:41:
[...]

VS had een neuraal netwerk gemaakt om russische tanks te herkennen.
zijn er dus twee versie van dat verhaal, volgens mij is dit al de 'sequel'. De documentaire ging over een NN dat voor een bepaalde foto moest bepalen of er een tank inzat ja dan nee. Leerden ze hem met honderden pics en werkte 99.9%.

Toen de presentatie kwam mocht de gov zelf ook een paar nieuwe pics nemen. Noppes. Geen enkele logica te ontdekken - resultaat was volledig random.

Hebben de dudes zelf alles eens bekeken en wat bleek. In de originele fotosessie waren alle fotos MET tank getrokken met overtrokken weer en diegene zonder op 'open' dag. Hun duur NN machine kon dus het verschil onderscheiden tussen bewolkt of zonnig ;).

Urban legend denk ik niet want op BBC gezien.

edit:
http://sarpresults.ivv.na...-Task_1-Deliverable_1.pdf
bottom p7.

[ Voor 8% gewijzigd door hobbit_be op 18-12-2003 13:15 ]


Verwijderd

Als je fuzzy wilt vergelijken zul je "statistische" gegeven uit plaatjes moeten halen en met "foutmarges" moeten werken.
Een heel simpele methode zou kunnen zijn om een plaatje in een X aantal vlakken te verdelen (bijvoorbeeld 10x10) en van elk vlak de gemiddelde kleur te berekenen. Als je nu twee plaatjes op deze manier verwerkt krijg je twee van die "thumbnails". Nu kan je een simpele vergelijking doen op afwijking zoals de maximale afwijking voor één pixel van de thumbnails of de maximale afwijking van alle pixels uit de thumbnail bij elkaar.
De thumbnails zijn nodig om verschaling van de plaatjes te neutraliseren (je kan er altijd nog voor kiezen om de resolutie van de thumbnail zo groot te maken als het grootste te vergelijken plaatje bijvoorbeeld).
Zodra je niet meer in RGB maar in bijvoorbeeld HSL/HSV colorspace werkt kun je bijvoorbeeld algehele intensiteits of saturatie verschillen negeren of zelf compleet in hue verschoven versies als "gelijk" zien indien dit nodig is.
Je gemiddelden voor de "thumbnails" kan je eventueel dmv gaussian (of zoals eerder genoemd; fourier) bepalen of je kan andere trucs gebruiken, bijvoorbeeld ook de afwijking binnen een pixel van één thumbnail of extra resolutie voor bepaalde delen van plaatjes bijhouden. De sleutelwoorden zijn "statistiek" en "marges".

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15:26

Janoz

Moderator Devschuur®

!litemod

Verwijderd schreef op 18 december 2003 @ 10:19:

Kort samengevat:
1) Lees afbeeldingen
2) Zet om naar zwart/wit met 1/1 zwart/wit verdeling
3) Analyseer ze en zet om naar vectorgraphics
4) Om te vergelijken: zet vectorgraphics om in zwart-wit bitmap en gebruik and-operator
Waarom omzetten naar vector en vervolgens weer een bitmap maken? DAn kun je beter gewoon rechtstreeks herschalen.

Het probleem waar jou algoritme verder tegenaan gaat lopen is dat het foto's niet meer als hetzelfde oordeelt waneer van de ene foto een randje afgehaald is.

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


Verwijderd

'k Heb net de sources naar Curry684 gestuurd, zodat ze in de archieven kunnen worden opgenomen...

Voor de informatiehongerigen:

De poging was gebaseerd op:
http://grail.cs.washington.edu/projects/query/

Ander leuk materiaal (andere methode):
http://www.dsi.unive.it/%7Eauce/docs/spie97b.pdf
http://www.dsi.unive.it/%7Eauce/docs/spie97a.pdf

De query die nodig is, is inderdaad een draak, maar levert wel een mooi gesorteerde lijst met de meestlijkende image bovenaan.

Een leuke toepassing hiervoor is het voorkomen van "dubbelen" in een verzameling images. Als je editor maakt die classificaties van images opslaat, kun je meteen ook zoeken naar gelijkende images en daar de beste 6/8 ofzo als thumbnail tonen. Hierdoor kun je eenvoudig beoordelen of hetzelfde plaatje al in de db zit. Werkt echt superdeluxe! :-)

Verwijderd

Janoz schreef op 18 december 2003 @ 13:59:
[...]

Waarom omzetten naar vector en vervolgens weer een bitmap maken? DAn kun je beter gewoon rechtstreeks herschalen.

Het probleem waar jou algoritme verder tegenaan gaat lopen is dat het foto's niet meer als hetzelfde oordeelt waneer van de ene foto een randje afgehaald is.
Dat omzetten doe je als je de afbeelding wil opslaan.
Als je 2 foto's later dan wil vergelijken, dan hoef je niet telkens opnieuw dat zwart-wit equivalent te maken vanuit de originele afbeelding. Zelf stelde ik voor om gewoon het contrast zo aan te passen opdat de zwart-wit verhouding 50% werd en om vandaaruit dan de vectorgraphics te maken. Er zou natuurlijk een betere manier kunnen gevonden worden om de bitmap om te zetten naar een zwart-wit foto en dit zou meer tijdsintensief kunnen zijn, vandaar dat ik alle gevonden vectoren zou opslaan ipv de bitmap zelf.
Ook is het mogelijk om nog preciezer data te vergelijken dmv de vectoren onderling, ipv ze eerst om te zetten naar een zwart-wit bitmap. Maw: je kan bepaalde foutcorrectie gaan onderzoeken. 't Is eigenlijk moeilijk uit te leggen zonder praktische voorbeelden :/
En deze methode is tenslotte maar een snel hersenspinsel :p

[ Voor 1% gewijzigd door Verwijderd op 18-12-2003 17:20 . Reden: spelingsfaut :P ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Verwijderd schreef op 18 december 2003 @ 14:36:
'k Heb net de sources naar Curry684 gestuurd, zodat ze in de archieven kunnen worden opgenomen...
Het kostte moeite, maar met dank aan moto-moi en euss dan: http://faq.tweakers.net/pw/imgsig.php.txt :)

En dankzij Rafe dan ook syntaxhighlighted :X
http://faq.tweakers.net/pw/imgsig.phps

[ Voor 13% gewijzigd door curry684 op 18-12-2003 18:55 ]

Professionele website nodig?


  • Skaah
  • Registratie: Juni 2001
  • Niet online
curry684 schreef op 18 december 2003 @ 18:47:
[...]

Het kostte moeite, maar met dank aan moto-moi en euss dan: http://faq.tweakers.net/pw/imgsig.php.txt :)

En dankzij Rafe dan ook syntaxhighlighted :X
http://faq.tweakers.net/pw/imgsig.phps
is er ook een omschrijving van de database settings (table design) beschikbaar?

  • djlinsen
  • Registratie: September 2002
  • Laatst online: 14:57

djlinsen

Well suffer my pretty warriors

Op de TU delft is er een groep mensen met patroon herkenning bezig, mischien kan je op hun site nog wat nieuws vinden http://www.ph.tn.tudelft.nl/
Ik ben zelf zelf even bezig geweest met patroon herkenning en gekomen tot gebalanceerde historgrammen enzo, maar die neural networks en de fuzzy logic zijn net wat tehoog voor mij gegrepen. Bibliotheken op universiteiten staan trouwens vol met literatuur over dit onderwerp. Faculteiten electrotechniek, informatica en natuurkunde hebben er zeker iets over staan, dus als je toegang hebt tot zo'n bibliotheek is het zeker de moeite waard om daar even te gaan rond neuzen. Een Boek dat ik zelf gebruikt heb is: Digital Image Processing Gonzalez & Wintz, maar ik weet niet meer of deze ook fuzzy logic en enural networks behandelde.

Are you following me, Are you following me?


  • Opi
  • Registratie: Maart 2002
  • Niet online

Opi

In hoeverre is een dergelijk algorithme gevoelig voor borders?

Overigens vind ik dat over het algemeen fuzzy logic en neurale netwerken (multi layer perceptrons) nogal te wensen over laten; initialiseren van gewichten en overige te tunen parameters zorgen ervoor dat er dermate veel tijd in gaat zitten dat andere aanpakken wellicht effectiever zijn. Is er overigens materiaal bekend waarin ze radial basis functions of andere coarse coading technieken gebruiken?

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 15-05 14:44

_Thanatos_

Ja, en kaal

Topicstarter
Wow, wat een hoop reacties opeens :)

Ik zie dat er aardig wat oplossingen te bedenken zijn, maar ookal denk dat de vector-oplossing best goed zou kunnen werken, er toch twee nadelen aan zitten: als er een border om een plaatje zit, zal het niet matchen met het orgineel. Tweede nadeel is dat ik eigenlijk van ieder plaatje eerst zo'n signature wil berekenen. En daarom zal ik sowieso de oplossing van Jigal es gaan proberen.

Fuzzy logics en neurale netwerken heb ik helaas geen kaas van gegeten. Neuraal netwerk weet ik wel wat dat is, maar ik zie ff niet hoe je dat op een plaatje moet toepassen. Fuzzy logic? Wel van gehoord (ken iemand die zichzelf fuzzillogic noemt :P) maar voor de rest niet...

_bas_: Met beste kwaliteit bedoel ik niet "dé beste kwaliteit" :) Maar meer een inschatting van de PC waardoor ie zegt "dat zou weleens de beste kunnen zijn. De rest maar verwijderen dan?" En dat wilde ik dan baseren op de afmetingen icm hoeveelheid lossy compression (if any), de kleurbalans en de hoeveelheid ruis. Ik heb hier ooit weleens een algoritme voor gebakken, maar echt goed werkte het niet. Misschien dat ik dat wel weer optrommel.

Als er interesse is kan ik wel een paar plaatjes posten die volgens het algoritme op elkaar moeten lijken. Dan hebben jullie wellicht een beter idee van wat ik bedoel?

日本!🎌


  • Fuzzillogic
  • Registratie: November 2001
  • Laatst online: 01-07-2025
ken iemand die zichzelf fuzzillogic noemt
Ohh jaaa? Wie dan??? :+

Zoek eens naar GIFT (GNU Image Finding Tool), die kan, als ik hier zo rapido in C'T vam 11-2002 lees, ook plaatjes vergelijken.

Verwijderd

Skaah schreef op 18 december 2003 @ 19:00:
[...]

is er ook een omschrijving van de database settings (table design) beschikbaar?
Kijk even in de sources! Als je ziet wat de signature inhoudt:
Yplus: varchar(255);
Ymin: varchar(255);
Iplus: varchar(255);
Imin: varchar(255);
Qplus: varchar(255);
Qmin: varchar(255);
yavg: float;
iavg: float;
qavg: float;
plus alles wat je nog meer wilt opslaan (hoogte, breedte, url/pad, ...)

!!!LET OP!!!
'k Zag net dat de functie calcsig() ontbreekt; dit is echter een verkorte versie van de signature() functie, zonder de thumbnail stukjes... of bouw het stukje om de aanroep van calcsig() om zodat je signature() kunt gebruiken...
(De stukken komen uit twee scripts. 'k Heb dus wat overhead weggesneden... iets te veel :-) )
NB. imagecreatefrombmp() is geen PHP functie, maar een eigen brouwsel...

  • Lister
  • Registratie: September 2001
  • Laatst online: 15-02-2022
curry684 schreef op 18 december 2003 @ 18:47:
[...]

Het kostte moeite, maar met dank aan moto-moi en euss dan: http://faq.tweakers.net/pw/imgsig.php.txt :)

En dankzij Rafe dan ook syntaxhighlighted :X
http://faq.tweakers.net/pw/imgsig.phps
Ik ben niet zo bekend met php dus ik vraag het maar even, zitten er nog heel specifieke php functies/berekeningen in de code, want het lijkt mij wel een leuke uitdaging om naar VB om te zetten.
Ik heb toch de komende twee weken vrij :P

Ik wil het gebruiken om al die "grappige" plaatjes van internet eens te ordenen, bestaat er ook zoiets voor filmpjes :?

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Lister schreef op 21 december 2003 @ 17:59:
[...]
Ik wil het gebruiken om al die "grappige" plaatjes van internet eens te ordenen, bestaat er ook zoiets voor filmpjes :?
Die dingen die massaal rondgemaild worden veranderen over het algemeen niet van filetype, dus heb je aan een checksum genoeg. Idem voor filmpjes.

Signature is interessant als er een JPG-versie of een PNG-versie van rondwaart, of als er meerdere versies met bijv. andere overlaid tekst rondzwerven. Dat is bij filmpjes al helemaal niet van toepassing :)

Professionele website nodig?


Verwijderd

curry684 schreef op 21 december 2003 @ 18:11:
[...]
Signature is interessant als er een JPG-versie of een PNG-versie van rondwaart, of als er meerdere versies met bijv. andere overlaid tekst rondzwerven. Dat is bij filmpjes al helemaal niet van toepassing :)
Helaas, maar dezelfde plaatjes kom je tegen in verschillende groottes, in verschillende bestandsformaten, en met en zonder toegevoegde teksten. Hiervoor is een signature heel handig, omdat steeds de meest gelijkende foto's kunnen worden getoond.
http://www.xs4all.nl/~dcbjht/sig_demo.jpg
(over de "thumbnail" ligt nog een verschuifbare layer om de uitsnede te bepalen, zodoende toont dat plaatje iets lichter dan de 'matching images')

Filmpjes waren ook rond in zo mogelijk nog meer formaten en codecs, waarbij vaak een stukje ervoor of erachter is geplakt met gegevens over een site.
Voor filmpjes zou je met een video player die alle frames als losse plaatjes opslaat, bijvoorbeel een negental plaatjes uit het filmpje kunnen knippen (begin en eind weglaten i.v.m. intro en outro van sites), daar een montage van 3x3 plaatjes van maken en van dat plaatje een signature uitrekenen...

  • NaliXL
  • Registratie: Maart 2002
  • Laatst online: 01-05 19:30
Leuk topic! Heb me hier ook een tijdje mee bezig gehouden, en heb het een poos terug als project gekozen voor m'n "afstudeerproject". Heb het nooit afgekregen, maar wel een aardig cijfer gehad voor de moeite. En ik denk nog steeds dat mijn theorie best eens goed zou kunnen werken :) .

Voor de geïntresseerden: hier is m'n originele verslag, met de hand omgezet van openoffice naar HTML. Toen ik zag dat het uiteindelijk allemaal een beetje te hoog gegrepen was voor mijzelf heb ik het maar gepost op shouldexist.org.

Genoeg is meer dan veel, en tart den overvloed


Verwijderd

Nog even wat uitleg bij de gepubliceerde sources...

De sources die op tweakers te vinden zijn heb ik gebaseerd op:
http://grail.cs.washington.edu/projects/query/

Er wordt een zeer kleine thumbnail gemaakt (in het artikel 128x128; ik heb gemerkt dat voor bijna identieke plaatjes 64x64 genoeg is, zodat het qua snelheid en geheugengebruik ook op een webserver kan lopen).
Vervolgens wordt via een Haar-wavelet een reeks coëfficiënten bepaald en daarvan alleen opgeslagen welke coëfficiënten grote uitschieters in positieve of negatieve zin waren.

Bij het zoeken wordt het grootste gewicht gegeven aan de coëfficiënten die in grote mate het uiterlijk van het plaatje bepalen en het laagste gewicht aan coëfficiënten die details bepalen.

Deze methode komt enigszins overeen met jouw idee over het indelen in vlakken. Bij de Haar-wavelet wordt het plaatje echter ingedeeld in een grid, waarvan de lijnen niet op gelijkmatige afstanden hoeven te zitten. Hoe meer coëfficiënten, des te meer details zichtbaar zijn.

Om rekening te houden met wat mensenogen belangrijk vinden wordt bovendien gebruik gemaakt van het YIQ (luminicentie, hue, saturatie) kleurenmodel, zodat images die identiek zijn qua uiterlijk, maar andere kleuren hebben ook nog behoorlijk scoren.

Een andere methode is vergelijkbaar met jouw idee over het analyseren van 'edges':
http://www.dsi.unive.it/%7Eauce/docs/spie97b.pdf
http://www.dsi.unive.it/%7Eauce/docs/spie97a.pdf

Deze was complexer uit te voeren voor mij, met name omdat ik voor Haar-wavelets al pseudo-code had liggen.

Het lijkt me overigens dat het uitvoeren van de Haar-wavelet in bijvoorbeeld C een stuk sneller kan verlopen in PHP (uit metingen blijkt dat de bottleneck in m'n code te zijn). Dus als iemand een PHP extensie kan bakken met een snelle Haar-wavelet, dan denk ik dat je met signatures van 128x128 thumbnails zo'n content-image-zoekmachine vrij snel gebakken hebt.
Alleen nog "even" alle images van het web indexeren.... :P

  • Tom-Eric
  • Registratie: Oktober 2001
  • Laatst online: 25-03-2025
Hoe zit het nu met images die bijvoorbeeld heel erg breed of lang zijn? Zover ik kan zien wordt dit alsnog in een 64x64 plaatje gepropt en krijg je dus een vervormd plaatje. Stel dat je nu een plaatje hebt van een pilaar, dan zal een brede muur er precies hetzelfde uitzien. In hoevere zou je dit kunnen tegengaan?

i76 | Webdesignersgids | Online Gitaarlessen & Muziekwinkels


  • Opi
  • Registratie: Maart 2002
  • Niet online

Opi

Tum|mut schreef op 22 december 2003 @ 15:04:
Hoe zit het nu met images die bijvoorbeeld heel erg breed of lang zijn? Zover ik kan zien wordt dit alsnog in een 64x64 plaatje gepropt en krijg je dus een vervormd plaatje. Stel dat je nu een plaatje hebt van een pilaar, dan zal een brede muur er precies hetzelfde uitzien. In hoevere zou je dit kunnen tegengaan?
De images of de vectoren normaliseren? Al denk ik dat je nog steeds problemen blijft houden met borders.
Pagina: 1