PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Minolta RAW dekodieren


harumpel
20.06.2006, 21:03
Guten Abend,

weiß vielleicht jemand, ob und wo es eine Anleitung zur Dekodierung von Minolta RAW gibt? Ich meine damit das RAW-Format, welches in den digitalen SLRs 5D & 7D verwendet wird.

Ich experimentiere gerade in einem eigenen Programm mit diversen Bildfiltern, vornehmlich Rauschfiltern :cool:. (Nicht das wir SoMiker Rauschentfernung nötig hätten.) Mir ist aufgefallen, dass das Entfernen von Rauschen aus einer JPG Datei recht ineffektiv ist, da das rauschende Pixel in der Bayer-Matrix durch Interpolation "versteckt" und verteilt wird. Wesentlich sinnvoller wäre es die RAW Datei einzulesen, nur wie stelle ich das an? Ich programmiere übrigens in Java, C++ würde notfalls aber auch gehen.

Meine Idee bis jetzt: dcraw nehmen und mit bilinearer Interpolation in ein verlustfreies Format konvertieren lassen. Danach diese RGB Datei mit meinem eigenen Programm einlesen und zurückinterpolieren. Das Ergebnis dürfte brauchbar sein, nur möchte ich nicht auf dcraw angewiesen sein. Obwohl, es hat ja auch Vorteile (Weissabgleich usw).

Wenn jemand was weiß, bitte melden.

Schönen Gruß
Theo

kugelfisch
20.06.2006, 21:22
Hi,

eine Doku zum Format habe ich nicht, aber eine Java-API bekommst du dort (https://jrawio.dev.java.net/). Sind aber glaub ich auch JNI-Calls, und mit Minolta-RAW's stürzt das Demo-Programm bei mir immer ab.

UFRAW ist aber ja Open Source, da kann man notfalls auch mal reinschauen.

Was für ein Sinn macht es aber wieder zurückzuinterpolieren und ins RAW zuschreiben? Wenn man schonmal interpoliert hat kann man das Bild auch verlustfrei in TIFF abspeichern?

Lass aber wieder von dir hören, wenn du erfolgreich bist!

Gruß
Alex

harumpel
20.06.2006, 22:03
Hi,
Sind aber glaub ich auch JNI-Calls, und mit Minolta-RAW's stürzt das Demo-Programm bei mir immer ab.

Bei mir auch. "Invalid byte order". Bin mal gespannt ob sich das regeln läßt.


Was für ein Sinn macht es aber wieder zurückzuinterpolieren und ins RAW zuschreiben?

Nicht ins RAW zu schreiben, sondern Bildrauschen unterdrücken, weil rauschende Pixel wesentlich besser zu erkennen sind. Natürlich müsste man dann nach der Rauschentfernung wieder interpolieren.

RainerV
20.06.2006, 22:07
Meine Idee bis jetzt: dcraw nehmen und mit bilinearer Interpolation in ein verlustfreies Format konvertieren lassen. Danach diese RGB Datei mit meinem eigenen Programm einlesen und zurückinterpolieren. Das Ergebnis dürfte brauchbar sein, nur möchte ich nicht auf dcraw angewiesen sein. Obwohl, es hat ja auch Vorteile (Weissabgleich usw).

Wenn jemand was weiß, bitte melden.

Schönen Gruß
Theo

Wieso nicht dcraw nehmen? Oder zumindest per Debugging aus dcraw die notwendigen Infos gewinnen. Wie Alex auch schon gesagt hat: Auch UFRAW liegt ebenfalls wie dcraw im Quellcode vor, da findet man schnell die Aufrufe, die man braucht um gezielt Anpassungen vorzunehmen. Spart viel eigene Entwicklungsarbeit. Die Weißabgleichsgeschichten sind da letztendlich einfach "Multiplikationsfaktoren" auf die eigentlichen Rohdaten. Du bekommst da ohne viel Aufwand letztendlich einen Array mit den Rohdaten geliefert und kannst damit so ziemlich alles machen wie Du es willst.

Rainer

kugelfisch
20.06.2006, 22:27
Hi,
Sind aber glaub ich auch JNI-Calls, und mit Minolta-RAW's stürzt das Demo-Programm bei mir immer ab.

Bei mir auch. "Invalid byte order". Bin mal gespannt ob sich das regeln läßt.


Was für ein Sinn macht es aber wieder zurückzuinterpolieren und ins RAW zuschreiben?

Nicht ins RAW zu schreiben, sondern Bildrauschen unterdrücken, weil rauschende Pixel wesentlich besser zu erkennen sind. Natürlich müsste man dann nach der Rauschentfernung wieder interpolieren.

Ich glaub aber nicht, daß du nach dem Zurückinterpolieren wieder das Gleiche hast wie vor dem Interpolieren. Wenn dann gleich die RAW-Daten nehmen - das Format kann ja nicht all zu kompliziert sein - da werden die Pixels einfach hintereinander liegen. Kannst ja mal den UFRAW, UCRAW oder RAWIO Entwickler anschreiben - die können da sicher weiterhelfen.

Glaubst du wirklich, daß es einfach ist bei einzelnen Rot, Blau und Grün Pixeln ein Rauschen zu erkennen und zu kompensieren? Wie arbeiten denn die Entrauscher bei den vorhandenen RAW-Konvertern - vor oder nach dem Interpolieren?

Kennst du einen guten Entrauschungsalgorythmus?

harumpel
20.06.2006, 23:19
@RainerV

dcraw ist bestimmt sehr nett, wenn man die Möglichkeiten auszreizt, mich interessiert zZ aber weniger die praktische Anwendung, als das Experimentieren mit eigenen Filtern. Und da wäre es am schönsten, wenn ich die Daten roh in Java einlesen könnte.

Übrigens, gibt es in dcraw wirklich einen Parameter, der es den nicht interpolierten Inhalt der Bayer-Matrix ausgeben läßt? Ich habe bereits "-o 0" probiert, aber es kommt kein Raw raus (wie angegeben).


@kugelfisch

Ich glaub aber nicht, daß du nach dem Zurückinterpolieren wieder das Gleiche hast wie vor dem Interpolieren.

Ich will ja auch gar nicht das Gleiche haben. Ich will Rauschen entfernen. Und biliear zurückinterpolieren schaffe ich auch noch :top:

Kannst ja mal den UFRAW, UCRAW oder RAWIO Entwickler anschreiben - die können da sicher weiterhelfen

Ich glaube das ist eine gute Idee. Schade dass jrawio nicht funktioniert. Mit einer *.cr2 Datei von der EOS 350d läufts übrigens einwandfrei :roll:



Glaubst du wirklich, daß es einfach ist bei einzelnen Rot, Blau und Grün Pixeln ein Rauschen zu erkennen und zu kompensieren?

Ja :D Bin mir ziemlich sicher. Durch die Interpolation wird der Datensatz "interpretiert" und es wird schwieriger Ausreißerpixel zu erkennen.

Wie arbeiten denn die Entrauscher bei den vorhandenen RAW-Konvertern - vor oder nach dem Interpolieren?


Ich gehe stark davon aus, daß sie vor dem Interpolieren entrauschen. Nach dem Interpolieren kann man eigentlich nicht mehr vernünftig entrauschen, sondern nur noch "Problemzonen" erkennen und glattbügeln. Schön ist das nicht.


Kennst du einen guten Entrauschungsalgorythmus?

Kommt darauf an, für welchen Zweck. Wenn Du Dich damit beschäftigen möchtest, probiere als erstes den 3x3 Median. Der bügelt Rauschen wie es bei der 5D & 7D bei ISO 800 (und mit Einschr. 1600) vorkommt recht gut weg, ohne Kanten anzugreifen. Allerdings leiden Details die kleiner als 5 Pixel groß sind stark darunter.

RainerV
20.06.2006, 23:32
Übrigens, gibt es in dcraw wirklich einen Parameter, der es den nicht interpolierten Inhalt der Bayer-Matrix ausgeben läßt?


Kann ich Dir nicht sagen. Aber UFRAW, das ja auf dcraw zurückgreift, erlaubt die Auswahl von vier verschiedenen Interpolationsalgorithmen. Also müsste es ziemlich einfach sein im Souce-Code von UFRAW die Stelle zu identifizieren, wo diese Interpolation der Rohdaten durchgeführt wird - und dort muß das Programm die Rohdaten haben. Ich meinte wirklich den Source-Code von UFRAW und DCRAW, die Du m.E. gut zur Implementation Deiner eigenen Ideen heranziehen könntest - ohne selbst alles entwickeln zu müssen.

Rainer

Sebastian W.
21.06.2006, 06:41
Übrigens, gibt es in dcraw wirklich einen Parameter, der es den nicht interpolierten Inhalt der Bayer-Matrix ausgeben läßt?

Ja gibt es, den Dokumentation-Modus

Wenn du selbst mit den RAW-Daten arbeiten möchtest, findest du hier im Forum oder im DSLR-Forum (weiß nicht mehr) ein sehr einfaches kleines und leicht verständliches Programm im Quellcode um auf Bildpunktebene zu manipulieren, z.B. zur Darkframe-Subtraktion usw.

harumpel
21.06.2006, 23:52
Also müsste es ziemlich einfach sein im Souce-Code von UFRAW die Stelle zu identifizieren, wo diese Interpolation der Rohdaten durchgeführt wird - und dort muß das Programm die Rohdaten haben.

Tja, für Leute, die regelmässig C++ nutzen, dürfte es einfach sein. Für mich nicht. Naja, ich sehe schon, ich werds versuchen müssen.


harumpel hat folgendes geschrieben:
Übrigens, gibt es in dcraw wirklich einen Parameter, der es den nicht interpolierten Inhalt der Bayer-Matrix ausgeben läßt?

Ja gibt es, den Dokumentation-Modus

Dieser Modus gibt aber nur die Grauwerte an, da muss man noch irgendwie die Matrix drüberlegen. Vielleicht wäre das auch ein gangbarer Weg.

Wenn du selbst mit den RAW-Daten arbeiten möchtest, findest du hier im Forum oder im DSLR-Forum (weiß nicht mehr) ein sehr einfaches kleines und leicht verständliches Programm im Quellcode um auf Bildpunktebene zu manipulieren, z.B. zur Darkframe-Subtraktion usw.

Hab alles abgesucht und das kleine Programm mit Quellcode nicht gefunden. Dafür aber immerhin Rawdeal und eine weitere Java-Raw-Api.


Nachtrag: Die Java-API "RawLib for Java" unterstützt "unser" Raw-Format !! Bin gerade dabei das schöne Sample-Programm auszuprobieren. Werde jetzt wohl kaum noch selbt irgendwelche I/O-Routinen basteln.

kugelfisch
22.06.2006, 08:12
Ich hab mir jetzt mal die DCRaw Source runtergeladen. Das ist kein C++ sondern C und besteht auch nur aus der dcraw.c

Die wesentlichen Teile sollten auch nach Java portierbar sein - aber nur wenn Laufzeit so absolut keine Rolle spielt ;)

Wenn du darin nicht findest was du sucht, solltest du mal Überlegen, ob die Aufgabe nicht vielleicht doch ein bischen zu Anspruchsvoll ist (ist nicht böse gemeint)

Hat die Bayer-Matrix eigentlich bei allen Sensoren die gleiche Reihenfolge?

kugelfisch
22.06.2006, 10:47
Also hab nochmal ins dcraw geschaut.

In der main() wird in Zeile 6736 das RAW geladen "(*load_raw)();". Im Dynax-Fall ruft er dazu die Funktion "packed_12_load_raw()".

Interpoliert wird dann ein paar Zeilen weiter unten in unserem Fall mit ahd_interpolate().

Wenn du deine Entschrauschung da dazwischenhängst, hättest du dir das komplette Einlesen und Wegschreiben gespart und könntest dich komplett auf die Bildmanipulation konzentrieren.

Und ehrlich gesagt, halte ich die Umsetzung in C für einfacher (auch für einen Java-Umsteiger) und auf jeden Fall wesentlich performanter.

harumpel
22.06.2006, 18:25
@kugelfisch

wie gesagt, ich habe jetzt "RawLib for Java" und da erübrigt sich das umschreiben von dcraw, weil ich eben nicht den Anspruch habe, einen eigenen Raw-Konverter zu schreiben, sondern lediglich mit Entrausch-Algorithmen experimentieren möchte. Im übrigen beherrscht "Rawlib" auch noch andere Features, die einen Raw-Konverter ausmachen und dies überaus performant ;)

Hat die Bayer-Matrix eigentlich bei allen Sensoren die gleiche Reihenfolge?

Nein, da gibts Abweichungen. Im Quellcode von dcraw sind doch ein paar Beispiele drin.

Stuessi
27.06.2006, 12:05
Hallo,
meine Experimente mit RAW-Dateien sind hier nachzulesen:

http://www.d7userforum.de/phpBB2/ftopic27331.html

Gruß,
Stuessi

bleibert
27.06.2006, 18:49
Übrigens, gibt es in dcraw wirklich einen Parameter, der es den nicht interpolierten Inhalt der Bayer-Matrix ausgeben läßt? Ich habe bereits "-o 0" probiert, aber es kommt kein Raw raus (wie angegeben).Einfach mal im eigenen Forum suchen ;)

Guckst Du hier (http://www.d7userforum.de/phpBB2/viewtopic.php?p=379423#379423)

harumpel
27.06.2006, 18:57
@Dennis

Danke schön, nur war die Anleitung im anderen Forum für meine Zwecke wenig hilfreich.

Habe mittlerweile längst gefunden was ich suche, muß jetzt nur Zeit finden mich weiter damit zu beschäftigen.

Biis jetzt habe ich lediglich geschafft, die jraw-Bibliothek soweit umzuändern, daß sie mir Rohdaten liefert. Da es zu jraw kaum Dokumentation und keinen Source-Code gibt, hat es schon seine Zeit gekostet es zu dekompilieren, verändern und dann wieder zusammenzusetzen.

bleibert
27.06.2006, 20:11
Danke schön, nur war die Anleitung im anderen Forum für meine Zwecke wenig hilfreich.Gerne geschehen, aber es war die Antwort auf Deine Frage.

ich verstehe immer noch nicht, warum Du das Rad neu erfinden möchtest.

harumpel
27.06.2006, 20:13
ich verstehe immer noch nicht, warum Du das Rad neu erfinden möchtest.

Inwiefern das denn? Ich erfinde das Rad eben nicht neu, sondern benutze die Java-Bibi, die sich nahtlos in mein Proggi intergriert. Was soll ich mit dcraw ??

kugelfisch
28.06.2006, 00:23
@Dennis

Danke schön, nur war die Anleitung im anderen Forum für meine Zwecke wenig hilfreich.

Habe mittlerweile längst gefunden was ich suche, muß jetzt nur Zeit finden mich weiter damit zu beschäftigen.

Biis jetzt habe ich lediglich geschafft, die jraw-Bibliothek soweit umzuändern, daß sie mir Rohdaten liefert. Da es zu jraw kaum Dokumentation und keinen Source-Code gibt, hat es schon seine Zeit gekostet es zu dekompilieren, verändern und dann wieder zusammenzusetzen.

Du weißt aber schon, daß das illegal ist was du da machst!? Die Entwickler werden schon ihre Gründe haben, warum sie die API nicht als OpenSource veröffentlicht haben.

bleibert
28.06.2006, 00:37
Inwiefern das denn?Wenn ich Dich richtig verstanden habe, möchtest Du die einzelnen Kanäle der Raw-Datei separat entrauschen, und dann erst interpolieren. Das mag ja eine schöne Spielerei und Herausforderung sein, das selber zu machen - ich könnte das momentan nicht - aber was soll daran neu oder anders sein, als das, was die bisherigen Raw-Konverter machen?

harumpel
28.06.2006, 01:09
@bleibert

Verstehe jetzt was du meinst. Also: Bei mir steht bald eine Prüfung in Bildverarbeitung an. Da mich das Thema auch privat interessiert, möchte ich einige frisch erworbene Kenntnisse vertiefen/praktisch einsetzen und mir ein Bild davon machen, wie sich diverse Filter/Operatoren/Transformationen auf "wirkliche" Aufnahmen auswirken.

Ich habe gar nicht vor bestehenden Raw-Konvertern oder Entrauschprogrammen Konkurrenz zu machen, sondern möchte nur rausfinden wie und warum bestimmte Sachen funktionieren oder eben nicht.

Wenn man erst anfängt sich damit zu beschäftigen, kommt man schnell vom hundertsten in tausendste ;) Nachdem ich mich im Entrauschen versucht hatte, stellte ich fest daß das Rauschen durch die Interpolation soweit maskiert wird, daß effektives Entrauschen sehr erschwert wird. Also mußte ich direkt mit Raw-Daten arbeiten. Mittlerweile bin ich sogar schon so weit, daß ich mich mit diversen Interpolationsverfahren auskenne und noch ein paar Ideen habe, die ich gerne ausprobieren würde.

Wie gesagt, es geht mir primär darum mich weiterzubilden. Da ich in Java programmiere, ist für mich die jraw-Bibliothek ideal, da sie neben der Erkennung der meisten RAW-Formate noch diverse Interpolationsverfahren und vieles mehr bietet, ohne das ich es alles selbst schreiben muß. So habe ich den Rücken frei für das worum es mir wirklich geht.


@kugelfisch

Du weißt aber schon, daß das illegal ist was du da machst!?

Auf der Webseite steht nur "100% free for non-commercial use". Welche Art von "use" wird nicht weiter erwähnt. Mir ist schon klar, daß ich den Code verändert nicht weitergeben darf. Du kannst heute Nacht also ruhig schlafen :cool:

bleibert
28.06.2006, 01:53
harumpel,
dann ist ja alles klar. Dann wünsche ich mal viel Erfolg und Spaß - vielleicht wird ja ein zweiter Dave Coffin aus Dir ;)