Einzelnen Beitrag anzeigen
Alt 29.12.2006, 00:33   #6
Stuessi

Themenersteller
 
 
Registriert seit: 17.05.2005
Ort: in der Nähe von Köln
Beiträge: 2.052
Hallo eiq,
ich bin beeindruckt, Dein Programm liest sich sehr gut! Leider kann ich es nicht laufen lassen, da ich keinen C-Compiler habe.
Meine oben angeschnittenen Gedanken möchte ich deshalb mit COMAL Zeilen erläutern, wo so große Felder leider nicht erlaubt sind.

Zunächst werden drei Felder deklariert für die drei RAW-Daten.

0090 DIM feld1#(-4:3011,-4:2003) //Original
0091 DIM feld2#(-4:3011,-4:2003) // Dunkelbild (evtl Mittelwert von mehreren Dunkelbildern)
0092 DIM feld3#(-4:3011,-4:2003) // Ergebnis

Es folgt das Lesen der Daten für file 1 und file 2 in der Art

0440 FOR y#:= -4 TO 2003 DO
0450 FOR x#:=-4 TO 3011 STEP 2 DO
0460 // step 2, da 3 Byte fuer 2 Pixel gelesen werden
0550 dwert1$:=""; dwert2$:=""
0560 FOR k:=1 TO 3 DO
0570 a$:=GET$(1,1)
0580 IF a$="" THEN a$:=CHR$(0)
0600 dwert1$:=dwert1$+a$
0610 ENDFOR k
0630 // aus drei 8-Bit-Werten werden zwei 12-bit-werte
0650 drei8_in_zwei12(dwert1$,wertfile1pix1#,wertfile1pi x2#)
0700 feld1#(x#,y#):=wertfile1pix1#
0710 feld1#(x#+1,y#):=wertfile1pix2#
0730 ENDIF
0740 ENDIF
0770 ENDFOR x#
0780 ENDFOR y#

Dann wird Feld 3 erzeugt durch Subtraktion.
Wegen der Organisation der Pixel auf dem Chip (x nach rechts, y nach unten, Startwerte jeweils -4)

rgrgrgrgrgrgrg
gbgbgbgbgbgb
rgrgrgrgrgrgrg
gbgbgbgbgbgb
rgrgrgrgrgrgrg
gbgbgbgbgbgb

müssen dann im Bereich 0<=x<=3007(***); 0<=y<=1999 "Löcher" im File 3 gesucht werden und durch Interpolation ersetzt werden.
Für BLAU (wenn x ungerade und y ungerade)
und für ROT (Wenn x gerade und y= gerade)
könnte man Mittelwerte von den Positionen x-2 und x+2 und y-2 und y+2 bilden.
Für die übrig bleibenden GRÜNen Pixel Mittelwerte aus den 4 umgebenden grünen Pixeln bei x+/-1, y+/-1.

Gruß,
Stuessi

(***) Wert korrigiert
Stuessi ist offline   Mit Zitat antworten