Forum: PC Hard- und Software Bildbearbeitung: LCD-Inhalt rekonstruieren


von Walter T. (nicolas)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,
ab und an fallen bei mir Bildschirmfotos von Geräten mit LCD an. 
Beispielhaft habe ich mal so ein Foto (noch ohne Trapez-Entzerrung) 
angehängt. Das Foto hat die vielfache Auflösung des LCDs (das Bild im 
Anhang ist verkleinert), also sollte sich das Monochrom-Bild in 
Originalauflösung problemlos rekonstruieren lassen.

Als Software habe ich Gimp und die Matlab Image Processing Toolbox zur 
Verfügung. Probiert habe ich das Ganze bislang aber nur mit Gimp.

Die Trapez-Entzerrung ist kein Problem. Die verbleibende Wölbung durch 
die Linse ist so klein, das ich sie nicht feststellen kann.

Was mich allerdings vor Schwierigkeiten stellt, ist einen Schwellwert 
für hell und dunkel zu finden. Man sieht es dem Bild nicht direkt an, 
aber oben links ist es weitaus dunkler als im Rest, so daß ein 
einheitlicher Schwellwertwert über die ganze Bildschirmfläche zu 
fehlerhaften hellen/dunklen Pixeln führt.

Hätten wir hier kein Bild, sondern Meßdaten, würde ich einen bilinearen 
Ansatz wählen, diesen Ansatz mit der gaußschen Fehlerquadratmethode 
parametrieren und das damit erhaltene Bild vom Ursprungsbild abziehen. 
sozusagen einen extrem tiefpaßgefiltertes Bild abziehen. Aber was wäre 
das Equivalent einer normalen Bildbearbeitung?

Viele Grüße
W.T.

von Andreas P. (sack-c-fix)


Lesenswert?

Hallo,

wenn du Matlab hast hilft vielleicht das hier: 
http://de.mathworks.com/help/images/examples/correcting-nonuniform-illumination.html

Andreas

von Walter T. (nicolas)


Lesenswert?

Hm...
...ich fürchte, ohne wahnsinnig viel Einarbeitungsaufwand werde ich der 
strel -Funktion nichts sinnvolles entlocken können.

Ich suche allerdings auch keine vollautomatische Bearbeitung. Mir reicht 
ein "Kochrezept".

Meine ersten Versuche mit "Ebene duplizieren" -> Weichzeichnen mit 300 
Pixeln Radius" -> "Ebene: Division" und daraus den Schwellwert bestimmen 
haben schon eine leichte Verbesserung gebracht, aber die Abdunkelung in 
der oberen linken Ecke kann es nicht so richtig ausgleichen.

: Bearbeitet durch User
von Medientechniker (Gast)


Lesenswert?

Ich würde an deiner Stelle im ersten Schritt das Bild in Graustufen 
umwandeln. anschließend vertikal in der Mitte trennen. Dadurch hast du 
eine linke und rechte Bildhälfte auf die man das 
Otsu-Schwellwertrennungsverfahren anwenden kann. Matlab sollte das 
können. Nach der Schwellwerttrenung setzt du das Bild dann wieder 
zusammen. Eventuell solltest du das Bild vorher verkleinern oder testen 
ob Weichezeichner auf den Hälften die Ergebnisse verbessern.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Walter T. schrieb:
> Mir reicht ein "Kochrezept".

Kontrast vor Binarisierung erhöhen? Scheint ja ein reines s/w-Bild zu 
sein.

Warum eigentlich abphotographieren? Kann das Tek-Oszi nicht selbst einen 
Screenshot auf einem angeschlossenen USB-Stick ablegen, oder ist das so 
steinalt, daß das noch mit Disketten arbeitet?

von Walter T. (nicolas)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,
danke für die bisherigen Antworten.

Rufus Τ. F. schrieb:
> Kontrast vor Binarisierung erhöhen? Scheint ja ein reines s/w-Bild zu
> sein.

Eine reine Kontrastspreizung des gesamten Bildes bringt an dieser Stelle 
nicht. Vielleicht sieht man das Problem am besten, wenn man eine naive 
Auftrennung nach Schwellwert, wie ich jetzt mal im Anhang gemacht habe, 
durchführt. Man sieht weiße Bereiche, die zu dunkel sind, während andere 
schwarze Bereiche schon zu hell sind. Eine Kontrastspreizung ändert 
daran erst einmal nichts, weil sie ja unabhängig auf jedes Pixel wirkt.

Medientechniker schrieb:
> [...] auf die man das
> Otsu-Schwellwertrennungsverfahren [...]

Danke, mit Schwellwert-Trennverfahren hast Du mir ein gutes Stichwort 
zur weiteren Suche gegeben. Der Wikipedia-Artikel 
https://de.wikipedia.org/wiki/Schwellenwertverfahren#Probleme zeigt ja 
genau das Phänomen auf.

Rufus Τ. F. schrieb:
> Kann das Tek-Oszi nicht selbst einen
> Screenshot auf einem angeschlossenen USB-Stick ablegen, oder ist das so
> steinalt, daß das noch mit Disketten arbeitet?

Leider nein. Es ist ein TDS-220, für das ich kein RS232-Modul habe. Ich 
muß also vorerst auf klassische Screenshots zurückgreifen. Und wenn ich 
schon damit anfange, will ichs auch direkt richtig machen.

von Schreiber (Gast)


Lesenswert?

Walter T. schrieb:
> Was mich allerdings vor Schwierigkeiten stellt, ist einen Schwellwert
> für hell und dunkel zu finden. Man sieht es dem Bild nicht direkt an,
> aber oben links ist es weitaus dunkler als im Rest, so daß ein
> einheitlicher Schwellwertwert über die ganze Bildschirmfläche zu
> fehlerhaften hellen/dunklen Pixeln führt.

Zur Kalibrierung je ein Weiß- und ein Schwarzbild (ganzer Bildschirm 
Weiß bzw. Schwarz) erzeugen, und dann die Korrekturwerte für jedes Pixel 
berechnen. Das sollte mit OpenCV (oder Matlab) und etwa 10-20Zeilen Code 
zu erledigen sein.
Das ganze ist eine einfache, lineare Interpollation.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Schreiber schrieb:
> Zur Kalibrierung je ein Weiß- und ein Schwarzbild (ganzer Bildschirm
> Weiß bzw. Schwarz) erzeugen

Wenn das ein TFT-Display ist, mag das gehen, aber wenn das noch ein 
STN-Display ist (wir erinnern uns: träge graue Matschdisplays), dann 
geht das in die Hose, weil die erreichbaren Kontrastwerte abhängig vom 
Bildschirminhalt waren. Das Bild da oben sieht für ein STN-Display zwar 
verdammt gut aus, aber eben nicht so gut, wie es ein TFT-Display 
hinbekommen sollte, zumal monochrome TFT-Displays extrem selten sind (es 
gab wohl mal ein PowerBook von Apple, noch in der 68k-Zeit, das so etwas 
hatte).

von Thosch (Gast)


Angehängte Dateien:

Lesenswert?

Moinsen,

man bekommt auch aus obigem JPEG durchaus was hin, bin mal mit Corel 
Paint Shop Pro X7 drauf losgegangen.

Also zuerst die Perspektivische Entzerrung der Aufnahme und dann einen 
exakten Beschnitt auf das aktive Displayfenster.


Der Trick mit dem Schwellwert ist: vorher den Lokalkontrast steigern.
Habe nur ein paar Mal einen Hochpaßfilter drüberlaufen lassen, 
Aperturgröße zwischen 2 bis 8 Pixeln und dann läßt sich eine 
Gradationskurve anwenden, die den Hintergrund komplett weiß macht.

Dann kommt der eigentliche Trick: Da das Display Format beim Tek 220 
bekannt ist (320 x 240 Pixel) dann das Bild per Größenänderung ohne 
Interpolation auf dieses Format verkleinern. Wenn der Beschnitt zuvor 
paßte, ist das Ergebnis jetzt schon ziemlich gut, nur daß die dunklen 
Pixel noch verschiedene Grautöne haben und nicht schwarz sind.

Jetzt haben wir ein Bild in Originalauflösung, und können im letzten 
Schritt dann einen Schwellwert anwenden, so daß als Ergebnis ein Bitmap 
mit einem Bit pro Pixel herauskommt.

Ergebnis siehe angehängtes Bild oben.

Was mir nicht gelungen ist, ist das Erhalten der Graustufen in der 
Darstellung des Meßrasters. Aufgrund der Hochpaßfilterung wurden die 
Einzelpixel des Rasters direkt schwarz.
Dafür war der Tonwertbereich des Ausgangsbildes dann doch zu wenig 
eindeutig.

Gruß,
Thorsten

von Richard H. (richard_h27)


Lesenswert?

Walter T. schrieb:
> ab und an fallen bei mir Bildschirmfotos von Geräten mit LCD an.
> Beispielhaft habe ich mal so ein Foto (noch ohne Trapez-Entzerrung)
> angehängt. Das Foto hat die vielfache Auflösung des LCDs (das Bild im
> Anhang ist verkleinert), also sollte sich das Monochrom-Bild in
> Originalauflösung problemlos rekonstruieren lassen.

Ich habe keinen Lösungsvorschlag, aber ich bewundere das Problem.
Warum ist es Dir wichtig, dass der Screenshot als Monochrom-Bitmap 
vorliegt?
Auf dem Ausgangsfoto ist doch alles festgehalten.

Grüße
Richard

von Michael W. (Gast)


Lesenswert?

Thosch schrieb:
> Der Trick mit dem Schwellwert ist: vorher den Lokalkontrast steigern.
> Habe nur ein paar Mal einen Hochpaßfilter drüberlaufen lassen,
> Aperturgröße zwischen 2 bis 8 Pixeln und dann läßt sich eine
> Gradationskurve anwenden, die den Hintergrund komplett weiß macht.

Das leuchtet mir jetz nicht ganz ein. Wie geht das genau?

von Thosch (Gast)


Angehängte Dateien:

Lesenswert?

So, mit ein büschen Handarbeit bekommt man dann auch das "Original" hin:
Also mit Graustufen im Raster.
Habe das Bild mit 'ner zweiten Ebene versehen, die Hintere auf Grauwert 
160 eingestellt und in der vorderen Ebene alle Pixel vom Meßraster mit 
Weiß übermalt.
Ebenen-Mischmodus auf "dunklere Farbe", dann wird für alle Pixel des 
Meßrasters das graue Pixel aus der hinteren Ebene genommen...

Hier mal als 200% vergrößert, das Originalformat von 320x240 ist ja gar 
zu klein...

Gruß,
Thorsten

von der Unbekannte (Gast)


Lesenswert?

ich hätte eine Farbpalette erstellt und alles ausser sehr Dunkel in Weiß 
umgewandelt..

bzw dazu noch Farbreduzierung 16 oder 256 .. das geht auch als script.

von Thosch (Gast)


Lesenswert?

der Unbekannte schrieb:
> ich hätte eine Farbpalette erstellt und alles ausser sehr Dunkel in Weiß
> umgewandelt..
Das funktioniert nicht - probier's aus!
Entweder geht der Schriftzug "MESSUNG" rechts oben kaputt,
oder links oben bleiben dunkle Pixel im Hintergrund.

Du mußt erst den Lokalkontrast der Pixel mit einer passenden (Hochpaß-) 
Filterung erhöhen, dann kann man sowas machen.

von Thosch (Gast)



Lesenswert?

Markus W. schrieb:
> Das leuchtet mir jetz nicht ganz ein. Wie geht das genau?
Ok. Also mal Schritt für Schritt von vorne (siehe angehängte 
Bilderfolge!)

1. Bild perspektivisch korrigiert und beschnitten
   (Tek220_per.jpg)
2. Noisereduction entfernt Fliegengitter
   (Tek220_per_nr.jpg)
3. Hochpaßfilter: 4 Pixel Apertur, 100% Stärke, Hartes Licht
   (Tek220_per_nr_hp.jpg)
4. Bildgröße auf 320x240 geändert, Methode gewichteter Durchschnitt
   (Tek220_per_nr_hp_rs.jpg)
5. Geschärft mit "Unscharf maskieren" Radius 0,5; Stärke 200%; Diff 0
   (Tek220_per_nr_hp_rs_usm.jpg)
6. Schwellenwert auf 70 (Helligkeitswert) angewendet
   (Tek220_per_nr_hp_rs_usm_thr.png)
7. Das Ganze auf 200% hochskaliert
   (Tek220_200%.png)

Die Schärfungsparameter habe ich jeweils empirisch ermittelt,
also einfach ausprobiert, wieviel Schärfung man braucht, damit man eine 
saubere Schwelle zwischen Schwarzen und weißen Pixeln definieren kann.
Für diese Bilderreihe habe ich die gesamte Bearbeitung nochmals 
nachvollzogen und in einzelnen Schritten andere Mittel verwendet, als 
beim ersten Anlauf. (z.B. Unscharf maskieren in Schritt 6. statt 
mehrmaligen Hochpaßschärfens)

Ich hoffe, daß anhand der Bilder die Schritte nachvollziehbar sind.

Das Wichtigste ist, daß man bei der Perspektivkorrektur und beim 
anschließenden Zuschneiden sauber arbeitet, sonst klappt der 
Verkleinerungsschritt nicht.

Viel Spaß beim Nachbasteln. ;-)
Gruß,
Thorsten

von Amateur (Gast)


Lesenswert?

Wenn ich mal unterstelle, dass die Pixel wirklich nur die Zustände hell 
(wie auch immer) und dunkel (dito.) annehmen können, so sollte es doch 
möglich eine Flächenreferenz zu erstellen.

An einer solchen Vergleichsreferenz sollte es möglich sein die zwei 
Zustände zu erkennen. Natürlich hat diese, über die Fläche gesehen, 
keine konstante 50%-Helligkeit.

Wichtig hierfür sind nur die folgenden Parameter bzw. Bedingungen:
1. Keiner fummelt am Helligkeits- und Kontrastregler rum.
2. Die aufnehmende Kamera sollte immer die gleiche Position haben.
3. Die Kamera sollte immer die gleiche Empfindlichkeit haben.
4. Streulicht muss draußen bleiben.

Alternativ muss eine Möglichkeit geschaffen werden das "Referenzbild" 
möglichst einfach zu erstellen.

Das Bild scheint recht Grobpixlig zu sein. Dies lässt die großzügige 
Möglichkeit, in Verbindung mit den heute üblichen Auflösungen, zu 
Interpolieren.

von Peter D (Gast)


Lesenswert?

Ich würde das Bild mal kopieren und einen fetten Tiefpass (7x7) oder 
Median drüber und dieses gefilterte Bild würde ich dann vom Orginal Bild 
abziehen. Dann sollte eigentlich deine Threshold besser drüberlaufen. 
Just a idea.

von Georg (Gast)


Lesenswert?

Walter T. schrieb:
> Man sieht es dem Bild nicht direkt an,
> aber oben links ist es weitaus dunkler als im Rest

Das ist doch eine Schwäche der Aufnahmetechnik, die man erst mal 
beseitigen sollte, oder ist der Bildschirm schon so kaputt?

Oszi-Kameras gab es schon vor Jahrzehnten, dazu wurde i.A. ein Tubus der 
passenden Länge aufgesetzt, um Fremdlicht auszuschliessen. Ich gehe 
davon aus, dass man mit so einem Tubus und einer billigen Digitalkamera 
so einwandfreie Screenshots machen kann, dass sich jegliche Diskussion 
über Schwellwerte und Filter erübrigt. Fehler sollte man immer an der 
Wurzel beseitigen.

Georg

von Medientechniker (Gast)


Lesenswert?

Thosch schrieb:
> Markus W. schrieb:
>> Das leuchtet mir jetz nicht ganz ein. Wie geht das genau?
> Ok. Also mal Schritt für Schritt von vorne (siehe angehängte
> Bilderfolge!)
> ....

Sehr schöne Lösung gefällt mir. Eine paar Fragen/Anmerkungen dazu.

Hat es einen bestimmten Grund warum du nach dem 2. Schritt weiterhin mit 
einem Farbbild arbeitest? Ich habe das Gefühl, dass die 
Farbinformationen nicht benötigt werden und man das ganze in ein 
Graustufenbild wandeln könnte. Durch die Reduzierung auf einen Kanal 
verringert man den Rechenaufwand etwas und evtl. hat es noch andere 
positive Effekte.

Welches Schärfungsverfahren wird da angewandt? Mich wundert die Angabe 
der Apertur von 4Px. Ich denke bei Schärfung beispielsweise an lineare 
Faltungsmatrizen und einer Laplace Gewichtung. Also stark negative 
gewichtet im Zentrum und gering positiv gewichtet am Rand. Diese 
Filtermatrizen haben aber immer eine ungerade meist quadratische 
Matrixgröße. Also 3x3, 5x5, 7x7 ......

Das sind so die Sachen die mir aufgefallen sind aber wie gesagt schönes 
Verfahren und gute Ergebnisse.

Grüße MT

von Walter T. (nicolas)


Lesenswert?

Georg schrieb:
> Das ist doch eine Schwäche der Aufnahmetechnik, die man erst mal
> beseitigen sollte, oder ist der Bildschirm schon so kaputt?
> [...]
> Fehler sollte man immer an der
> Wurzel beseitigen.

Das Oszi-Bild steht exemplarisch für LCD-Bilder. Ein LCD ist kein 
Röhrengerät:
Beim Röhrengerät wird das Bild erst in der Digitalkamera gerastert, 
während der Strahl noch völlig analog malt. Und an den Stellen, an denen 
der Strahl nicht malt, hat der Hintergrund überall dieselbe Farbe. Etwas 
madgig wird das Bild nur zwischen den Stellen, wo Text dargestellt wird. 
Geht bei der analogen Aufnahme Bildinhalt verloren, ist er weg.

Beim LCD ist das Bild ist schon von sich aus gerastert. Die Zeilen und 
Spalten unterscheiden sich in der Helligkeit, je nachdem wieviele Pixel 
darin gesetzt sind. Deswegen würde es auch nicht nützen, ein weißes und 
dunkles Referenzbild zu haben.

Darüberhinaus in das Bild aber auch schon völlig digital. Solange ich 
jedem Pixel richtig als weiß/schwarz identifizieren kann, kann keinerlei 
Information durch ein irgendwie schlechtes Foto verlorengehen - 
lediglich der Aufwand für die Rekonstruktion steigt. Aber hier habe ich 
die Freiheit, zwischen dem Aufwand bei der Aufnahme und dem Aufwand in 
der Nachbearbeitung zu wählen.

Tosch hat die passende Rekonstruktion dankenswerterweise schon völlig 
fertig ausgeknobelt - das, was ich am Ende erreichen wollte. Meine 
ursprünglichen Überlegungen gingen auch erst in die Richtung, erst eine 
Bitmap für den Threshold-Verlauf zu gewinnen, aber bei seiner Methode 
sprechen die Ergebnisse schon für sich selbst!

Corel Photo Paint hat die meisten genannten Optionen nicht, aber in Gimp 
läßt sich das 1:1 umsetzen:

1. Hilfslinien einfügen (0H, 0V, 960V, 720H) und dann perpektivisch 
daran ausrichten, Bild beschneiden

2. Flecken entfernen

3. Schärfen

4. Skalieren (jetzt läßt sich sehen, ob die Ausrichtung so OK war)

5. Nochmal schärfen (unscharf maskieren)

6. Jetzt paßt der Schwellwert

Vielen Dank für die Diskussion und natürlich insbesondere Tosch.

von Vlad T. (vlad_tepesch)


Lesenswert?

ein tipp um Gradienten aus schlechter Beleuchtung auf relativ 
einfarbigen Flächen aus dem Bild zu bekommen (gut geeignet für 
fotografierte dokumente oder so):

 - ebene duplizieren
 - auf duplizierte Ebene den gaußschen weichzeichner anwenden mit 
filterbreite in der Größenordnung der halben Bildbreite auswählen (typ 
auf RLE stellen, sonst rechnet er ewig)
 - dann mit den Ebenenmodi und der Deckkraft spielen.
   meist ist Division oder Bildschirm ganz gut
   bei Division eventuell die Deckkraft etwas reduzieren

ein normaler Mittelwertfilter scheint mir dafür besser geeignet zu sein, 
aber den habe ich im GIMP bisher vergeblich gesucht - zumindest mit frei 
konfigurierbarer Filterbreite.

: Bearbeitet durch User
von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Wie wäre es, das gesamte Bild in einzelne Kacheln aufzuteilen, z.B. 
16x16 Pixel und innerhalb dieser jeweils eine dynamische Schwelle für 
den SW-Umschlag zu berechnen?

von Richard H. (richard_h27)


Lesenswert?

Richard H. schrieb:
> Warum ist es Dir wichtig, dass der Screenshot als Monochrom-Bitmap
> vorliegt?
> Auf dem Ausgangsfoto ist doch alles festgehalten.

Hallo Walter Tarpan,

es würde mich wirklich interessieren, warum die Ausgangsfotos für die 
Archivierung nicht ausreichen.

Vielen Dank
Richard

von Walter T. (nicolas)


Lesenswert?

Richard H. schrieb:
> [...] warum die Ausgangsfotos für die
> Archivierung nicht ausreichen.

Wer sagt, daß es nur für die Archivierung ist? Ich mache auch Bilder für 
meine Website und andere Publikationen.

von Richard H. (richard_h27)


Lesenswert?

Walter T. schrieb:
> Ich mache auch Bilder für meine Website und andere Publikationen.

Danke Walter, das leuchtet mir augenblicklich ein.

Grüße
Richard

von mitleser (Gast)


Angehängte Dateien:

Lesenswert?

Hier mal mein Versuch ...

1. Bild kopiert und Gaußfilter mit 250 Pixel drüber.
2. Orginal durch gefiltertem Bild dividieren.
3. in sw konvertieren.

von Walter T. (nicolas)


Angehängte Dateien:

Lesenswert?

Es ist erstaunlich... der Filter "intelligente Unschärfe" (hier getestet 
in Corel Photo Pain), eingesetzt um die Bildschirm-Streifen zu 
entfernen, ist durch nichts in Gimp zu ersetzen. Leider hat Corel Photo 
Paint scheinbar nicht die Perspektiven-Werkzeuge wie Gimp oder Paint 
Shop Pro.

Momentan sieht mein Workflow also aus: Perspektivisch geraderichten in 
Gimp -> Export als PNG -> "intelligente Unschärfe" in Corel Photo Paint 
-> Export als PNG -> Hochpaß und Schwellwertbildung in Gimp.

Mit dem Ergebnis bin ich allerdings sehr zufrieden.

Noch einmal Danke für die Diskussion und vor allem Thosch mit seinem 
feinen Rezept!

: Bearbeitet durch User
von Reinhard S. (rezz)


Lesenswert?

Walter T. schrieb:
> Corel Photo Pain

Absicht? :)

von Walter T. (nicolas)


Lesenswert?

Reinhard S. schrieb:
> Absicht? :)

Nein.

von Vlad T. (vlad_tepesch)


Lesenswert?

Walter T. schrieb:
> Es ist erstaunlich... der Filter "intelligente Unschärfe" (hier getestet
> in Corel Photo Pain), eingesetzt um die Bildschirm-Streifen zu
> entfernen, ist durch nichts in Gimp zu ersetzen.

entspricht das nicht dem selektivem gaußschem weichzeichner?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.