Sobre las columnas defectuosas, son píxeles casi apagados. Digo casi porque aunque en la imagen que puse se ven casi negros, aún tienen señal útil, pero difícil de recuperar (luego comento más). Es como si la amplificación que debía hacerse sobre esas columnas se hubiera venido abajo; en términos fotográficos podemos verlo como que esas columnas se hubieran leído con un ISO3 (me invento la cifra, pero puede estimarse).
Lo que hace el código es simplemente sustituir el valor numérico de los fotositos defectuosos por un cálculo promedio de valores cercanos. En concreto para la segunda versión del apaño he hecho esto:
Es decir los valores G defectuosos se sustituyen por el promedio de los valores de los 4 fotositos G que los rodean, y con los B promedio sus dos vecinos a izquierda y derecha pero a 2 columnas de distancia claro.
Éste es el código que implementa esas operaciones (está en R por si alguien conoce el lenguaje, hace muy fácil manipular zonas selectivas de una imagen sin necesidad de hacer ningún bucle como pasa en casi todos los lenguajes):
- Código: Seleccionar todo
# METHOD 2
# B photosites
i=which(!col(img)%%8 & !row(img)%%2)
img[i]=(img[i-2*NROW]+img[i+2*NROW])/2
# G photosites
i=which(!col(img)%%8 & row(img)%%2)
img[i]=(img[i-NROW-1]+img[i-NROW+1]+img[i+NROW-1]+img[i+NROW+1])/4
Esto se puede mejorar todavía más. Un paso fácil estaría en los valores G donde es fácil tratar de detectar gradientes (es decir cambios de tonalidad bruscos) en dirección horizontal y vertical, y combinar esos 4 valores que ahora promedio de forma más elaborada para emular la continuidad del gradiente. Pero ahora mismo el eslabón débil son los valores de B, que se basan en valores correctos muy alejados de la columna defectuosa, lo que ocasiona los artefactos.
Sobre las columnas defectuosas, comparo aquí exactamente lo que hay en ellas vs el valor correcto (son imágenes de 650px de lado porque vienen de reducir sin interpolación a 1/8 el tamaño original de 5202 píxeles de ancho):
https://i.ibb.co/tsDJ7J2/defectivegdata.pngLo de arriba son valores RAW, es decir son directamente los números que hay en el canal G en las tripas del archivo RAW, sin ningún revelado ni interpolación. Puede verse que en las columnas defectuosas hay información, pero muy subexpuesta y además imposible de rescatar (no es uniforme y tiene una especie de efectos blooming que invaden columnas hacia la derecha). Esto da algunas pistas de cómo está implementada la circuitería de la cámara, parece que la lectura del sensor la llevasen a cabo 8 circuitos separados, cada uno de ellos haciéndose cargo de una de cada 8 columnas de fotositos, y a Cosme se le ha jodido uno de esos 8 circuitos.
Salu2!