JF / jaramillo.dev / light-fields
nota // campos de luz note // light fields

De captura Lytro a stacks de sub-apertura From Lytro raw to sub-aperture light-field stacks

Un recorrido por el pipeline completo: captura plenóptica con Lytro de primera generación, calibración, decodificación, corrección de color, rectificación, extracción de vistas de sub-apertura y generación de datasets HDF5 para super-resolución angular. A walkthrough of the full pipeline: first-generation Lytro plenoptic capture, calibration, decoding, color correction, rectification, sub-aperture view extraction, and HDF5 dataset generation for angular super-resolution.

~10 MIN ES/EN LIGHT-FIELD v1
// POR QUÉ CAMPOS DE LUZ // WHY LIGHT FIELDS

Una cámara plenóptica captura no solo intensidad sino también la dirección de cada rayo de luz. Esto permite sintetizar vistas desde ángulos distintos a partir de una sola captura, algo imposible con cámaras convencionales.

A plenoptic camera captures not only intensity but also the direction of each light ray. This enables synthesizing views from different angles from a single capture — impossible with a conventional camera.

// QUÉ OBTENÉS // WHAT YOU GET

100 vistas de sub-apertura (10×10) por campo de luz capturado, recortadas a 256×256 px y organizadas en datasets HDF5 listos para entrenar modelos de super-resolución angular.

100 sub-aperture views (10×10) per captured light field, cropped to 256×256 px and packaged into HDF5 datasets ready to train angular super-resolution models.

// SOURCE

Repositorio y datos bajo licencia CC-BY 4.0. Autoría: Juan Felipe Jaramillo H. y Juan Camilo Gómez A.

Repository and data under CC-BY 4.0. Authors: Juan Felipe Jaramillo H. and Juan Camilo Gómez A.

GitHub ↗

[ 01 ]  ETAPAS DEL PIPELINE PIPELINE STAGES

Seis etapas, un dataset Six stages, one dataset

Cada campo de luz pasa por seis etapas secuenciales desde la cámara hasta el dataset de entrenamiento.

Each light field passes through six sequential stages from camera to training dataset.

01 Captura plenóptica Plenoptic capture Lytro 1.ª gen + array de microlentes Lytro 1st-gen + microlens array
02 Calibración Calibration Tablero de ajedrez 19×22, 9 capturas Checkerboard 19×22, 9 captures
03 Decodificación y corrección Decoding & correction Light Field Toolbox v0.5
04 Rectificación Rectification LFCalRectifyLF
05 Extracción de sub-apertura Sub-aperture extraction 10×10 = 100 vistas / views
06 Downsampling angular y dataset Angular downsampling & dataset HR 10×10 → LR 5×5 · HDF5
[ 02 ]  CAPTURA PLENÓPTICA PLENOPTIC CAPTURE

Lytro de primera generación y el array de microlentes First-generation Lytro and the microlens array

La cámara Lytro de primera generación es una cámara plenóptica de tipo 1.0: incluye un array de microlentes ubicado justo delante del sensor CMOS. Cada microlente actúa como una pequeña cámara que captura la escena desde un ángulo ligeramente distinto, codificando la información angular junto con la espacial en un único archivo .lfp.

The first-generation Lytro camera is a type-1.0 plenoptic camera: it places a microlens array directly in front of the CMOS sensor. Each microlens acts as a tiny camera capturing the scene from a slightly different angle, encoding angular and spatial information together in a single .lfp file.

SCENE MAIN LENS MICROLENS ARRAY CMOS SENSOR each lenslet → one sub-image

Fig. 1 — Cada microlente proyecta una sub-imagen angular sobre el sensor CMOS. Fig. 1 — Each microlens projects one angular sub-image onto the CMOS sensor.

El archivo .lfp resultante contiene la imagen raw completa del sensor, que debe decodificarse para separar las muestras angulares y espaciales.

The resulting .lfp file contains the full raw sensor image, which must be decoded to separate angular and spatial samples.

[ 03 ]  CALIBRACIÓN CALIBRATION

Calibración del array de microlentes Microlens array calibration

Antes de decodificar los campos de luz se necesita un modelo geométrico del array de microlentes. La calibración utiliza un tablero de ajedrez con 19×22 esquinas internas, cuadrados de 4 mm, capturado en 9 posiciones distintas.

Before decoding light fields you need a geometric model of the microlens array. Calibration uses a checkerboard with 19×22 internal corners, 4 mm squares, captured at 9 different positions.

Parámetro Parameter Valor Value
Esquinas internas Internal corners 19 × 22
Tamaño de cuadrado Square size 4 mm
Capturas de calibración Calibration captures 9
Herramienta Tool LFUtilProcessCalibrations
Base de datos de calibración Calibration database CalibrationDatabase.mat
Base de datos de imagen blanca White image database WhiteImageDatabase.mat
Información de calibración Calibration info CalInfo.json

Outputs: CalibrationDatabase.mat, WhiteImageDatabase.mat y CalInfo.json deben generarse antes de procesar cualquier campo de luz de escena.

Outputs: CalibrationDatabase.mat, WhiteImageDatabase.mat, and CalInfo.json must be generated before processing any scene light field.

[ 04 ]  DECODIFICACIÓN Y CORRECCIÓN DECODING & CORRECTION

Light Field Toolbox v0.5 — decodificación, corrección y rectificación Light Field Toolbox v0.5 — decoding, correction, and rectification

El procesamiento de los archivos .lfp se realiza con el Light Field Toolbox v0.5 para MATLAB. El pipeline pasa por tres pasos principales.

Processing of .lfp files is done with Light Field Toolbox v0.5 for MATLAB. The pipeline goes through three main steps.

1. Decodificación 1. Decoding

LFUtilDecodeLytroFolder lee cada .lfp y lo convierte en un tensor de campo de luz 4D. El parámetro ColourCompatibility controla la corrección de color inicial.

LFUtilDecodeLytroFolder reads each .lfp and converts it to a 4-D light-field tensor. The ColourCompatibility parameter controls the initial colour correction.

2. Corrección de imagen blanca 2. White-image colour correction

Se aplica corrección de color basada en imagen blanca usando WhiteImageDatabase.mat. Posteriormente se mejora la ecualización de histograma con LFHistEqualize y suavizado bilateral con imbilatfilt.

White-image-based colour correction is applied using WhiteImageDatabase.mat. Histogram equalisation is then enhanced with LFHistEqualize and bilateral smoothing with imbilatfilt.

3. Rectificación geométrica 3. Geometric rectification

LFCalRectifyLF aplica los parámetros intrínsecos del array de microlentes (escalados a ×0.25 para reducir resolución), recentra y corrige la distorsión geométrica para que cada sub-imagen angular quede alineada.

LFCalRectifyLF applies the microlens array intrinsic parameters (scaled to ×0.25 to reduce resolution), recentres and corrects geometric distortion so each angular sub-image is aligned.

Función Function Propósito Purpose
LFUtilDecodeLytroFolder Decodifica archivos .lfp a tensores 4D Decodes .lfp files to 4-D tensors
LFHistEqualize Ecualización de histograma de campo de luz Light-field histogram equalisation
LFCalRectifyLF Rectificación geométrica con intrínsecos Geometric rectification with intrinsics
imbilatfilt Filtrado bilateral para suavizar ruido Bilateral filter for noise smoothing
[ 05 ]  EXTRACCIÓN DE SUB-APERTURA SUB-APERTURE EXTRACTION

10×10 = 100 vistas angulares 10×10 = 100 angular views

Una vez rectificado el campo de luz, se extraen las vistas de sub-apertura iterando sobre los índices angulares s y t de 1 a 10, generando exactamente 100 imágenes de 256×256 px por campo de luz.

Once the light field is rectified, sub-aperture views are extracted by iterating over angular indices s and t from 1 to 10, producing exactly 100 images of 256×256 px per light field.

Importante: la grilla angular es 10×10 = 100 vistas. No 9×9. El recorte final es 256×256 px por vista.

Important: the angular grid is 10×10 = 100 views. Not 9×9. The final crop is 256×256 px per view.

t → s ↓ 256×256 px sub-aperture (s,t) 10×10 = 100 views

Fig. 2 — Grilla angular 10×10. Cada celda es una vista de 256×256 px con índices (s,t). Fig. 2 — 10×10 angular grid. Each cell is a 256×256 px view with indices (s,t).

Cada imagen se guarda con el esquema de nombres [archivo]_[secuencia]_[s]_[t].png. El recorte centrado de 256×256 px asegura uniformidad entre todas las vistas y campos de luz.

Each image is saved with the naming scheme [file]_[seq]_[s]_[t].png. The centred 256×256 px crop ensures uniformity across all views and light fields.

[ 06 ]  DOWNSAMPLING Y DATASET DOWNSAMPLING & DATASET

HR → LR y generación del dataset HDF5 HR → LR and HDF5 dataset generation

Las 100 vistas HR (10×10) se submuestrean angularmente para generar sus contrapartes LR (5×5). Este par HR/LR es la base del entrenamiento de super-resolución angular.

The 100 HR views (10×10) are angularly downsampled to generate their LR counterparts (5×5). This HR/LR pair is the foundation for angular super-resolution training.

HR 10×10 cv2.INTER_AREA ×2 downsample LR 5×5 uvst LAYOUT u,v = angular outer loop s,t = spatial inner stuv LAYOUT s,t = spatial outer; u,v = angular nested

Fig. 3 — Downsampling angular HR 10×10 → LR 5×5 con cv2.INTER_AREA y los dos layouts de almacenamiento uvst / stuv. Fig. 3 — Angular downsampling HR 10×10 → LR 5×5 with cv2.INTER_AREA and the two storage layouts uvst / stuv.

Layouts de almacenamiento Storage layouts

Los datos se almacenan en dos organizaciones de tensor distintas según el uso previsto:

Data is stored in two distinct tensor organisations depending on intended use:

Layout Organización Organisation Uso típico Typical use
uvst Angular externo (u,v), espacial interno (s,t) Angular outer (u,v), spatial inner (s,t) Acceso por vista angular Per-angular-view access
stuv Espacial externo (s,t), angular interno (u,v) Spatial outer (s,t), angular inner (u,v) Acceso por píxel espacial Per-spatial-pixel access

Dataset HDF5 HDF5 dataset

Los tensores HR y LR se almacenan en archivos HDF5 con las claves X_ang_train / Y_ang_train y X_ang_test / Y_ang_test. La división usa una semilla fija seed=118 y un split 80/20 entre train y test. Cada campo de luz contribuye con ~700 muestras de entrenamiento.

The HR and LR tensors are stored in HDF5 files with keys X_ang_train / Y_ang_train and X_ang_test / Y_ang_test. The split uses a fixed seed seed=118 and an 80/20 train/test ratio. Each light field contributes ~700 training samples.

Baselines de interpolación Interpolation baselines

Para comparación se incluyen tres baselines clásicos de interpolación sobre las vistas LR: nearest, bicubic y Lanczos4.

For comparison, three classical interpolation baselines are included on the LR views: nearest, bicubic, and Lanczos4.

[ ∞ ]  PRÓXIMOS PASOS NEXT STEPS

Super-resolución angular Angular super-resolution

El dataset HR/LR generado está diseñado para entrenar redes de super-resolución angular: dado un campo de luz LR (5×5 vistas) sintetizar la versión HR (10×10 vistas). Los baselines nearest/bicubic/Lanczos4 sirven como punto de referencia para medir la ganancia real de los modelos de deep learning.

The generated HR/LR dataset is designed to train angular super-resolution networks: given an LR light field (5×5 views) synthesise the HR version (10×10 views). The nearest/bicubic/Lanczos4 baselines serve as benchmarks to measure the actual gain of deep learning models.

Código fuente Source code

El pipeline completo está disponible en GitHub bajo licencia CC-BY 4.0.

The full pipeline is available on GitHub under the CC-BY 4.0 license.

Jaramilloh/Process-Light-Fields-Captured-With-Lytro-Camera ↗