ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
Presentación 3DStereoglyph (Android App)
1. Julen Segura
Instrumentación para visión
Práctica final (Android App)
Máster Oficial en Visión Artificial
Universidad Rey Juan Carlos
06 de mayo de 2014
2. Índice
2
Introducción ………………………………………... 3
La aplicación 3DStereoglyph …………………………………………………...…… 3
El 3D Esteoscópcio …………………………………………..………….……….......... 4
Los anaglifos ………………..………………………………….…………………..………. 5
Requisitos …….………..………………………..….. 9
Funcionamiento ……………………….……..…. 10
Inicio ………………………….……………….………..………………………………...… 10
Cámara ….…………………………….…………….….…………………….………....... 11
Procesado de imágenes ………….………………………..…………………….…. 12
Resultado ………………………………………………..………………………………... 15
Vídeo demostrativo ……………………………………..…….………………....…. 17
El futuro de 3DStereoglyph ……….…….…. 18
Posibles mejoras de la aplicación ……………………………………..…..…… 19
Continuidad de la aplicación ….…...…………………………………….......... 20
3. Introducción
La aplicación 3DStereoglyph
• ¿Qué hace?
– Proporciona ayuda para tomar un par estéreo de imágenes
con una única cámara.
– Convierte dicho par estéreo en una imagen 3D anaglífica
que puede ser visualizada con las gafas correspondientes
en una pantalla estándar 2D.
• ¿Por qué?
– Auge del mercado 3D.
– La práctica totalidad de los dispositivos móviles:
• sólo dispone de una cámara.
• tiene una pantalla 2D. 3
4. El 3D Estereoscópico
• Crea una sensación de profundidad a partir de un par
estéreo de imágenes (dos imágenes de la misma
escena, con disparidad en el eje horizontal), llevando
a cada ojo únicamente la imagen que le corresponde.
4
5. Los anaglifos
• Codificación por colores de un par estéreo.
• El resultado es una única imagen que combina la
información del ambas imágenes del par.
– Puede visualizarse en una
pantalla 2D corriente.
– Requiere unas gafas con
filtros de los colores
adecuados para su
visualización 3D.
5
6. • Existen diferentes combinaciones de colores.
– Verde/magenta, ámbar/azul,…
– La más común: rojo/cyan.
– Son colores complementarios
• Al pasar el color A a través de un filtro
de color B, se elimina la información
de color y queda una imagen de
intensidades en escala de grises.
• Al pasar el color A a través de un filtro
de color A, la imagen no cambia.
• La unión de ambos contiene los tres
canales RGB.
6
7. • Creación de anaglifos
–
7
– La imagen izquierda se codifica en
cyan.
• Para ello, en una imagen RGB se
eliminan la componente R.
• Se conservan G y B.
– La imagen derecha se codifica en
rojo.
• Para ello, en una imagen RGB se
eliminan las componentes G y B.
• Se conserva R.
8. – Al fusionar dichas imágenes (o crear una imagen a
partir de los canales GB+R extraídos), se obtiene un
anaglifo.
• Las zonas en que ambas imágenes coincidan tendrán los tres
canales RGB, y por tanto recuperan su color original.
8
9. Requisitos para implementar
3DStereoglyph
Build Target:
API level 11
Android 3.0 (HONEYCOMB)
que es el mínimo requerido para la
Librería:
OpenCV 2.4.8
Guía de instalación e inclusión en
un proyecto: [Tutorial on OpenCV]
9
11. Cámara
PhotoView.java (JavaCameraView)
Photo1.java (Activity) Photo 2.java (Activity)
layout_camaraview.xml
• SurfaceView
• ImageView
Imagen 1
Transparencia= 0.5
Imagen 2
Ayuda para alinear
11
Nota: las funciones para abrir la cámara de los activity Photo1 y Photo2, y la función para tomar una imagen
de JavaCameraView, se extrajeron de los tutoriales “Mixed Processing” y “Camera control” de OpenCV 2.4.8.
13. • Intercambiar imágenes:
13
public void onCreate(Bundle savedInstanceState) {
…
Options options = new Options();
options.inTempStorage = new byte[16*1024]; options.inSampleSize = 4;
myBitmap= BitmapFactory.decodeFile(imageFileName, options);
…
myImageView= (ImageView)findViewById(R.id.izquierda);
myImageView.setImageBitmap(myBitmap);
…}
public void onClick(View v) {
int id = v.getId();
if (id == R.id.boton1) {
cuenta_cambios=cuenta_cambios+1;
cambiar();
} else if (id == R.id.boton2) {
procesar(); }
}
private void cambiar() {
aux=myBitmap;
myBitmap=myBitmap2;
myBitmap2=aux;
myImageView= (ImageView)findViewById(R.id.izquierda);
myImageView.setImageBitmap(myBitmap);
…
}
Si se pulsa “Cambiar”:
-Se aumenta el contador.
-Se llama a la función cambiar.
Si se pulsa “Convertir a 3D”:
-Se llama a la función procesar.
Se asocian al ImageView en el
que se vayan a mostrar.
Se cargan las imágenes en
bitmaps con menor resolución
para utilizar menos memoria.
Se carga el layout y se ponen
los botones a la escucha.
Se intercambian los bitmaps
con ayuda de un auxiliar.
Se vuelven a asociar a los ImageView
donde se muestran.
Función
cambiar
14. • Convertir a 3D:
14
public void procesar() {
…
zda = Highgui.imread(imageFileName);
dcha = Highgui.imread(imageFileName2);
List<Mat> rgb_channel = new ArrayList<Mat>();
Core.split(izda, rgb_channel);
List<Mat> rgb_channel2 = new ArrayList<Mat>();
Core.split(dcha, rgb_channel2);
Size size = izda.size(); imagen3D = new Mat(size,CvType.CV_8U);
List<Mat> rgb_channel3 = new ArrayList<Mat>();
rgb_channel3.add(rgb_channel2.get(0));
rgb_channel3.add(rgb_channel2.get(1));
rgb_channel3.add(rgb_channel.get(2));
Core.merge(rgb_channel3, imagen3D);
SimpleDateFormat formatter = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
Date now = new Date();
String imageFileName3 = Environment.getExternalStorageDirectory().toString()+"/3DStereoglyph/3D_images/"+
formatter.format(now) + "_3D.jpg";
Highgui.imwrite(imageFileName3, imagen3D);
mostrar_resultado(imageFileName3);}
Se obtienen los canales
B y G de la imagen izda.
y el R de la imagen dcha.
Se unen en una matriz =
imagen anaglífica.
Se separan las imágenes
en sus canales (BGR).
Se preparan un array y una
matriz para los canales y la
matriz de la imagen final.
Se cargan las imágenes con OpenCV = matrices Mat.
Cuál es Izda o dcha depende de cuántas veces se han
intercambiado las imágenes tomadas (contador).
Se llama a la función que
muestra el resultado.
Se guarda la imagen en el directorio, con un nombre
único (fecha y hora) para evitar su sobreescritura.
Función
procesar
15. Resultado
• Se muestra el resultado en layout_resultado.xml.
• Se guarda en el directorio de la aplicación.
15
18. El futuro de 3DStereoglyph
Posibles mejoras de la aplicación
• En la captura de imágenes
– Estabilización de la señal de entrada.
• En la conversión a 3D
– Posibilidad de correcciones en la alineación de las
imágenes.
– Otras codificaciones:
• Otros colores de anaglifos.
• Codificaciones para pantallas estereoscópicas: side-by-side,
entrelazado, etc.
18
19. Continuidad de la aplicación
• Dispositivos con pantalla estereoscópica
Ayuda en la toma de pares estéreo alineados.
Conversión del par a 3D.
• Dispositivos con dos cámaras
Ayuda en la toma de pares estéreo alineados.
Conversión del par a 3D.
• Dispositivos con dos cámaras y pantalla
estereoscópica
Ayuda en la toma de pares estéreo alineados.
Conversión del par a 3D.
19