Julen Segura
Instrumentación para visión
Práctica final (Android App)
Máster Oficial en Visión Artificial
Universidad Rey ...
Índice
2
Introducción ………………………………………... 3
La aplicación 3DStereoglyph …………………………………………………...…… 3
El 3D Esteoscópcio ……………...
Introducción
La aplicación 3DStereoglyph
• ¿Qué hace?
– Proporciona ayuda para tomar un par estéreo de imágenes
con una ún...
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
...
Los anaglifos
• Codificación por colores de un par estéreo.
• El resultado es una única imagen que combina la
información ...
• Existen diferentes combinaciones de colores.
– Verde/magenta, ámbar/azul,…
– La más común: rojo/cyan.
– Son colores comp...
• Creación de anaglifos
–
7
– La imagen izquierda se codifica en
cyan.
• Para ello, en una imagen RGB se
eliminan la compo...
– Al fusionar dichas imágenes (o crear una imagen a
partir de los canales GB+R extraídos), se obtiene un
anaglifo.
• Las z...
Requisitos para implementar
3DStereoglyph
Build Target:
API level 11
Android 3.0 (HONEYCOMB)
que es el mínimo requerido pa...
Funcionamiento
Inicio Main.java (Activity)
layout_inicio.xml layout_instrucciones.xml
• Menú inicial y pantalla de instruc...
Cámara
PhotoView.java (JavaCameraView)
Photo1.java (Activity) Photo 2.java (Activity)
layout_camaraview.xml
• SurfaceView
...
Procesado de imágenes
Process3D.java (Activity)
layout_procesar3d.xml
• Intercambiar imágenes.
• Convertir a 3D.
12
• Intercambiar imágenes:
13
public void onCreate(Bundle savedInstanceState) {
…
Options options = new Options();
options.i...
• Convertir a 3D:
14
public void procesar() {
…
zda = Highgui.imread(imageFileName);
dcha = Highgui.imread(imageFileName2)...
Resultado
• Se muestra el resultado en layout_resultado.xml.
• Se guarda en el directorio de la aplicación.
15
Otros resultados:
16
Vídeo demostrativo
https://www.youtube.com/watch?v=RDVqdDJc5DI
17
El futuro de 3DStereoglyph
Posibles mejoras de la aplicación
• En la captura de imágenes
– Estabilización de la señal de e...
Continuidad de la aplicación
• Dispositivos con pantalla estereoscópica
Ayuda en la toma de pares estéreo alineados.
Con...
Próxima SlideShare
Cargando en…5
×

Presentación 3DStereoglyph (Android App)

372 visualizaciones

Publicado el

Publicado en: Ingeniería
0 comentarios
0 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Sin descargas
Visualizaciones
Visualizaciones totales
372
En SlideShare
0
De insertados
0
Número de insertados
21
Acciones
Compartido
0
Descargas
2
Comentarios
0
Recomendaciones
0
Insertados 0
No insertados

No hay notas en la diapositiva.

Presentación 3DStereoglyph (Android App)

  1. 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. 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. 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. 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. 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. 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. 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. 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. 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
  10. 10. Funcionamiento Inicio Main.java (Activity) layout_inicio.xml layout_instrucciones.xml • Menú inicial y pantalla de instrucciones. • Si no existen, se crean en la tarjeta SD los directorios necesarios. 10
  11. 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.
  12. 12. Procesado de imágenes Process3D.java (Activity) layout_procesar3d.xml • Intercambiar imágenes. • Convertir a 3D. 12
  13. 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. 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. 15. Resultado • Se muestra el resultado en layout_resultado.xml. • Se guarda en el directorio de la aplicación. 15
  16. 16. Otros resultados: 16
  17. 17. Vídeo demostrativo https://www.youtube.com/watch?v=RDVqdDJc5DI 17
  18. 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. 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

×