|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Flo aka kleiner_hacker
Anmeldungsdatum: 23.06.2006 Beiträge: 1210
|
Verfasst am: 02.10.2012, 01:30 Titel: bildverarbeitung: texturdeskriptor |
|
|
Hi,
ich möchte in einem Bild ähnliche Bereiche segmentieren; nur nach Farben segmentieren reicht nicht.
Mein Plan wäre jetzt, die Pixel (zusätzlich zu RGB) um einige Texturinfos zu erweitern.
Dazu möchte ich zu jedem Pixel einen n-dimensionalen Vektor haben, sodass ich die Ähnlichkeit mit der euklidischen Distanz berechnen kann.
Problem: wie baue ich diesen Texturdeskriptor?
Meine Idee wäre, lokale Minima und Maxima im Graustufenbild zu finden, diese mit Linien zu verbinden, und ein Histogramm der Linienwinkel zu bauen, normalisieren (d.h im einfachsten Fall so durchrotieren, dass der höchste Peak des Histos bei 0° ist, zwecks Rotationsinvarianz)
Allerdings würde das nicht klappen bei Texturen, die keine ausgepraegten Minima/Maxima besitzen :/ (Zebrastreifen z.B., da wuerde das nur rauschen)
Hat jemand ne Idee, wie ich einen funktionierenden Texturdeskriptor hinkriege?
Er soll rotationsinvariant sein (moeglichst dennoch Rotationsinfo "zuschaltbar" haben), nur in geringem Maße größeninvatiant, und ortsinvariant (d.h., verschiedene Punkte in der selben Textur muessen gleiche Deskriptoren kriegen)
(ThePuppetMaster, fühle dich angesprochen! ) _________________ MFG
Flo
Satoru Iwata: Wer Spaß am Spielen hat, fragt nicht nach Grafik.
zum korrekten Verstaendnis meiner Beitraege ist die regelmaessige Wartung des Ironiedetektors unerlaesslich. |
|
Nach oben |
|
|
ThePuppetMaster
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 08.10.2012, 22:03 Titel: |
|
|
versuchs mal mit einer 2D FFT in variabler breite. Die entstehenden Moden bilden in deinem Fall das das Muster das du suchst.
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
|
ThePuppetMaster
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 09.10.2012, 11:51 Titel: |
|
|
Hab jetzt mal etwas gebastelt.
Die Regulären Verfahren zur Mustererkennugn sind recht komplex, und gibt es schon in diversen Bibliotheken. (gibt auch tonnenweise infos dazu im netz ... siehe z.b. mustererkennung von Gallwitz ano 2011)
Ein verfahren, das mir auf die schnelle dazu einfällt wäre die oben erwähnte FFT analyse.
Du müsstest hierfür das Bild rastern (segmente können / müssen nicht, variabler grösse sein)
Jedes Raster durchläuft ein FFT auf R/G/B basis. Dieses Nutzt du als "fingerabdruck" des Musters. Die FFT hat die eigenschaft frequenzen (häufigkeiten pro zeiteinheit) recht gut auf Bilder ableiten zu können. Dieses kannst du dann nutzen um deren Moden und Frequenz-Muster auf andere Segmente hin zu vergleichen (z.b. passmuster vergleich (übereinander legen, und die "passgenauigkeit" vergleichen).
Je besser ein muster auf ein anderes passt (frequenztechnisch), desto warscheinlicher ist es, das dieses segment die selbe textur aufweist wie das zu vergleichende / das prüfmuster.
Ein FFT über eingesammtes bild sähe dann in etwa so aus (fft.bas im source (unten)).
(eingangsbild (c) von http://google.de )
oben ist das eingangsbild
darunter ist die farbverteilung der selektierten zeile für r g und b.
danach folgt das FFT für r g und b dieser zeile
wie man erkennen kann gibt es diverse moden im Bild (vorallem im blauem bereich)
die kombination der entsprechenden farben als muster-analyse kann dann zum vergleich herangezogen werden.
wichtig ist nur, das du das Bild rasterst und jedes rasterelement für sich berechnest. danach kansnt du dann die einzelnen ergebnisse (muster-block) miteinander vergleichen und daraus die übereinstimmugn der anderen elemente ableiten.
hier noch der source zum bissi rumspielen: http://ops.ath.cx/code?id=262
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
|
Eternal_pain
Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 09.10.2012, 17:31 Titel: |
|
|
Ist das die/eine Variante die auch die Google-bilder-suche nutzt? Hab wärend meines Farbquantisierungsproblems mal davon gelesen...
Ist nicht sehr effektiv wie ich testweise bei Google gemerkt habe, aber finde die Idee dahinter irgendwie interessant.... _________________
|
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 09.10.2012, 17:36 Titel: |
|
|
Es gibt viele Ansätze um ähnliche Bilder zu finden, FFT braucht man dazu aber nicht unbedingt. Im Grunde genommen und stark vereinfacht wird dafür das Originalbild auf eine feste Größe runterskaliert, evtl in Graustufen umgewandelt und davon ein Fingerprint erstellt. Den könnte man natürlich auch auf dem Ergebnis der FFT erstellen, aber ich wüsste auf Anhieb nicht, ob dies große Verbesserungen mit sich bringt. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
Eternal_pain
Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 09.10.2012, 17:47 Titel: |
|
|
Bin grad zu faul nach FFT zu googlen, aber von der gelesenen Theorie (oder was hängen geblieben ist) und dem was ich bei ThePuppetMaster's Beispiel erkennen kann würd ich auch erstmal so vorgehen.. ein RGB(S) Histogramm erstellen, normieren und dann wohl nach abweichungen vergleichen... glaube aber das es wie gesagt auch bei der google-bilder-suche/vergleich nicht sehr gut ist, da bilder mit ähnlicher farbgebung 'erkannt' werden... _________________
|
|
Nach oben |
|
|
ThePuppetMaster
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 09.10.2012, 17:51 Titel: |
|
|
@Jojo ... verebsserungen ist bei solchen problemem rein subjektiv zu betrachten.
Es gibt diverse mögliche ansätze um texturen in bildern zu erkennen. Je nachdem, welche Problematik zugrunde liegt kann man auf die eine oder andere weise erfolgreiche sein.
Mein oben beschreiebenes verfahren ist sicher nicht das beste, auch nicht das schlechteste, aber eines das leicht zu "bauen" und "relativ" schnell ist.
Das "herunterskalieren" ist im grunde nichts anderes als ein Weichzeichner über ein Bild zu prügeln. Das hat jedoch den nachteil, das Informationen verlohren gehen. Die folge ist, das Texturen mit selben Farben aber unterschiedlichen Aufbauten als gleich erkannt werden könnten. Bei einem FFT Verfahren entsteht hier im gegensatz dazu ein anderes Frequenzmuster mit anderen Moden ausläufern. Diese erzeugen daraufhin ein anderen Fingerprint trotz gleicher Farbe.
Das "skalieren" ist sicher eines der schnellsten Verfahren um dieses Problem einfach und schnell zu lösen. Ob es aber mit kleinststrukturen mithalten kann ist fraglich.
Hab auch darüber nachgedacht, das ganze per weichzeichner zu lösen, bin dann aber eben auf oben genanntes Problem der mehrdeutigkeit gestossen, und habs dann doch per FFT gebastelt.
Ein Vorteil der FFT ist, das es jeden Pixel verarbeitet, und die Pixelfarbe anhand des abstandes zu anderen Pixeln betrachtet.
und @jojo .. (falls du es missverstanden haben solltest) es geht ja hier nicht darum, bilder zu vergleichen, sondern texturen in bilder zu finden und diese texturen (so vermute ich mal anhand der letzten threads von EP) im Bild wiederzufinden um ein "objekt" anhand deren Muster zu erkennen.
Eine weitere Möglichkeit, Texturen zu erkennen leise sich mit dem Kontrast realisieren.
Da Bilder meist FÜR einen menschen erzeugt werden, haben Sie den Vorteil, das bestimmte eigenschaften im Bild umgesetzt werden. z.B. sind bestimmte Dynamik-umfänge realisiert, um dinge hervor zu heben. Oder um Strukturen heraus zu kistalisieren. usw.
Hier könnte man auch ansetzen und die Dynamik des Bildes analysieren. Diese würde bestimmte Merkmale aufweisen, welche im Bilder gehäuft oder wiederkehrend hervortreten. In Blöcke könnte man hier wiederkerende Muster ausmachen.
[EDIT] Im oberem Bilde sieht man leider nicht, das der FFT und die grafen unter dem Bild eigetnlich nur eien markierte Zeile zeigen, und sich nicht auf das gesammte bild beziehen!
[EDIT-2] Die 3 Grafen unter dem Bild sind übrigens keine Histogramme!!! Das ist der Farbwert von R / G / B über die Zeile hinweg.
pixel-0-r, pixel-1-r, pixel-2-r, pixel-3-r, pixel-4-r, ...
und keine summe derer
häufigkeit-r-0, häufigkeit-r-1, häufigkeit-r-2, ...
[EDIT-3] Vergleicht man diese Farbwerte miteinander (R / G / B) sieht man kaum einen unterschied. Er ist teilweise nur in der wertigkeit auszumachen. Im FFT aus diesen Werten aber sieht man gravierende Änderungen. Diese entstehen eben aus der "Frequenz" dieser Farbwerteverteilung.
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 09.10.2012, 18:24 Titel: |
|
|
ThePuppetMaster hat Folgendes geschrieben: |
und @jojo .. (falls du es missverstanden haben solltest) es geht ja hier nicht darum, bilder zu vergleichen, sondern texturen in bilder zu finden und diese texturen (so vermute ich mal anhand der letzten threads von EP) im Bild wiederzufinden um ein "objekt" anhand deren Muster zu erkennen. |
Ich habe mich ja auch nicht auf den OP bezogen sondern auf Eternal_pains Frage, ob Google das genau so macht, und soviel ich weiß geht es bei diesen Fingerprinting-Verfahren weniger darum, Texturen in diesem Sinne zu extrahieren. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
ThePuppetMaster
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 09.10.2012, 18:30 Titel: |
|
|
Ah, ok ... dann hab ich das missverstanden. SRY.
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|