Hallo.
Ich habe eine Reihe Bilder, die ich alle aus einem Video extrahiert habe. Einige sind interlaced(Kammmuster) und unscharf.
Ich suche einen Python-Code, der unscharfe bzw. Interlaced Bilder erkennen kann. Möglichst in Verbindung mit der PI-Bibliothek(PIL).
Ich habe es selbst nicht hinbekommen, aber gelesen, es sei durch Transformation in den Frequenzbereich leichter. Hier bin ich aber überfragt.
Grüße
C.
Unscharfe Bilder erkennen.
- nkoehring
- User
- Beiträge: 543
- Registriert: Mittwoch 7. Februar 2007, 17:37
- Wohnort: naehe Halle/Saale
- Kontaktdaten:
oha... fuer solche Dinge brauchts ne Menge an Mathematik. Da kommen Leute wie Laplace und Fourier daher und nageln einem krasseste Algorithmen an die Backe, bevor man sowas selbst programmiert => Also ich solltes koennen, kanns aber nicht, weil ich die Analysis-II-Pruefung geschoben habe
Um dem Beitrag doch noch ein klein wenig Sinn zu verleihen: Fuer solche Dinge sind fertige Bildanalyse-Programme wohl empfehlenswert und zumindest ihre matheaufwaendigsten Bereiche sollten in C o.ä. geschrieben sein um performant zu bleiben.
Um dem Beitrag doch noch ein klein wenig Sinn zu verleihen: Fuer solche Dinge sind fertige Bildanalyse-Programme wohl empfehlenswert und zumindest ihre matheaufwaendigsten Bereiche sollten in C o.ä. geschrieben sein um performant zu bleiben.
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Gerade weil ich direkt in Python die Bilder von meiner Kamera einlese, ist es gut, sie auch direkt hier weiterzuverarbeiten.nkoehring hat geschrieben:Fuer solche Dinge sind fertige Bildanalyse-Programme wohl empfehlenswert und zumindest ihre matheaufwaendigsten Bereiche sollten in C o.ä. geschrieben sein um performant zu bleiben.
Wer weiß eine Python - only Lösung.
Mich läßt das Thema einfach nicht los.
Aber ich sehe auch kein richtiges Muster.
Frage: Die fft-Funktion von numpy, wenn ich der die RGB-Werte eines Punktes des jetzigen und folgenden Bildes gebe, wie deute ich das Ergebnis oder anders gefragt:
Wie nutze ich eine FFT mit diskreten Werten und wichtiger: Was fange ich mit dem Ergebnis an ?
Aber ich sehe auch kein richtiges Muster.
Frage: Die fft-Funktion von numpy, wenn ich der die RGB-Werte eines Punktes des jetzigen und folgenden Bildes gebe, wie deute ich das Ergebnis oder anders gefragt:
Wie nutze ich eine FFT mit diskreten Werten und wichtiger: Was fange ich mit dem Ergebnis an ?
Der FFT-Funktion einzelne Punkte oder Paare von Punkten zu übergeben bringt nichts. Ganz grob transformiert FFT eine Folge von Sample-Werten in Faktoren mit denen man verschiedene Frequenzen multiplizieren muss um daraus kombiniert wieder die ursprüngliche Samplefolge annähern zu können. Mit nur zwei Samplewerten lässt sich da nicht viel machen.
Wenn man eine Pixelspalte tranformiert und dort hohe Faktoren bei den hohen Frequenzen herauskommen, kann man vielleicht mit einer gewissen Wahrscheinlichkeit Aussagen darüber treffen, ob man es in diese Spalte mit Interlace zu tun hat oder nicht. Oder man transformiert die Pixel der geraden und ungeraden Pixel einer Spalte und vergleicht die Ergebnisse. Je grösser die Abweichung, desto wahrscheinlicher ist Interlace im Spiel. Bin da aber auch nicht der Experte und das ist eher eine Frage von Bildverarbeitungsalgorithmen denn eine Python-Frage. Da sind andere Foren/Newsgroups vielleicht eine bessere Quelle.
Wenn man eine Pixelspalte tranformiert und dort hohe Faktoren bei den hohen Frequenzen herauskommen, kann man vielleicht mit einer gewissen Wahrscheinlichkeit Aussagen darüber treffen, ob man es in diese Spalte mit Interlace zu tun hat oder nicht. Oder man transformiert die Pixel der geraden und ungeraden Pixel einer Spalte und vergleicht die Ergebnisse. Je grösser die Abweichung, desto wahrscheinlicher ist Interlace im Spiel. Bin da aber auch nicht der Experte und das ist eher eine Frage von Bildverarbeitungsalgorithmen denn eine Python-Frage. Da sind andere Foren/Newsgroups vielleicht eine bessere Quelle.
Na eine Spalte mit Pixeln aus dem Bild halt. Bzw. die Werte eines der Känale (RGB) in einer Spalte in dem Bild.
Ich weiss ja nicht einmal ob es funktioniert, da habe ich jetzt keine Lust Experimente zu machen.
- nkoehring
- User
- Beiträge: 543
- Registriert: Mittwoch 7. Februar 2007, 17:37
- Wohnort: naehe Halle/Saale
- Kontaktdaten:
Kennst du denn die mathematische Grundlage der FFT-Funktion Carraia? Ansonsten kannst du dich ja einfach mal damit beschaeftigen.
Aber wie ich schon sagte... das ist nix, was man mal eben macht.
Wikipedia ist da oft ein netter Ansatz:
http://en.wikipedia.org/wiki/Fast_Fourier_transform
bzw in deutsch
http://de.wikipedia.org/wiki/Schnelle_F ... sformation
Denn falls du BlackJacks Idee umsetzen moechtest, musst du ja auch wissen, was die Ergebnisse ueberhaupt bedeuten. Denn der nackte Vektor ist nicht sehr informativ
Aber wie ich schon sagte... das ist nix, was man mal eben macht.
Wikipedia ist da oft ein netter Ansatz:
http://en.wikipedia.org/wiki/Fast_Fourier_transform
bzw in deutsch
http://de.wikipedia.org/wiki/Schnelle_F ... sformation
Denn falls du BlackJacks Idee umsetzen moechtest, musst du ja auch wissen, was die Ergebnisse ueberhaupt bedeuten. Denn der nackte Vektor ist nicht sehr informativ
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
- nkoehring
- User
- Beiträge: 543
- Registriert: Mittwoch 7. Februar 2007, 17:37
- Wohnort: naehe Halle/Saale
- Kontaktdaten:
Also ich sehe keine angreifende Haltung in meinem Text... in deinem schon. Vielleicht hast du etwas falsch aufgefasst?
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Hoi,
- Was genau willst Du erkennen?
- Spielt die Farbinformation eine Rolle?
- Wie groß sind Deine Bilder? Wie groß die zu erkennenden Ausschnitte?
- Welche Form haben ggf. die zu erkennenden Ausschnitte (grob)?
Gruß,
Christian
Habe mal was in der Richtung gemacht, aber Du stellst leider keine konkrete Frage. Daher möchte ich ein paar Fragen stellen:Carraia hat geschrieben:Ich habe eine Reihe Bilder, die ich alle aus einem Video extrahiert habe. Einige sind interlaced(Kammmuster) und unscharf.
- Was genau willst Du erkennen?
- Spielt die Farbinformation eine Rolle?
- Wie groß sind Deine Bilder? Wie groß die zu erkennenden Ausschnitte?
- Welche Form haben ggf. die zu erkennenden Ausschnitte (grob)?
Gruß,
Christian
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ich würde dich bitten sich etwas zu beruhigen, denn hier hat dich keiner auf irgendeine Weise angreifen wollen. Die Poster haben nur gemeint, dass das Problem nicht trivial ist und etwas an Mathematik erfordern.Carraia hat geschrieben:nkoehring, was ich kann und nicht kann überläßt du mir. Schließlich bist du es, der seine Prüfungen schiebt.
Und freundlich bleiben erhöht sowieso deine Chancen eine brauchbare Antwort zu bekommen
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Die RGB-Werte der Pixel in den Zeilen bekommst du etwa so:
Nun ist `lines` eine Lise von Zeilen, diese wiederrum eine Liste von Pixeln, diese wiederrum ein 3-Tupel bestehend aus dem R, G und B-Wert des Pixels.
Naja, das kannst du jetzt verarbeiten wenn du magst - aber frag mich nicht wie.
Code: Alles auswählen
import Image
def chunkize_lc(l, size):
iterator = iter(l)
lazy_values = [[iterator.next] * size for i in range(len(l) / size)]
return [[inner() for inner in outer] for outer in lazy_values]
img = Image.open('logo.gif')
rgb = img.convert('RGB')
lines = chunkize_lc(rgb.getdata(), rgb.size[0])
Naja, das kannst du jetzt verarbeiten wenn du magst - aber frag mich nicht wie.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Wenn die Daten sowieso mit `numpy`verarbeitet werden, ist es wahrscheinlich einfacher(?) und schneller das Bild in ein `numpy.array` um zu wandeln und die Spaltendaten dort mittels Slicing heraus zu holen und oder das Array zu transponieren und dann zu slicen.
Vielleicht solltest Du die Fragen die CM gestellt hat, um besser einschätzen zu können ob und wie er Dir weiterhelfen kann, auch noch beantworten.
Hoi,
Antwort auf diese Frage: Berechne eine Fouriertransformation Deiner Bilder, die Du zuvor in Graustufen umgewandelt hast. Quadriere die transformierten Werte. Ist der Amplitudenabfall assymmetrisch? Dann leidet das Bild unter Astigmatismus. Gibt es "Spikes"? Sehr wahrscheinlich interlaced. Um hierbei Artefakte zu vermeiden hilft es das Bild mit ein paar Pixeln am Rand zu versehen, die den durchschnittlichten Grauwert des Randes haben. Zurück zum Bild: Ränder hervorheben. Sind diese verwischt gegenüber dem Mittel der Randstärke aller Bilder (größerer Variationskoffizient?) Sehr wahrscheinlich ist das Bild unscharf. Einfacher und schneller zu programmieren sind Kreuzkorrelationen der aufeinanderfolgenden Bilder. Wie verhält sich der Korrelationskoeffizient mit der Zeit (bezogen auf den Vorgänger)? (Ggf. einen leichten Bandpassfilter nutzen.)
Mehr fällt mir gerade nicht ein. Vielleicht weiß ja jemand eine cleverere Lösung.
Beantwortet das Deine Frage?
Gruß,
Christian, SCNR
Da steht:Carraia hat geschrieben:In der zweiten Zeile des ersten Beitrags.
Ich schlußfolgere daraus, daß Du ein Codesnippet brauchst, um zu entscheiden, ob ein Bild unscharf ist. Das ist eine sehr ungewöhnliche Frage, daher habe ich vermutet, daß Du vielleicht etwas Anderes meinen könntest. "Unscharf" ist ein weites Feld, aber ich will eine Antwort versuchen.Carraia hat geschrieben:Ich suche einen Python-Code, der unscharfe bzw. Interlaced Bilder erkennen kann. Möglichst in Verbindung mit der PI-Bibliothek(PIL).
Antwort auf diese Frage: Berechne eine Fouriertransformation Deiner Bilder, die Du zuvor in Graustufen umgewandelt hast. Quadriere die transformierten Werte. Ist der Amplitudenabfall assymmetrisch? Dann leidet das Bild unter Astigmatismus. Gibt es "Spikes"? Sehr wahrscheinlich interlaced. Um hierbei Artefakte zu vermeiden hilft es das Bild mit ein paar Pixeln am Rand zu versehen, die den durchschnittlichten Grauwert des Randes haben. Zurück zum Bild: Ränder hervorheben. Sind diese verwischt gegenüber dem Mittel der Randstärke aller Bilder (größerer Variationskoffizient?) Sehr wahrscheinlich ist das Bild unscharf. Einfacher und schneller zu programmieren sind Kreuzkorrelationen der aufeinanderfolgenden Bilder. Wie verhält sich der Korrelationskoeffizient mit der Zeit (bezogen auf den Vorgänger)? (Ggf. einen leichten Bandpassfilter nutzen.)
Mehr fällt mir gerade nicht ein. Vielleicht weiß ja jemand eine cleverere Lösung.
Beantwortet das Deine Frage?
Gruß,
Christian, SCNR