Los pasos han sido:
Realizar 16 capturas de 1" con el objetivo tapado en entorno oscuro a ISO6400
Leer los datos RAW puros de los 16 archivos ARW y promediarlos
Obtenido el darkframe promediamos (áreas de 8x8 fotocaptores), reescalando así a un tamaño (753px de ancho) que permita ver mejor (por promediado de ruido impulsional) los patrones de ruido espaciales y las zonas del sensor que más ruido capturan
Tras hacer ese reescalado he sustraido el nivel de negro de los RAW (algunas marcas lo sustraen en los propios RAW, lo que es una desventaja)
- La imagen resultante muestra patrones de ruido horizontales pero sobre todo verticales
- Hay una zona mucho más ruidosa que el resto en la parte inferior de la imagen (parte superior del sensor) y por la parte izquierda de la imagen (parte derecha de sensor mirando desde detrás de la cámara)
- Curiosamente hay una zona muy clara de bajo ruido en el cuarto derecho de la imagen (cuarto izquierdo del sensor)
Darkframe lineal y normalizado:
Darkframe enfatizando ruido y coloreado (magma):
El código:
- Código: Seleccionar todo
library(tiff)
# RAW extraction: dcraw -v -D -4 -T *.ARW
# Dark frame RAW averaging (use ARW files not to loose bias level)
dark=readTIFF("_DSC3850.tiff", as.is=TRUE)
for (i in 51:65) {
print(paste0("Reading ", i, "..."))
dark=dark+readTIFF(paste0("_DSC38", i, ".tiff"), as.is=TRUE)
}
dark=dark/16 # average 16 shots
hist(dark, breaks=1000)
# Rescale (0-mean noise will cancel)
N=8
DIMY=as.integer(dim(dark)[1]/N)
DIMX=as.integer(dim(dark)[2]/N)
print(paste0("N=",N," -> ", DIMX, "x", DIMY, " pixels (",
dim(dark)[1]-DIMY*N, " rows and ",
dim(dark)[2]-DIMX*N, " cols dropped)"))
imgresize=array(0, c(DIMY,DIMX))
for (i in 1:DIMY) {
for (j in 1:DIMX) {
imgresize[i,j]=mean(dark[((i-1)*N+1):(i*N),
((j-1)*N+1):(j*N)])
}
}
dark=imgresize
dark=dark-512 # substract DC bias
dark[dark<0]=0 # clip negative values
dark=dark/max(dark) # normalize
writeTIFF(dark, "avg_darkframe.tif", bits.per.sample=16, compression='LZW')
Salu2!