Projektvorschlag: Bilddubletten finden

Hier kann alles mögliche diskutiert werden. Themen zu Purebasic sind hier erwünscht.
Flames und Spam kommen ungefragt in den Mülleimer.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Projektvorschlag: Bilddubletten finden

Beitrag von Kiffi »

Hallo,

gerade eben las ich folgenden Thread, in dem es um eine
Programmvorstellung eines Tools geht, welches Bilddubletten findet:

http://www.essential-freebies.de/board/ ... 7534#77534

Anscheinend gibt es in diesem Sektor nicht besonders viele brauchbare
Programme, obwohl das Thema gerade in Zeiten digitaler Fotografie sehr
interessant ist.

Unwillkürlich dachte ich da sofort, dass man sowas auch mit relativ einfach
mit PB verwirklichen könnte (alle benötigten Befehle sind vorhanden. Die
Bilderfassungs- und Vergleichs-Algorithmen sind die eigentlichen Stellen, in
die man ein wenig Gehirnschmalz investieren sollte).

Also Leute, das wäre doch mal ein Projekt (und nicht andauernd diese
langweiligen Chats, Mediaplayer oder Pong-Spiele ;-) )

In diesem Sinne: Haut rein! :allright:

Grüße ... Kiffi
a²+b²=mc²
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

hm... mit dubletten meinst du jetzt wirklich bit-by-bit identische?

weil... mit demselben motiv zweimal geknipst... das bräuchte ja fuzzylogic vom feinsten...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Also in dem von Kiffi geposteten Link geht's tatsächlich um NICHT bit-identische Bilder, sondern Bilder, die sehr ähnlich sind. Das ist natürlich schon cool, aber auch aufwendiger. Es ist aber auch beschrieben wie das Tool vorgeht. Vielleicht gibt's aber auch bessere Lösungen, möglicherweise über neuronale Netze oder sowas.
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Kaeru Gaman hat geschrieben:hm... mit dubletten meinst du jetzt wirklich bit-by-bit identische?
nee, das wäre ja zu popelig ;-)
Kaeru Gaman hat geschrieben:weil... mit demselben motiv zweimal geknipst... das bräuchte ja fuzzylogic vom feinsten...
Hierzu ein Zitat aus der Seite, auf die ich oben verlinkt habe:
setiman hat geschrieben:Dazu bedient sich das Tool einer eigentlich recht einfachen Methode:
Zunächst wird ein Raster von acht mal acht Pixel auf die ausgewählten
Bilder gelegt. Für vier der so erzeugten Felder ermittelt die Software dann
die durchschnittlichen RGB-Werte. Zwei Bilder gelten als identisch, wenn
die Abweichungen der RGB-Parameter unterhalb eines vom Anwender
festzulegenden Schwellenwerts sind.
Hört sich erst einmal einfach an. Aber ich habe da nicht wirklich Ahnung
von. Deshalb kann ich nichts dazu sagen, ob das problemlos umzusetzen
ist.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Beitrag von dllfreak2001 »

8)

Nur für vier Felder?

Ist aber eine sehr kleine Testfläche....

Vielleicht so ?

Code: Alles auswählen

;***DLL-Freak´s Dublettenroutine***
;***14.03.2007***

#maxdiff = 10 ; maximale Differenz
; Kontrollauflösung
#resw = 32 
#resh = 32

filea.s = OpenFileRequester("Bild #1 öffnen","","BMP|*.bmp|JPEG|*.jpg|PNG|*.png",1)
fileb.s = OpenFileRequester("Bild #2 öffnen","","BMP|*.bmp|JPEG|*.jpg|PNG|*.png",1)
If filea <> "" And fileb <> ""
UseJPEGImageDecoder()
UsePNGImageDecoder()

LoadImage(0,filea)
LoadImage(1,fileb)
;-"Mittelwerte" bilden
ResizeImage(0, #resw, #resh ,#PB_Image_Smooth)
ResizeImage(1, #resw, #resh ,#PB_Image_Smooth)

Dim argb.l(#resw-1,#resh-1)
Dim brgb.l(#resw-1,#resh-1)

;-Bildpunkte ins Array einlesen
StartDrawing(ImageOutput(0))
  For x= 0 To #resw-1:For y = 0 To #resh-1
    argb(x,y) = Point(x,y)
  Next:Next
StopDrawing()
StartDrawing(ImageOutput(1))
  For x= 0 To #resw-1:For y = 0 To #resh-1
    brgb(x,y) = Point(x,y)
  Next:Next
StopDrawing()

  For x= 0 To #resw-1:For y = 0 To #resh-1
    
    ;-Differenz bilden und prüfen
    nrd = Abs(Red(argb(x,y))-Red(brgb(x,y))) + Abs(Green(argb(x,y))-Green(brgb(x,y))) + Abs(Blue(argb(x,y))-Blue(brgb(x,y)))
    
    If nrd > #maxdiff
      MessageRequester("Keine Doublette!", fileb + " ist keine Dublette von " + filea)
      End
    EndIf
    
  Next:Next
  
  MessageRequester("Doublette!", fileb + " ist eine Dublette von " + filea)
Else
  MessageRequester("Fehler","Eine Pfadangabe ist falsch!")
EndIf
Ist zwar nicht besonders fein, aber so muss es beim dllfreak sein...
I´a dllfreak2001
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Beitrag von PureLust »

Ich hatte mal vor einigen Jahren mal ein Freeware-Tool, welches sowohl gleiche wie auch ähnliche Bilder sehr gut finden konnte - weiss aber leider nicht mehr genau wie es hieß. :roll:

Wenn Ihr Euch aber auch mit einer Shareware anfreunden könntet, so schaut Euch mal PhotoSort an:

Bild

Das Programm ist einfach, schnell und kompakt und sortiert doppelte und fast identische Bilder aus.
Egal ob Bildschirmhintergründe, Familienfotos oder andere Bilder, PhotoSort vergleicht die Bilder nach dem Inhalt.
Es ist auch gleichgültig, ob die Bilder unterschiedliche Formate oder Größe haben, Farbe, Kontrast oder Helligkeit etwas anders sind.
PhotoSort geht nur nach dem Dargestellten.

Gruß, PL.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

@PureLust

dieser Thread ist ein Projektvorschlag, keine suche nach einer software.

also, wenn du den algorithmus präsentieren kannst, mit dem PhotoSort arbeitet, dann passt das hier her.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten