Forum: Digitale Signalverarbeitung / DSP / Machine Learning Berechnung eines optischen Filters


von Mr. C (Gast)


Lesenswert?

Wir möchten Bilder, die herunterskaliert wurden, im Nachhinein schärfen. 
Wie könnte man dies am Einfachsten tun?

Die Test-Bilder liegen als TIFF(16 Bit je Farbe) vor, später wird es 
aber ein kontinuierlicher Bilderstrom über GIG-E-Vision. Welcher 
Prozessor eignet sich dafür und wie programmiert man den? Wieviel Pixel 
muss man dazu gleichzeitig betrachten und verrechnen?

Wie vermeidet man Übersteuerungen beim Schärfen, die zu unnatürlichen 
Darstellungen führen?

von Manfred M. (bittbeisser)


Lesenswert?

Also ich habe mich bei meinen Tests nach dieser Seite gerichtet: 
http://www.dspguide.com/ch24/2.htm

Ich denke, das es sich dabei um den Sobel-Operator handelt: 
https://de.wikipedia.org/wiki/Sobel-Operator

Bei meinen Versuchen habe ich aber festgestellt, dass man es dabei nicht 
übertreiben sollte. Oft sehen die Bilder nach zweimaliger Anwendung 
schon unnatürlich aus. Nach ca. 20-maliger Anwendung würde sogar Andy 
Warhol vor Neid erblassen.

Das mit der Übersteuerung ist bei der Bildmanipulation ein allgemeines 
Problem. Eine generelle Lösung dafür gibt es glaube ich nicht. Es hilft 
aber, wenn man die Pixeldaten in einem ausreichend grossen Datenwert 
abspeichert und weiter verarbeitet. Dann kann man auf dem Ziel-Image 
entweder clippen (war bei mir bisher ausreichend) oder komplett neu 
skalieren (habe ich noch nicht versucht).

Und ich hoffe mal, das die Bilder keinen Alpha Kanal haben, denn dann 
wird es richtig kompliziert. Die Artefakte dazu habe ich schon gesehen, 
aber die Lösung habe ich noch nicht geschafft (es gibt dabei 
Farbränder).

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Mr. C schrieb:
> Wir möchten Bilder, die herunterskaliert wurden, im Nachhinein
> schärfen.
> Wie könnte man dies am Einfachsten tun?
Ich wuerd' erstmal mit ImageMagick anfangen. Und keine Wunder erwarten.

> Die Test-Bilder liegen als TIFF(16 Bit je Farbe) vor, später wird es
> aber ein kontinuierlicher Bilderstrom über GIG-E-Vision. Welcher
> Prozessor eignet sich dafür und wie programmiert man den?
Irgendein x86(_64) wird wohl das guenstigste 
Preis/Leistung/Exotik-Verhaeltnis haben. Die Aufgabe kommt mir jetzt 
nicht so exotisch vor, dass man irgendeinen Spzialprozessor dafuer 
braeuchte.
Die tiffs werden wohl gut per Batch und ImageMagick handelbar sein; bei 
GIG-E-Vision wirds halt spziell, geheim und damit wohl teurer.

> Wieviel Pixel
> muss man dazu gleichzeitig betrachten und verrechnen?
Je mehr, desto besser wirds wohl gehen.

> Wie vermeidet man Übersteuerungen beim Schärfen, die zu unnatürlichen
> Darstellungen führen?
Durch einen cleveren Filteralgorithmus?

Gruss
WK

von TestX (Gast)


Lesenswert?

Am einfachsten ist es wie schon erwähnt ImageMagick zu verwenden.

Wenn es richtig gute ergebnisse geben soll bleibt nur der weg über 
hochkomplexe neuronale netze die anhand von einigen 100mio bildern den 
inhalt rekonstruieren können...

von J. S. (engineer) Benutzerseite


Lesenswert?

Mr. C schrieb:
> Wir möchten Bilder, die herunterskaliert wurden, im Nachhinein schärfen.
> Wie könnte man dies am Einfachsten tun?
Beim Herunterskalieren geht eigentlich hochfrequenze Information 
verloren und es muss gefiltert werden, dass es hierbei nicht zu Fehlern 
kommt. Später ist das Bild frequenzmäßig eher am Limit, also vorher - 
daher frage Ich mich, was da nun durch post-Prozessierung nachgeschäft 
werden soll.

Künstliche Schärfung braucht man eigentlich nur beim up-scaling, z.B. 
bei der Wandlung von SD auf HD.

von Purzel H. (hacky)


Lesenswert?

Fuer Einzelbilder gibt es einen Entrope Entrauscher, der ist als 
iterativer Algorithmus eher aufwendig in Sachen Rechenzeit.
Eine bessere Kamera und nicht runterskalieren ist die bessere Loesung.

von Kamera-d (Gast)


Lesenswert?

Die aktuellen Kameras machen das aber auch in Signalverarbeitung und 
nicht nur etwa durch bessere Optiken oder Sensoren. Da wird auch viel 
betrogen.

von Johannes S. (Gast)


Lesenswert?

Kamera-d schrieb:
> Da wird auch viel
> betrogen.

Aber nicht bei GigE Vision, da bekommt man die Rohdaten der Pixel.
Die schnellen X64 schaffen da einiges, mit den Intel Bibliotheken wie 
IPP oder mit der OpenCV bekommt man schon stark optimierte Algorithmen.
Zum Bildeinzug per GigE liefert entweder der Kamerahersteller sein 
Framework oder man nimmt generische von Stemmer (CVB), MatrixVision, 
Halcon oder ähnliche.

von Kamera-d (Gast)


Lesenswert?

Johannes S. schrieb:
> Aber nicht bei GigE Vision, da bekommt man die Rohdaten der Pixel.

Das glaubst auch nur Du. GigE Vision und andere Formate kommen nicht aus 
dem Sensor raus sondern werden entweder durch einen programmierbaren 
image processor (Nikon) einen ASIC-Chip (Leica) oder einen FPGA gemacht 
(Hasselblad).

Die Sensordaten haben bei den hohen Auflösungen unzählige Fehler (oft 
mehrere Tausen kaputte Pixel, Dutzende kaputte Linie) und stark 
abweichende Zeilen-pattern. Dazu kommen optische Effekte wie Aberation.

All das wird vorher wegkorrigiert, damit der Kunde nicht merkt, was er 
für Krüppelware hat bzw er was mit dem Bild anfangen kann. Besonders die 
Linseneffekte müssen von der Kamera weggemacht werden, weil man das nur 
anhand von Messungen kann. Ein späterer Bildalgorithmus hat keine Chance 
das zu erkennen.

In der Regel wird auch schon Bayer-Dedodierung vollzogen und die 
Chromakorrektur des Sensors. Die Objektive haben unterschiedliche 
Vergütungen und Farbfehler, die wegkorrigiert werden müssen. Bei der 
Gelegenheit werden auch kaputte Pixel ersetzt, non uniformity eledigt 
und das Rauschen der Elektronik rausgerechnet. Obendrauf kommen 
Schärfungsalgorithmen, welche die flache Optik billiger Kammeras 
aufwerten.

30% vom Bildinhalt sind komplett erstunken und erlogen.

Bei billigen Kameras unter 2000,- ist es noch mehr, weil die ziemlich 
auf die Kosten der Sensoren achten müssen und bei Sensoren unter 200,- 
abwärts kriegt man fast nur den Ausschuss, der übrig bleibt, wenn die 
obersten 30% der Charge an die Tophersteller gegangen ist.

Ein mir bekannter Hersteller hat mal 3 Kameraproduzenten gleichzeitig 
beliefert und der Tophersteller hat aus ein und derselben Charge einfach 
die oberen 7% der Ausbeute zum Dreifachen Grundpreis abgezogen. Die 
hatten dann weniger als soundsoviele Fehler. Maximal 100 Pixel und nur 
eine Zeile z.B. Alles zwischen 8% und 33% ging an uns, der Rest zu 
halben Preis an die preiswerten Hersteller.

von Johannes S. (Gast)


Lesenswert?

Kamera-d schrieb:
> GigE Vision und andere Formate kommen nicht aus
> dem Sensor raus sondern werden entweder durch einen programmierbaren
> image processor (Nikon) einen ASIC-Chip (Leica) oder einen FPGA gemacht
> (Hasselblad).

GigE Vision ist kein Format sondern ein Standard für Machine Vision. Die 
Kameras die den Standard implementieren haben alle FPGAs drin, aber 
nicht von Nikon oder Hasselblad. Die sind für Fotoknippsen und nicht für 
Kameras für Inspektions- oder Messaufgaben. Nikon oder HB werden zwar 
auch für Photogrammetrie eingesetzt, das hat dann aber wieder nix mit 
GigE Vision zu tun.

Kamera-d schrieb:
> Die Objektive haben unterschiedliche
> Vergütungen und Farbfehler, die wegkorrigiert werden müssen.

ja, aber wie soll der Kamerahersteller sowas machen wenn er gar nicht 
weiss welches Objektiv ich einsetze? Eine Kommunikationn zwischen Kamera 
und Objektiv ist da nicht Standard. Kamerakalibrierung muss man da 
mühselig selber machen. Und Farbfehler gibts nur bei Farbkameras, für MV 
setzt man eher monochrome Kameras ein.

Kamera-d schrieb:
> Bei billigen Kameras unter 2000,- ist es noch mehr, weil die ziemlich
> auf die Kosten der Sensoren achten müssen und bei Sensoren unter 200,-

Kameras mit grossflächigen CCDs kosten 5stellig, eben weil die Sensoren 
selektiert und damit teurer sind. Bei Kodak/OnSemi findet man für die 
grossen Sensoren Angaben zu defekten Pixeln, die liegen bei einem 10 M 
Sensor aber eher bei <20, Pixel mit kleineren Spannungsfehler bei <1000 
oder 2000, je nach Klasse. Und die Preisdifferenz zwischen Class1/2 ist 
ordentlich.
Kameras oder Sensoren mit 30% Pixelfehlern oder interpolierten 
Pixelwerten wären ganz einfach Schrott. Das würde sofort auffallen und 
sich nicht am Markt halten.

von Kamera-d (Gast)


Lesenswert?

Johannes S. schrieb:
> GigE Vision ist kein Format sondern ein Standard für Machine Vision.

Du hast den OT gelesen? Er hat Bilder im 16Bit Format die er bearbeiten 
will und dann händisch versenden will. Ich sehe hier keine 
MV-Applikation und auch nicht die von Dir angeführten 
Schwarz-Weiss-Bildsensoren für Video.

10M mit 20 Fehlern mag sein, wenn man sie selektiert, aber in Kameras 
werden Sensoren bis 80M eingesetzt und da steigt die Fehlerzahl 
mindestens linear mit. Wären also schon 160, wenn Du nachrechnen 
möchtest. Mit Blick auf die Ausbeute der Wafer und der größeren Fläche 
dieser Sensoren sieht es gleich nochmal schlechter aus.

>Pixelinterpolation
Kein "Schrott", wie Du schreibst, sondern Standard!

Wir haben Sensoren aller erdenklichen Hersteller vermessen. Es gibt 
keinen einzigen, der völlig fehlerfrei ist und es kommt auch kein 
Hersteller, der völlige fehlerfreie Sensoren zusichern möchte.

Zudem ist es so, dass die Sensoren im Laufe der Zeit auch noch welche 
hinzubekommen, daher macht es am Ende keinen Unterschied, ob er 40 oder 
140 Fehler hat. Ein mir bekannter Hersteller für Consumer-Kameras lässt 
bei seinen Modellen der 2k-Klasse Fehler bis zu 10.000 zu. Allerdings 
bei einem 50M-Sensor. Die werden alle durch Einzelabgleich in der Kamera 
erfasst, im flash hinterlegt und beim Auslesen des Bildes 
weginterpoliert. Jeder mit einer für ihn optimierten Strategie. Heraus 
kommt ein lupenreines Rohbild. Auf das wird dann die Objektivkorrektur 
losgelassen und dieses ist es, was man als angebliches Rohdatenbild auf 
der SD-Karte findet.

Die Objektivkorrektur muss zuerst erfolgen, bevor man hergeht und Bayer 
macht, weil dann falsche Farbinformationen eingetragen würden. Wenn Du 
erst ein Farbbild machst und dieses dann A-korrigierst, kriegst Du die 
intuitiven Farbsäume an den Rändern der SW-Übergänge.

Und für all das MUSS das Objektiv bekannt sein.

Wenn du es so handhabst, wie Du beschreibst, nämlich "die Kamera weiss 
nicht welches Objektiv verwendet wird" , dann hast Du keine Chance auf 
ein sinnvolles Bild.

von -gb- (Gast)


Lesenswert?

Kamera-d schrieb:
> Die Objektivkorrektur muss zuerst erfolgen, bevor man hergeht und Bayer
> macht, weil dann falsche Farbinformationen eingetragen würden.

Warum sollte das so sein? Ob Ich erst die fehlenden Farben rekonstruiere 
und dann deren Position, ist eigentlich egal. Interpolieren muss man so 
oder so. Und man muss ein bischen intelligent raten.

von J. S. (engineer) Benutzerseite


Lesenswert?

Also wenn das Ausmaß der Aberration mehre Pixel übersteigt, ist das 
schon ein Problem, weil die Interpolation meistens statisch mit einem 
definierten Feld, z.B. 7x7 oder 9x9 arbeitet. Dazwischen wird eine 
lineares Verhalten der Farbschwerpunkte angenommen.

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.