Laden...

Bilder vergleichen

Erstellt von andreas.nussmueller vor 16 Jahren Letzter Beitrag vor 16 Jahren 2.955 Views
A
andreas.nussmueller Themenstarter:in
4 Beiträge seit 2008
vor 16 Jahren
Bilder vergleichen

Hallo an alle!

Ich bin neu hier und hoffe, dass ihr mir helfen könnt.

Ich soll in meinem Programm 2 Bilder miteinander vergleichen.
Es handelt sich um zwei bilder aus der gleichen Kamera (Position gleich) nur zu unterschiedlichen Zeiten aufgenommen.
Es geht also darum, große Differenzen zu erkennen, andere z.B. Lichtverhältnisse sollten aber nicht berücksichtigt werden.

Hat jemand von euch eine Idee wie ich das Lösen kann?
Hab auch nicht sonderlich viel Erfahrung mit C#...

Danke im Voraus!

Gruß
Andreas

3.430 Beiträge seit 2007
vor 16 Jahren

Hallo andreas.nussmueller,

herzlich willkommen bei MyCsharp.de

Ich habe zwar auch nicht viel Erfahrung im Bildervergleichen, ich habe da aber was im Internet gefunden, was dir vielleicht weiterhelfen sollte.

Schaue dir mal diesen Link, und die weiterführenden Links an, vielleicht helfen die dir ein bisschen weiter:

http://www.tutorials.de/forum/net-grafik-und-sound/263879-2-bilder-vergleichen.html

mfg
MichLG

K
593 Beiträge seit 2007
vor 16 Jahren

Die interressante Frage ist erstmal was für ein Unterschied du genau erkennen musst. Musst du erkennen ob sich an Stelle X,Y irgendwas geändert hat oder musst du erkennen was(!) sich an Stelle X,Y geändert hat. Das zweite ist wesentlich schwerer herauszufinden. Fürs erste kann man Get und Set Pixel von der BMP Klasse nehmen. Es gibt hier in Forum auch noch eine eigen geschriebene Klasse wo die Performance von Get und Set Pixel deutlich erhöht wurde.

Gruß Daniel

738 Beiträge seit 2007
vor 16 Jahren
2.921 Beiträge seit 2005
vor 16 Jahren

Soweit ich weiß wird dafür "Pattern Matching" eingesetzt, ist aber IMHO keine triviale Sache.

Vielleicht hilft Dir auch das weiter:

http://www.codeproject.com/KB/GDI-plus/comparingimages.aspx

Ich denke auch weiterhin, du benötigst einen Algorithmus, der die Bilder auch noch als "gleich" (oder als nicht gleich) erkennt, wenn z.B. eins farbig das andere schwarz-weiß ist. Oder die Größe unterschiedlich ist, aber trotzdem den gleichen Inhalt zeigt.

Hier gilt es eine geeignete Transformation zu finden, ich denke das geht nur über einen Algorithmus der eine geeignete Wertemenge für jedes Bild liefert, um diese vergleichbar zu machen.

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

D
500 Beiträge seit 2007
vor 16 Jahren

Hallo!

Es kommt natürlich stark darauf an, wie Du vergleichen möchtest.

Es geht also darum, große Differenzen zu erkennen, andere z.B. Lichtverhältnisse sollten aber nicht berücksichtigt werden.

Wenn Du bspw. nicht auf die Lichtverhältnisse eingehen möchtest, solltest Du vorher einen Farbraum wählen, in dem Du die Lichtverhältnisse aus Deiner Bewertung herausnehmen kannst. Dabei sollten Dir die Stichwörter HSV - Farbraum(Hue, Saturation, Value) sowie HSL - Farbraum weiterhelfen. Dazu siehe auch HSV. D.h. Vor Deinem Vergleich sollest Du eine Überführung vom RGB Farbraum in den HSV/HSL Farbraum vornehmen. Anschließend sollten die Lichtverhältnisse nicht mehr so eine große Rolle spielen. Soweit ich weiß, gibt es diese Umrechnungen auch im .Net Framework bereits, diese aber nicht so genau sind. Als ich in meiner Dipl. Arbeit damit gearbeitet habe, habe ich Ungenauigkeiten festgestellt und somit den Algorithmus selber implementiert. Sollte eigentlich nicht zu aufwendig sein. Die andere Sache, die auf Dich zukommt ist die Unterschiedserkennung. Wenn ich die Codeproject Seite richtig verstanden habe, wird "lediglich" ein Hash von beiden Bildern generiert und dieser verglichen. Wenn es nur um generelle Änderungen geht sollte dieses Verfahren ausreichen. Ist allerdings Objekterkennung wichtig, musst Du schon ein wenig mehr Aufwand betreiben. Mir fällt momentan zu diesem Thema nicht der entsprechende Buchtitel ein (Melde mich, falls er mich noch einfällt).

Gruß, DaMoe

A
andreas.nussmueller Themenstarter:in
4 Beiträge seit 2008
vor 16 Jahren

Danke für eure Antworten!

Leider ist ein Pixel für Pixel Vergleich für mich nicht brauchbar, da die Kamera beweglich ist,also ist es möglich, das das Vergleichsbild zum Original leicht verschoben ist.

Ein Pixel für Pixel Verglich würde dass naturlich auch schon als Veränderung erkennen, die Funtion die ich benötige soll aber das noch tolerieren..

Hat dafür jemand einen Ansatz für mich?

Danke!

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo andreas.nussmueller,

wenn das Bild auch noch verschoben sein kann, wird es langsam richtig kompliziert. Es ist vermutlich einfacher und kostengünstiger, sich ein fertiges Produkt zu suchen, das das kann, als es selber zu versuchen.

herbivore

A
andreas.nussmueller Themenstarter:in
4 Beiträge seit 2008
vor 16 Jahren

Hallo!

Kennt von euch jemand eine fertige Lösung für dieses Problem?
Die man vielleicht als DLL einbinden kann?

Danke
Andreas

179 Beiträge seit 2006
vor 16 Jahren

Hi,

zwar wharscheinlich nicht ganz so einfach einzubinden wie du es dir vorstellst, aber schau mal hier.
Es handelt sich dabei um einen Algorithmus zur Bewegungserkennung von Webcam - Bildern.
Wenn man bedenkt, dass Videos auch nur eine Abfolge von Bildern, und Bewegungen darin Änderungen dieser Bilder sind, könnte es gut möglich sein, dass diese Algorithmen auch auf dein Problem anwendbar sind.

greetz dechavue