Post on 04-May-2020
Solucionador de Autoestereogramas Higa, UTN FRBA
Página 1 de 16
SOLUCIONADOR DE AUTOESTEREOGRAMAS
Déborah Valeria Higa Procesamiento Digital de Imágenes, UTN FRBA
1 INTRODUCCIÓN
1.1 ESTEREOPSIS
La estereopsis es el fenómeno en el
cual el cerebro traduce las dos imágenes
recibidas por los ojos en una escena
tridimensional. Si se observan las dos
imágenes de la Figura 1, con un enfoque
distinto al normal, el cerebro podrá recrear
la escena tridimensional [Stereoscopy].
Figura 1. Imágenes obtenidas de cada ojo.
1.2 ESTEREOGRAMAS
Los estereogramas son imágenes 2D a
partir de las cuales el observador tiene la
percepción visual de ver imágenes 3D.
Cuando se observa una imagen común
y corriente, los ojos se enfocan
directamente en ella (Normal View) para
poder visualizarla de manera correcta. Pero
para poder lograr el efecto del
estereograma, el enfoque debe ser antes
(convergiendo los ojos) o después
(divergiendo los ojos) del mismo. A estas
técnicas se las llaman CrossEye View y
Parallel View, respectivamente.
CrossEye View Normal View Parallel View
Figura 2. Técnicas de visualización.
La técnica a utilizar depende de cómo
el estereograma se creó para ser visto. Si se
utiliza la técnica opuesta, la única diferencia
es que se observará la profundidad
invertida (lo que sobresalía, se ve metido
hacia adentro y viceversa). Por ejemplo, la
imagen de la Figura 3 se creó para ser vista
mediante CrossEye View.
Solucionador de Autoestereogramas Higa, UTN FRBA
Página 2 de 16
Figura 3. Estereograma.
Los dos puntos que se encuentran
arriba de la imagen, sirven como ayuda para
encontrar el punto correcto de
convergencia, que ocurre cuando ambos
puntos se convierten nítidamente en uno.
Al lograrlo, se llega a ver una tercera imagen
en el medio de las dos originales,
tridimensional y creada por nuestra mente.
Figura 4. Convergencia de los puntos de ayuda.
1.3 RELACIÓN DISPARIDAD –
PROFUNDIDAD
En una imagen estereoscópica, un
punto P1 de la imagen izquierda se
corresponde exactamente con un punto P2
de la imagen derecha. Si se suponen
imágenes sin distorsionar y alineadas
horizontalmente, P1 y P2 se encontrarían en
la misma fila en sus respectivas imágenes
[UW CSE Vision Facultry].
Se considera también que los dos
objetos C1 y C2 que capturan las imágenes
tienen planos exactamente coplanares
entre ellos, ejes ópticos paralelos, iguales
longitudes focales f y una separación de una
distancia b (baseline).
Figura 5. Triangulación.
La disparidad d es la diferencia entre
las posiciones absolutas de P1 y P2 dentro
de sus respectivas imágenes. Este valor se
traduce luego en un nivel de profundidad z
del punto P, por triangulación:
𝑧 =𝑓. 𝑏
𝑃1 − 𝑃2=
𝑓. 𝑏
𝑑
Ecuación 1. Relación disparidad - distancia.
Como se puede observar en la Figura 5,
mientras mayor sea la disparidad, mayor
profundidad.
Solucionador de Autoestereogramas Higa, UTN FRBA
Página 3 de 16
En la Figura 6 se observan 6 tigres 2D
(1 - 6) separados por una determinada
cantidad de pixeles [Autostereogram]. Cada
par generará un tigre 3D, con lo cual en total
serán 5 tigres 3D (A - E).
Tigre 1 – Tigre 2: 140 pixeles → Tigre A.
Tigre 2 – Tigre 3: 140 pixeles → Tigre B.
Tigre 3 – Tigre 4: 130 pixeles → Tigre C.
Tigre 4 – Tigre 5: 120 pixeles → Tigre D.
Tigre 5 – Tigre 6: 120 pixeles → Tigre E.
Figura 6. Estereograma marcado con las distancias entre imágenes.
Si el autoestereograma se observa con
la técnica de Parallel View, como la
separación es mayor en los dos primeros
casos, los tigres A y B serán los que se verán
más al fondo; mientras que los tigres D y E
serán los que más sobresalgan. Si se observa
con la técnica de CrossEyed View, el efecto
será el opuesto.
1.4 AUTOESTEREOGRAMAS
Los autoestereogramas son un tipo
particular de estereogramas donde la
imagen tridimensional se encuentra oculta
por otra imagen [How Stereograms Work].
Son más conocidos como “ojo mágico”
(Magic Eye). En la Figura 7 se muestra un
ejemplo.
Figura 7. Autoestereograma.
1.5 CONSTRUCCIÓN DEL
AUTOESTEREOGRAMA
Los autoestereogramas son creados a
partir de dos componentes:
El mapa de profundidades de la imagen
a ser vista tridimensionalmente.
El patrón vertical repetitivo que oculta al
mapa de profundidades.
1.6 MAPA DE PROFUNDIDADES
El mapa de profundidades es una
imagen en escala de grises, que representa
los distintos niveles de profundidad de la
imagen tridimensional. El blanco representa
a lo que se encuentra más adelante y el
negro a lo que se encuentra más atrás.
Figura 8. Mapa de profundidades.
1.7 PATRÓN VERTICAL
A lo largo del autoestereograma se
repite un patrón vertical donde cada panel
se encuentra modificado sutilmente en
base a la información del mapa de
Solucionador de Autoestereogramas Higa, UTN FRBA
Página 4 de 16
profundidades (ver 1.3). El cerebro detecta
esas diferencias y crea la ilusión de una
imagen tridimensional [Stereogram Guide].
Figura 9. Mapa de profundidades + patrón vertical = autoestereograma.
1.8 DISPARIDAD
En un autoestereograma, las imágenes
izquierda y derecha se encuentran
superpuestas, como se puede observar en
la Figura 10. Observando la Figura 11, que
está basada en la Figura 5, se encuentra que
la imagen que se encuentra más a la
izquierda dentro del autoestereograma, en
realidad es la imagen derecha de una
imagen estereoscópica común y viceversa
para el caso de su otra contraparte. La
disparidad resulta ser entonces la diferencia
entre las posiciones absolutas de P1 y P2
dentro del autoestereograma.
Autoestereograma
Imagen derecha
Imagen izquierda
Figura 10. Imágenes izquierda y derecha del objeto 3D a visualizar dentro del autoestereograma.
Figura 11. Superposición de las imágenes izquierda y derecha.
Solucionador de Autoestereogramas Higa, UTN FRBA
Página 5 de 16
El objetivo de este proyecto es realizar
un programa que decodifique los
autoestereogramas y obtenga el mapa de
profundidades tal como lo logra nuestro
cerebro. Para ello, se utilizaron la librería de
OpenCV 3.2 para el procesamiento de
imagen y la librería de QT para la realización
de la aplicación, ambas para C++.
2 MÉTODO 1:
STEREOMATCHER DE
OPENCV
OpenCV ya tiene implementadas
funciones para encontrar el mapa de
disparidades a partir de imágenes
estereoscópicas (solamente en la versión
contrib). La clase base se llama
StereoMatcher y de ella derivan: StereoBM,
StereoSGBM y StereoBeliefPropagation
[StereoMatcher].
2.1 STEREOBM
StereoBM encuentra las
correspondencias entre dos imágenes a
través del algoritmo “Block Matching” de K.
Konolige [Kaehler & Bradski]. Este algoritmo
busca la correspondencia entre un bloque
de la imagen izquierda con un bloque de la
imagen derecha, comparando el bloque
izquierdo con cada bloque derecho que se
encuentre sobre la misma fila.
Para cada par bloque izquierdo-
derecho, calcula la suma de diferencia
absoluta (SAD, Sum of Absolute Diference)
que consiste en calcular la diferencia
absoluta entre cada pixel del bloque
izquierdo con el pixel correspondiente del
bloque derecho y luego sumar todos los
módulos de las diferencias.
𝐵𝑙𝑜𝑞𝑢𝑒 𝑑𝑒 𝑡𝑎𝑚𝑎ñ𝑜 𝑁𝑥𝑁:
𝐵𝑁(𝑥, 𝑦) = {𝑢, 𝑣|𝑥 −
𝑁
2≤ 𝑢 ≤ 𝑥 +
𝑁
2,
𝑦 −𝑁
2≤ 𝑣 ≤ 𝑦 +
𝑁
2
}
𝑆𝐴𝐷 𝑒𝑛 𝑓𝑢𝑛𝑐𝑖ó𝑛 𝑑𝑒 𝑙𝑎 𝑑𝑖𝑠𝑝𝑎𝑟𝑖𝑑𝑎𝑑 𝑑:
𝑆𝐴𝐷(𝑥, 𝑦, 𝑑) =
∑ |𝑌𝐿(𝑢, 𝑣) − 𝑌𝑅(𝑢 + 𝑑, 𝑣)|
(𝑢,𝑣)∈𝐵𝑁(𝑥,𝑦)
Ecuación 2. SAD (Sum of Absolute Differences).
El de mínimo SAD encontrado, será el
par de bloques correcto y la distancia entre
ellos, la disparidad.
Imagen izquierda
Imagen derecha
Mapa de disparidades
Figura 12. StereoBM de OpenCV.
Para poder utilizar esta función,
primero se deben extraer del
autoestereograma las imágenes izquierda y
derecha de la imagen a ver en 3D.
Solucionador de Autoestereogramas Higa, UTN FRBA
Página 6 de 16
2.2 OBTENCIÓN DE LAS IMÁGENES
IZQUIERDA Y DERECHA
Para obtener las imágenes izquierda y
derecha, se aplica el método mencionado
anteriormente, pero tomando como bloque
a la imagen entera.
Autoestereograma
Corrimiento del 10%
Corrimiento al punto donde se encontró el SAD mínimo.
Corrimiento del 90%
Figura 13. Barrido del autoestereograma.
Se convierte el autoestereograma a
escala de grises debido a que es el
equivalente al canal luminosidad en YCbCr y
es el que más información importante lleva
de la imagen. Luego, se lo duplica y se
realizan corrimientos hacia la derecha de
una de las imágenes, calculando en cada
paso la SAD. Realizar lo anterior, equivale a
trasladar el P2 de la Figura 14 hasta el final
de la línea. Cuando se encuentra P1, la
cantidad de puntos que tuvo que
trasladarse equivale a la disparidad.
Figura 14.Block Matching a nivel de puntos..
Como se puede observar en la Figura
15, el corrimiento al punto donde se
encontró la SAD mínima es igual al ancho
del patrón vertical.
Figura 15. Ancho del patrón vertical.
Solucionador de Autoestereogramas Higa, UTN FRBA
Página 7 de 16
En este punto, los patrones de la
imagen original están superpuestos con sus
patrones contiguos a la izquierda. Al hacer
la diferencia entre ellos, se obtiene una
zona oscura en los puntos donde coinciden
exactamente. Es decir, no hubo
modificaciones, la distancia entre ellos es la
disparidad máxima (el ancho del patrón) y
se corresponden al fondo del mapa de
profundidades. En las zonas donde no
ocurre esto, los pixeles de uno de los
patrones han sufrido corrimientos, lo que
produce una disparidad horizontal entre
ellos y que, en conjunto, son los que luego
formarán la imagen tridimensional.
Para obtener la máscara, a la imagen
obtenida se le realizan:
Threshold: para eliminar las espurias que
hayan quedado en el fondo y binarizar la
imagen.
Close: operaciones de primero dilatación
y luego erosión con distintos tamaños de
kernels para obtener una máscara con
relleno.
Luego del threshold.
Luego de las operaciones close.
Figura 16. Obtención de la máscara.
Una vez obtenida la máscara, se la
aplica sobre el autoestereograma para
obtener la imagen izquierda. Para obtener
la imagen derecha, se traslada el
autoestereograma hacia la derecha una
cantidad igual al ancho del patrón y luego se
aplica la máscara. El resultado es el que se
observa en la Figura 17.
Autoestereograma
Imagen izquierda
Imagen derecha
Figura 17. Imágenes izquierda y derecha del autoestereograma.
Solucionador de Autoestereogramas Higa, UTN FRBA
Página 8 de 16
2.3 MAPA DE DISPARIDADES
Finalmente, el resultado obtenido del
StereoBM se observa en Figura 18. Las áreas
más claras corresponden a valores altos de
disparidades (como el fondo) y áreas más
oscuras a valores bajos de disparidades.
Figura 18. Mapa de disparidades obtenido de StereoBM sobre un autoestereograma.
El área negra dentro de la imagen del
mapa de disparidades coincide con la
intersección entre las imágenes izquierda y
derecha dentro del autoestereograma,
como se puede observar en la Figura 19.
Como en esta zona los puntos de las
imágenes izquierda y derecha coinciden en
la misma posición, la disparidad es cero.
Figura 19. Intersección entre las imágenes izquierda y derecha dentro del autoestereograma.
Debido a esto, con StereoBM no es
posible obtener un mapa de disparidades
correcto. Esta función de OpenCV está
preparada para procesar imágenes
obtenidas de dos cámaras, no para
autoestereogramas. Además, cuando se
falla en obtener las imágenes izquierda y
derecha, StereoBM no logra encontrar el
mapa de disparidades correcto, como se
puede observar en la Figura 20.
Figura 20. Mapa de disparidades incorrecto obtenido de StereoBM debido a que no se encontraron las imágenes izquierda y derecha correctas.
Solucionador de Autoestereogramas Higa, UTN FRBA
Página 9 de 16
2.4 STEREOSGBM Y
STEREOBELIEFPROPAGATION
Como se mencionó al principio de la
sección, OpenCV tiene implementados,
además de StereoBM, otros métodos
llamados StereoSGBM y
StereoBeliefPropagation.
StereoSGBM utiliza una versión
modificada del algoritmo “Semi Global
Block Matching” de Hirschmuller que
consiste en minimizar una función global de
energía descripta en [Hirschmuller]. Los
resultados con este algoritmo son similares
a los de StereoBM.
StereoBeliefPropagation utiliza el
algoritmo “Belief Propagation” de
Felzenszwalb y Huttenlocher [Felzenszwalb
& Huttenlocher]. Como requiere de CUDA,
no fue probado.
3 MÉTODO 2:
IMPLEMENTACIÓN PROPIA
La implementación consiste en las
siguientes etapas:
1. Estimación de la disparidad máxima.
Permite limitar las búsquedas de las
correspondencias.
2. Block Matching para las
correspondencias del fondo. Se realiza
con un tamaño de bloque mediano para
eliminar la mayor cantidad de ruido
posible.
3. Block Matching para las
correspondencias de la imagen. Se
realiza con un tamaño de bloque
pequeño para poder profundizar
detalles.
4. Filtrado. Permite refinar el mapa de
disparidades.
5. Conversión de mapa de disparidad a
mapa de profundidad.
3.1 ESTIMACIÓN DE LA DISPARIDAD
MÁXIMA
La estimación de la disparidad máxima
dMAX se realiza de la misma manera que la
descripta en la sección 2.2.
3.2 BLOCK MATCHING PARA LAS
CORRESPONDENCIAS DEL FONDO
El Block Matching se realiza de una
manera similar a la que trabaja StereoBM,
descripta en la sección 2.1.
Una de las diferencias es que toma un
bloque de NxN de la imagen derecha y barre
la fila de la imagen izquierda desde su
propia posición más un 0,2.dMAX hasta dMAX.
De esta manera, el extremo inferior se evita
el error de correspondencia por
intersección de las imágenes visto en la
sección 2.3 y el extremo superior limita para
no tener que barrer la imagen hasta el final
para cada bloque.
En la Figura 21 se muestran los
resultados para distintos tamaños de
bloques. Se puede observar que cuanto
mayor sea el tamaño del bloque, más ruido
de fondo se filtra. Sin embargo, se pierden
detalles de la imagen y queda con menor
resolución. Es por ello que para estas zonas
luego se trabaja con un tamaño de bloque
menor [Kitani].
3.3 BLOCK MATCHING PARA LAS
CORRESPONDENCIAS DE LA IMAGEN
Cada vez que con el Block Matching
con el bloque de NxN se encuentre una
disparidad distinta de 0 (es decir, que no se
corresponde con el fondo), se cambia a un
bloque menor de nxn y se vuelve a realizar
todo el barrido. En la Figura 22 se muestran
los resultados para distintos tamaños de
bloques.
Solucionador de Autoestereogramas Higa, UTN FRBA
Página 10 de 16
N = 4
N = 8
N = 12
N = 16
Figura 21. Block Matching para las correspondencias del fondo con distintos bloques de NxN.
n = 2
n = 4
n = 6
n = 8
Figura 22. Block Matching para las correspondencias de la imagen con distintos bloques de nxn
Solucionador de Autoestereogramas Higa, UTN FRBA
Página 11 de 16
Se puede observar que tamaños muy
pequeños de n no resultan favorables ya
que los bloques al contener menos
información, no encuentran correctamente
las correspondencias.
3.4 MAPA DE PROFUNDIDADES
La Ecuación 1 está definida para
imágenes de estereográficas obtenidas a
partir de dos cámaras, con lo cual no existen
en este caso la separación entre las cámaras
b y la distancia focal en cada punto f. Sin
embargo, podemos considerar que b=dMAX
ya que se corresponde con el fondo y para
que z=0 cuando d=dMAX, se utiliza la
Ecuación 3.
𝑧 =255. 𝑑𝑀𝐴𝑋
𝑑− 255
Ecuación 3. Relación disparidad – distancia utilizada.
Finalmente, el resultado es el de la
Figura 23.
3.5 FILTRADO
OpenCV además de tener
implementadas funciones para encontrar el
mapa de disparidades, también las tiene
para su filtrado: DisparityWLSFilter.
Figura 23. Mapa de profundidades (N=13 y n=5).
DisparityWLSFilter está basado en el
filtro “Weighted Least Squares” [Min, y
otros]. Permite refinar los resultados en
zonas de oclusiones parciales y áreas
uniformes [DisparityWLSFilter].
Este filtro requiere de la configuración
de algunos parámetros como:
Depth Discontinuity Radius: define el
tamaño de las regiones de baja confianza
alrededor de las discontinuidades de
profundidad.
Lambda: define la regularización del
filtrado. Valores grandes fuerzan a los
bordes del mapa de disparidades a
considerar bordes de la imagen fuente.
El valor típico es 8000.
Sigma: define cuán sensible es el filtrado
a los bordes de la imagen fuente. Valores
grandes pueden hacer que se pierdan
valores de disparidades y valores
pequeños pueden hacer al filtro
demasiado sensible al ruido de la imagen
fuente. Los valores típicos son entre 0.8
y 2.0.
La combinación de los tamaños de los
bloques descriptos en Block Matching y los
parámetros de filtrado, no son genéricos ya
que dependen de varios factores como la
resolución de la imagen, el diseño del
patrón, etc.
Figura 24. Mapa de profundidades filtrado.
Solucionador de Autoestereogramas Higa, UTN FRBA
Página 12 de 16
4 RESULTADOS
A continuación se muestran distintos resultados obtenidos, incluyendo el de la Figura 20
con el que la función de OpenCV falló y al ejemplo de la Figura 7.
Solucionador de Autoestereogramas Higa, UTN FRBA
Página 13 de 16
Figura 25. Resultados.
Solucionador de Autoestereogramas Higa, UTN FRBA
Página 14 de 16
5 APLICACIÓN
La aplicación (Figura 26) permite
seleccionar el autoestereograma, iniciar el
proceso y mostrar como resultados las
imágenes izquierda y derecha y el mapa de
profundidades.
El procesamiento de imagen se realiza
en un thread aparte del de la interfaz gráfica
(UI, User Interface) para que la aplicación no
se bloquee durante el proceso, permitiendo
además finalizarlo en cualquier momento
sin necesidad de cerrar el programa. El
thread de procesamiento se comunica
continuamente con los widgets de la UI a
través de signals y slots para actualizar las
imágenes durante el proceso.
Figura 26. Aplicación del solucionador de autoestereogramas.
6 CONCLUSIONES
Se obtuvieron resultados mejores a los esperados, como se observa en la Figura 27.
Figura 27. Comparación de resultados. SteroMatcher [izq.] vs. Implementación propia [der.]
Solucionador de Autoestereogramas Higa, UTN FRBA
Página 15 de 16
Aunque se pueden observar detalles
que incluso para el ojo humano serían
difíciles de ver, queda por mejorar los
contornos (sobre todo en zonas circulares)
y las zonas de oclusiones.
Además de calcular la SAD para las
correspondencias, se probó calculando la
SSD (Sum of Squared Difference). La SSD
consiste en calcular la diferencia absoluta
entre cada pixel del bloque izquierdo con el
pixel correspondiente del bloque derecho y
luego sumar todas las diferencias elevadas
al cuadrado [Scharstein & Szeliski] [Okutomi
& Kanade] [Hermann & Klette].
𝐵𝑙𝑜𝑞𝑢𝑒 𝑑𝑒 𝑡𝑎𝑚𝑎ñ𝑜 𝑁𝑥𝑁:
𝐵𝑁(𝑥, 𝑦) = {𝑢, 𝑣|𝑥 −
𝑁
2≤ 𝑢 ≤ 𝑥 +
𝑁
2,
𝑦 −𝑁
2≤ 𝑣 ≤ 𝑦 +
𝑁
2
}
𝑆𝑆𝐷 𝑒𝑛 𝑓𝑢𝑛𝑐𝑖ó𝑛 𝑑𝑒 𝑙𝑎 𝑑𝑖𝑠𝑝𝑎𝑟𝑖𝑑𝑎𝑑 𝑑:
𝑆𝑆𝐷(𝑥, 𝑦, 𝑑) =
∑ [𝑌𝐿(𝑢, 𝑣) − 𝑌𝑅(𝑢 + 𝑑, 𝑣)]2
(𝑢,𝑣)∈𝐵𝑁(𝑥,𝑦)
Ecuación 4. SSD (Sum of Squared Differences).
Sin embargo, no se encontraron
resultados con diferencias considerables.
Esto puede deberse a que no se trabajó en
este caso con dos imágenes capturadas por
cámaras distintas donde la iluminación, el
enfoque y otros factores pueden dificultar
la correspondencia entre bloques, sino que
se trata de buscar correspondencias entre
imágenes casi idénticas.
7 REFERENCIAS
Autostereogram. (s.f.). Obtenido de
Wikipedia:
en.wikipedia.org/wiki/Autostereog
ram
DisparityWLSFilter. (s.f.). Obtenido de
OpenCV Docs:
https://docs.opencv.org/3.1.0/d9/
d51/classcv_1_1ximgproc_1_1Disp
arityWLSFilter.html
Felzenszwalb, P., & Huttenlocher, D.
(2006). Efficient belief propagation
for early vision. International
journal of computer vision.
Hermann, S., & Klette, R. (s.f.). The Naked
Truth about Cost Functions for
Stereo Matching. New Zeland:
University of Auckland.
Hirschmuller, H. (2008). Stereo processing
by semiglobal matching and
mutual information. Pattern
Analysis and Machine Intelligence.
IEEE Transactions.
How Stereograms Work. (s.f.). Obtenido de
Eyetricks 3D Stereograms:
http://www.eyetricks-3d-
stereograms.com/how_stereogram
s_work.html
Kaehler, G., & Bradski, A. (2008). Chapter
12: Projection and 3D Vision. En G.
Bradski, & A. Kaehler, Learning
OpenCV (págs. 439-445). United
States of America: O’Reilly Media,
Inc.
Kitani, K. (s.f.). Stereo Matching. Carnegie
Mellon University.
Min, D., Choi, S., Lu, J., Ham, B., Sohn, K., &
Do, M. (s.f.). Fast Global Image
Smoothing Based on Weighted
Least Squares. IEEE Transaction on
Image Processing.
Okutomi, M., & Kanade, T. (1993). A
Multiple-Baseline Stereo. IEEE
Transactions on Pattern Analysis
and Machine Intelligence.
Scharstein, D., & Szeliski, R. (1996). Stereo
Matching with Non-Linear
Diffusion. San Francisco: IEEE
Solucionador de Autoestereogramas Higa, UTN FRBA
Página 16 de 16
Computer Society Conference on
Computer Vision and Pattern
Recognition.
Stereogram Guide. (s.f.). Obtenido de
Custom Stereograms:
www.custom-
stereograms.com/stereogram_guid
e.html
StereoMatcher. (s.f.). Obtenido de OpenCV
Docs:
docs.opencv.org/3.1.0/d2/d6e/clas
scv_1_1StereoMatcher.html
Stereoscopy. (s.f.). Obtenido de
CodeProject:
www.codeproject.com/Articles/31
420/Stereoscopy
UW CSE Vision Facultry. (s.f.). Lecture 16:
Stereo and 3D Vision.