¿Cómo creo una imagen estereoscópica 3D a partir de una imagen 2D utilizando MATLAB?¿Cómo crear imágenes 3D estereoscópicas usando MATLAB con la herramienta de imagen?
Respuesta
O estoy malinterpretando su pregunta (la gente ya ha señalado que no está claro) o está malinterpretando la forma en que funciona la visión 3D. No "ve imágenes en 2D con vidrio 3D". La visión 3D se logra al servir dos imágenes diferentes, imagen izquierda e imagen derecha, en el ojo izquierdo y el ojo derecho, respectivamente. En un nivel fundamental, MATLAB no tiene nada que ver con eso.
Por lo tanto, en ausencia de una pregunta coherente o comprensible, lo mejor que puedo hacer es asumir que desea algo como this: tiene una sola imagen 2D, pero aún desea "ver en formato de imagen 3D". En ese caso, es necesario dividir de alguna manera que una sola imagen en dos nuevas imágenes:
- Imagen de la izquierda para el ojo izquierdo
- la derecha por el ojo derecho
Esto no es trivial. Generalmente, comienza por inferring the depth de cada píxel en la imagen 2D. Como está "adivinando" la información de profundidad, las dos nuevas imágenes no serán una representación perfecta de una escena en 3D.
A continuación, separa la imagen en capas con esa información de profundidad. En esencia, se verá como un recorte emergente de un libro para niños:
Cuantas más capas que pueden llegar a, y cuanto más precisa sea su estimación de profundidad es el más realista de su representación en 3D será .
Finalmente, proyecta esa representación en capas de nuevo en 2D desde dos posiciones diferentes: una para el ojo izquierdo y otra para el ojo derecho. Esto te da las dos imágenes diferentes que necesitas.
EDITAR
El segundo video se ha vinculado a la creación describe simplificada de lo que comúnmente se conoce como un anaglyph image. Requiere gafas rojo-cian 3D: éstas son y no las gafas polarizadas que usan en la mayoría de los cines 3D ahora. La razón por la que digo simplificado es que no discrimina entre el primer plano y el fondo.
Para obtener el mejor efecto, separa el primer plano del fondo y aplica el enfoque solo al primer plano. Esto se debe a que, por lo general, el fondo tiene una profundidad infinita y no cambia al pasar de la visión monoaural a la estéreo. En el caso del piano, todo es más o menos en primer plano, por lo que el enfoque funciona.
El algoritmo del video describe es:
- de inicio con dos imágenes,
im1
yim2
. Son idénticos - Establezca los canales verde y azul de
im1
en cero. Esto creará la imagen roja - Establezca el canal rojo de
im2
en cero. Esto creará la imagen cian. - Desplace las dos imágenes en una cantidad específica (según la profundidad del sujeto) de modo que
im1
esté a la izquierda yim2
a la derecha. Debe obtener esta orden correctamente porque las gafas rojo-cian 3D tienen rojo a la izquierda y cian a la derecha. - Realice la adición de elementos de las dos imágenes desplazadas. Tenga en cuenta que ningún canal se saturará.
Aquí hay un código Python/OpenCV escribí:
import cv
SHIFT=8
if __name__ == '__main__':
import sys
_, fname = sys.argv
im = cv.LoadImage(fname)
size = cv.GetSize(im)
width, height = size
left = cv.CreateImage(size, im.depth, im.nChannels)
right = cv.CreateImage(size, im.depth, im.nChannels)
anaglyph = cv.CreateImage((width - SHIFT, height), im.depth, im.nChannels)
#
# This would be easier if we had COI support for cv.Set, but it doesn't
# work that way.
# OpenCV uses BGR order (even if input image is greyscale):
# http://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/opencv-intro.html
# red goes on the left, cyan on the right:
# http://en.wikipedia.org/wiki/Anaglyph_image
#
b = cv.CreateImage(size, im.depth, 1)
g = cv.CreateImage(size, im.depth, 1)
r = cv.CreateImage(size, im.depth, 1)
cv.Split(im, b, g, r, None)
zeros = cv.CreateImage(size, r.depth, 1)
cv.Merge(zeros, zeros, r, None, left)
cv.Merge(b, g, zeros, None, right)
#
# cvRect is (x, y, width, height) and it MUST be a tuple, not a list
#
cv.SetImageROI(left, (SHIFT, 0, width - SHIFT, height))
cv.SetImageROI(right, (0, 0, width - SHIFT, height))
cv.Add(left, right, anaglyph, None)
cv.SaveImage('anaglyph.jpeg', anaglyph)
Aquí está una imagen similar a lo que se usa en el video:
Aquí está la salida:
Lamentablemente no tengo gafas 3D rojo-cian para verificar que esto funcione. Pero parece que debería, al menos en teoría. Quizás alguien me corrija si me equivoco.
muchas gracias @misha .. pero quiero que vea los enlaces del video http://www.youtube.com/watch?v=3r4M_KHt6aw, http://www.youtube.com/watch?v=g_JRHtHpuSY, http : //www.youtube.com/watch? v = zdXxS2KHXlo así .. - gracias Abhi. –
Básicamente, el primer enlace describe más o menos lo que hice. Calcula el mapa de profundidad, crea una segunda imagen. No estoy seguro acerca de la implementación del filtro de desplazamiento real. El segundo enlace no es realmente tan relevante: no es una imagen estéreo, solo logra un efecto pseudo-3D. Si esto es lo que quieres, entonces es bastante simple de implementar, solo haz exactamente lo que el chico decía en el video. Es posible que vea el tercer video más tarde, es un poco largo, y es tarde aquí. Ponga el enlace relevante en su pregunta original para que sea obvio lo que quiere. – misha
Gracias @misha sí lo tienes. Quiero agregar el efecto pseudo-3D de la imagen 2d. Acabo de lograr un simple efecto 3D según los enlaces de video. Si tienes un código con respecto me responde ... - Abhi –
Esto es mucho más fácil de hacer si tiene dos imágenes tomadas desde puntos de vista ligeramente diferentes. Puede crear un anáglifo estéreo rectificando las dos imágenes. Las funciones relevantes son estimateUncalibratedRectifiation
y stereoAnaglyph
en Computer Vision System Toolbox. Vea el ejemplo Uncalibrated Stereo Image Rectification.
Como alternativa, puede calibrar sus cámaras usando el Stereo Camera Calibrator app, y luego usar la función recifyStereoImages
. Vea el Stereo Calibration and Scene Reconstruction.
gracias por su respuesta ... si solo tenemos una imagen, ¿podemos hacer una imagen estereoscópica? –
- 1. Cómo alinear la imagen - Matlab
- 2. Store MATLAB viewport 3D
- 3. Pantalla 3D voxel en matlab
- 4. Capas de varias imágenes en 3D-espacio
- 5. ¿Cómo corregir la iluminación desigual en imágenes usando MATLAB?
- 6. Matlab 3D Matrix Parcela
- 7. ¿Cómo envío imágenes 3D a mi TV 3D?
- 8. Matlab 3D matriz
- 9. Herramienta gratuita para crear/editar imágenes PNG?
- 10. cómo mostrar la imagen dicom en matlab?
- 11. Cómo crear videos de imágenes con php?
- 12. Aplicación Django para recortar imágenes usando una herramienta de recorte
- 13. ¿Crear imagen con fondo transparente usando GDI +?
- 14. ¿Cómo agregar imágenes en la GUI de MATLAB?
- 15. MATLAB procesamiento de imágenes de pequeños círculos
- 16. Crear imagen 3D de anáglifo en canvas HTML5
- 17. PDF para crear imágenes usando Java
- 18. Crear una matriz 3D usando Python
- 19. Reconocimiento de imágenes y representación en 3D
- 20. Matlab: cómo trazar un texto en 3D
- 21. Trazar puntos 3D en Matlab
- 22. Crear una imagen con GD contiene otras imágenes
- 23. ¿Herramienta para verificar la compatibilidad con las versiones de Matlab?
- 24. Filtro Gaussiano 3D en MATLAB
- 25. Cómo trazar la cuadrícula 3D (cubo) en Matlab
- 26. Correspondencias 3D de la matriz fundamental
- 27. Interpolar superficie del cilindro 3D en Matlab
- 28. Rotar una matriz 3D en MATLAB
- 29. JavaFX - crear botón personalizado con imagen
- 30. ¿Cómo obtener imágenes con servlet y mostrarlas usando la clase de imagen GWT?
¿Cuál es la pregunta? ¿Qué has intentado? – carlosdc
Creo que sería más fácil crearlo si tienes datos en 3D, ya que entonces todo lo que necesitas es crear 2 proyecciones con diferentes ángulos de visión. –
@carlosdc @Itamar Katz: si quiero ver una imagen 2D usando un cristal 3D, vea en formato de imagen 3D ... así. ¿O de otra manera puede verlo con 3 dimensiones? –