Bilder Vergleich möglich?

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

Mathias-Kwiatkowski

Betreff: Bilder Vergleich möglich?

BeitragSa, Jan 19, 2019 20:55
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo leute und ein frohes neues wenn auch späd Wink

ich habe da ein anliegen, ich möchte 2 bilder auf die gleichheit prüfen heißt nicht vom namen oder grösse ect. sondern ob das bild vom aussehen her identisch ist mit dem anderen. ist dies mit blitz max oder zusatz mods möglich?


ich stell es mir so vor
Local Image0:TImage=loadimage("abc.png")
Local Image1:Timage=Loadimage("Test.png)

und nun ist image0 identisch mit image1 dann print "1" oder so ^^

wäre super wenn das ginge.
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017

Xeres

Moderator

BeitragSa, Jan 19, 2019 21:05
Antworten mit Zitat
Benutzer-Profile anzeigen
"vom aussehen her" - ist ein bisschen zu ungenau. "Gleiche" und "Ähnliche" Farben machen hier den unterschied von einer fertigen md5/sha Hashfunktionen und einer eigenen Implementation aus.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Mathias-Kwiatkowski

BeitragSa, Jan 19, 2019 21:17
Antworten mit Zitat
Benutzer-Profile anzeigen
naja vom aussehen her also nicht vom datei inhalt bildervergleich also.

ich wüsste nicht wie genau ich das prüf, eins weiß ich das 1. bild ist ja bekannt, das 2. bild soll der nutzer sich aussuchen können und dann soll ein vergleich stattfinden ob es das gleiche bild ist oder nicht.

von md5/sha Hashfunktionen habe ich = null ahnung.

das vom aussehen her mein ich halt wirklich das was man sieht. (optisch)


Edit:
so wie ich es machen würd dauerts sehr lang, pixel für pixel durchgehen und nach rgb werte prüfen...
wenn jeman also eine einfacherer möglichkeit hat bitte her damit
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017

Midimaster

BeitragSo, Jan 20, 2019 10:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Bevor du so eine Funktion schreiben kannst, musst Du genau festlegen, WAS gleich sein soll. Soll z.b. jedes Pixel des eines Bildes mit dem entsprechenden Pixel des anderen Bildes verglichen werden ist das ziemlich einfach.

Ich befürchte aber, Du suchst eher nach einer Funktion, die auf verschiedenen Fotos das gleiche Motiv erkennen soll? Das ist sehr schwierig.

Bitte beschreib doch mal genauer, wie Du das "GLEICH" in deinem Fall definieren würdest. Beispiele?

Was wäre wichtig:
Gleiche Größe des Bildes?
Gleiche Größe der Objekte im Bild?
Gleiche Farben?
Gleiche Motive?
Gleiche Helligkeit?
Welche Abweichungen wären akzeptabel?
Handelt es sich um Grafiken oder Fotos?
Treffer nur wenn es das gleiche Foto ist?
etc...
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

Mathias-Kwiatkowski

BeitragSo, Jan 20, 2019 10:43
Antworten mit Zitat
Benutzer-Profile anzeigen
nein möchte keine ähnlichkeitsbestimmung, sondern wissen ob bild A= Bild B ist also exakt identisch. nach rgb werten zu schauen, dauert recht lang (leider) gibt es da eine andere möglichkeit...

ich weiß nicht wie ich es noch anders erklärren soll ausser identisch bzw gleich.
wenn ich ein bsp code hätte wüsste ich wenigstens ansatzweise wie ich es prüfen kann...
bislang habe ich echt nur pixel für bixel aus beiden bildern durchgehen und nach rgb prüfen und wenn das dann identisch ist, dann ist ok, andernfalls nicht ok.
diese methode steht aber leider ausser frage da es viel zu lange dauert :/


Was wäre wichtig:
Gleiche Größe des Bildes? = kann unterschiedlich sein
Gleiche Größe der Objekte im Bild? = kann unterschiedlich sein
Gleiche Farben? = ja sollen gleich sein
Gleiche Motive? = wenn farben gleich eben auch das motiv bzw es ist identisch
Gleiche Helligkeit? = ja wegen gleichheit
Welche Abweichungen wären akzeptabel? = keine ahnung
Handelt es sich um Grafiken oder Fotos? = grafiken
Treffer nur wenn es das gleiche Foto ist? = ja
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017

Xeres

Moderator

BeitragSo, Jan 20, 2019 15:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Exakt identische Bilder aber die Objekte im Bild können unterschiedlich sein?
Du weißt gar nicht, was du eigentlich willst.

In dem Fall mach mal eine Tabelle mit 3 Spalten: Bild 1, Bild 2 und erwarteter Wahrheitswert. Dann wird dir vielleicht klar, was du eigentlich willst.

Im übrigen: Wozu brauchst du das eigentlich? Könnte sich auch um ein XY Problem handeln...
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Mathias-Kwiatkowski

BeitragSo, Jan 20, 2019 15:26
Antworten mit Zitat
Benutzer-Profile anzeigen
wie soll ichs weiter beschreiben, ich weiß schon was ich will. ich möchte prüfen ob es sich definitief um das gleiche bild handelt!.

ich will nich wissen obs gleiche mb hat oder obs im gleichen ordner liegt oder sonst was ich will nur wissen ist bild a= bild b.

die methode die ich beschrieb die rgb auszulesen war schon erfolgreich, und das passt mir auch sehr gut, leider aber dauert diese zu lang...
( was habe ich gemacht? in einer schleife bin ich x,y werte durchgegangen und habe geschaut obs die gleichen rgb werte bei dem 2. bild hat wenn ja = identisch wenn nein dann eben nicht. ) aber genau diese methode dauert extrem lang leider....
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017

Xeres

Moderator

BeitragSo, Jan 20, 2019 15:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann beantwortest du die Fragen hier sehr falsch.
Aber gut: Was du willst, ist eine Hashfunktion. Der Hash ist gleich, wenn der Inhalt der Dateien exakt gleich ist.
Wenn du den Hash nicht wiederverwenden willst, kannst du auch den Vergleich direkt stoppen, wenn sich bytes zwischen den Dateien unterscheiden.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Mathias-Kwiatkowski

BeitragSo, Jan 20, 2019 16:19
Antworten mit Zitat
Benutzer-Profile anzeigen
also bytes auslesen? wenn ein byte ungleich dann ist es nicht das gleiche bild?
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017

Midimaster

BeitragSo, Jan 20, 2019 16:49
Antworten mit Zitat
Benutzer-Profile anzeigen
naja,

wenn die Bilder auch die gleiche Größe haben müßten, dann wäre ein Byte-weiser Vergleich das richtige. Mit dem gleichen Motiv in unterschiedlich großen Formaten wir es schwieriger.

Brauchst Du das ganze für ein Spiel? Oder geht es eher um die rechtliche Frage, ob jemand das Bild kopiert hat und es nun illegalerweise verwendet?

Bei unterschiedlichen Größen des gleichen Motivs wirst Du eine gewisse Abweichung akzeptieren müssen, bei der dann das Bild immer noch als "gleich gilt".

folgender Vorschlag:
1.
Verkleinere beide Bilder auf ein wesentlich kleineres Format. z.b. ein hundertstel des kleineren Bildes:

Bild A 3000x2000Px
Bild B 900x600px
gemeinsames Format 90x60pix

2.
Mach aus beiden 90x60px Bildern ein Schwarzweiß-Bild. Vergleiche nun alle 540 Pixel und entscheide dann, ob es sehr viele unterschiedliche Pixel sind, oder ob sich eine genauere 2. Runde lohnt.

Oder so:

Man könnte auch beide Bilder auf das gleiche Format (des kleineren Bildes) bringen und dann mittels Delta-Komprimierung ein "Differenzbild" erzeugen. Ist die Dateigröße dieses Differenzbildes (abgespeichert) sehr klein, waren die beiden Bilder sehr ähnllich.
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
  • Zuletzt bearbeitet von Midimaster am Mo, Jan 21, 2019 9:41, insgesamt einmal bearbeitet

Holzchopf

Meisterpacker

BeitragMo, Jan 21, 2019 8:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Mathias-Kwiatkowski hat Folgendes geschrieben:
bislang habe ich echt nur pixel für bixel aus beiden bildern durchgehen und nach rgb prüfen und wenn das dann identisch ist, dann ist ok, andernfalls nicht ok.
diese methode steht aber leider ausser frage da es viel zu lange dauert :/


Wenn diese Methode grundsätzlich tut, was du willst, aber einfach zu langsam läuft, ist die Sache einfach:

Zeig' den Code her und wir sagen dir, wieso er so lange braucht Wink Schon mal ein paar Dinge vorneweg: BMax bietet Möglichkeiten, das sehr schnell durchzuführen. Eine davon ist die Pixmap des Bildes (die RGB-Daten) in eine Bank zu kopieren, wo du dann mit PeekInt Werte auslesen kannst. Geht sehr schnell. Erfahrungsgemäss ein Sehrvielfaches davon, was alle Pixel einzeln auslesen dauert.
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Thunder

BeitragDi, Jan 22, 2019 14:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, es wurde bereits geklärt, dass du zwei Bilder auf Identität prüfen willst, aber du musst folgendes bedenken: Stell dir vor du hast ein Bild test.bmp. Im Bitmap format stehen einfach die RGB-Werte unkomprimiert. Jetzt speicherst du es als PNG test.png. Jetzt sind die Dateiinhalte natürlich nicht mehr gleich, aber die RGB-Werte des Bildes sind komplett gleich, weil PNG verlustlos komprimiert. Speicherst du das Bild als test.jpeg wird es immer noch gleich aussehen, aber ziemlich sicher Kompressionsartefakte haben - d.h. nicht nur der Dateiinhalt ist anders, sondern auch einzelne RGB-Werte!

Deswegen fragen alle so genau nach.

@Holzchopf: Banks sind ziemlich old skool Razz ich glaube man kann auch einfach mit einem Pointer durchgehen und spart sich das Kopieren. Dennoch guter Vorschlag, ich denke das müsste schnell sein. Naja, kommt vielleicht auch auf die Größe der Bilder an.
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

Mathias-Kwiatkowski

BeitragDi, Jan 22, 2019 20:35
Antworten mit Zitat
Benutzer-Profile anzeigen
was heißt mit pointer durchgehen?
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017

Thunder

BeitragMi, Jan 23, 2019 22:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Es gibt eine Methode, die dir den Pointer zum Speicherbereich einer Pixmap gibt. Ich glaube sie heißt PixelPtr (es gibt auch eine äquivalente Funktion PixmapPixelPtr). Wenn du von zwei Pixmaps den Pointer holst, kannst du mit der Funktion memcmp_() (aus pub.stdc) die Speicherbereiche der Pixmaps vergleichen. Wenn die Bilder gleich groß sind und gleiche RGB-Daten enthalten, müssen diese Speicherbereiche gleich sein. Du musst nur die Größe des Speicherbereichs herausfinden. Das müsste über Height, Width + Pixmap Format gehen. Also Breite * Höhe * Anzahl an Byte pro Pixel.
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group