¿Cómo puedo extraer sin pérdidas una imagen 2D de un JPEG estereoscópico?

Tengo algunos archivos JPEG capturados desde una Nintendo 3DS a través de Miiverse y me gustaría optimizarlos para la web.

Las imágenes son 2D pero se almacenan como JPEG estereoscópico, por lo que cada archivo termina conteniendo la misma imagen dos veces. Para reducir a la mitad la cantidad de almacenamiento que necesito, sería bueno eliminar la segunda imagen. Si importo uno de los archivos a GIMP, puedo ver que exportarlo con su configuración de calidad original da como resultado aproximadamente la mitad del tamaño del archivo. El único problema con este proceso (lo automatizaría y usaría ImageMagick) es que seguramente resultará en una degradación de la calidad de la imagen. Entonces, ¿hay alguna forma de lograr la extracción de imágenes 2D sin pérdidas? Solo compatible con Linux.

Aunque la conversión a PNG reduce el tamaño y no tendría pérdidas, no lo reduce a la mitad. PNG8 tampoco es una opción, ya que necesito más de 256 colores. Por cierto, también querré eliminar los datos EXIF, pero eso se puede hacer fácilmente con exiv2.

¡La 3DS también es una cámara! No se trata del equipo, etc.

Respuestas (3)

Aquí hay un bashscript que extrae pares estéreo izquierdo-derecho de mpoarchivos usandoexiftool . Dependiendo de la fuente del archivo, la imagen correcta puede almacenarse dentro de una etiqueta diferente.

#!/usr/bin/env bash

para i en *.mpo; hacer
    j="${i#*/}"
    k="${j%.mpo}"

    # extraer imágenes de la izquierda
    exiftool -trailer:all= "$i" -o "${k}.left.jpg"
    exiftool -TagsFromFile "$i" "${k}.left.jpg"

    # extraer imágenes correctas
    si exiftool "$i" | grep "MP Imagen 3" ; después
        # Samsung NX 45mm f/1.8 2D/3D
        Exiftool "$i" -mpimage3 -b > "${k}.derecha.jpg"
        Exiftool -TagsFromFile "$i" "${k}.right.jpg"
    más
        #Fujifilm Real 3D W3
        Exiftool "$i" -mpimage2 -b > "${k}.right.jpg"
        Exiftool -TagsFromFile "$i" "${k}.right.jpg"
    fi
hecho

He encontrado la solución a mi problema.

Las imágenes JPEG comienzan con FF D8 FF, por lo que la solución para un archivo individual es simplemente buscar la segunda aparición de esto usando un editor hexadecimal y eliminarlo, junto con todo lo que viene después. Escribir un script para automatizar este proceso debería ser sencillo, e incluso podría dividir las imágenes en dos archivos separados con facilidad; podría ser útil si su imagen realmente tiene dos perspectivas.

Sin detenerme a pensarlo demasiado, estoy usando esto para extraer la primera imagen:
bbe -b '/\xFF\xD8\xFF\xE1/:' -e 'D 2' -o outputFile inputFile

Funciona. Estoy feliz. Robado de esta respuesta .

Si la imagen se almacena como un JPEG de varias partes, puede ser más sólido usar exiftool:exiftool input.jpg -MPImage2 -b > output.jpg

Si importo uno de los archivos a GIMP, puedo ver que exportarlo con su configuración de calidad original da como resultado aproximadamente la mitad del tamaño del archivo.

Que debería ser ya que estás haciendo exactamente eso.

Las imágenes son 2D pero se almacenan como JPEG estereoscópico, por lo que cada archivo termina conteniendo la misma imagen dos veces.

No, no lo hace.

Contiene dos imágenes diferentes desde diferentes puntos de vista.

Serán similares pero no iguales.

El único problema con este proceso (lo automatizaría y usaría ImageMagick) es que seguramente resultará en una degradación de la calidad de la imagen.

Tiene dos imágenes y la única forma de hacerlo es extraer una u otra del archivo.

Entonces, ¿hay alguna forma de lograr la extracción de imágenes 2D sin pérdidas? Solo compatible con Linux.

Además de leer y guardar en JPEG, no tiene pérdidas.

No puede fusionar con sensatez las dos imágenes distintas, ya que se toman desde dos puntos de vista diferentes e introduciría una serie de artefactos relacionados con el paralaje al tratar de fusionarlos.

Fueron tomadas en modo 2D y al ver las imágenes en el sistema con 3D habilitado, les puedo asegurar que ambas son desde el mismo punto de vista.
Dos imágenes tomadas desde la misma posición y el mismo punto de vista no pueden proporcionar un par de imágenes estéreo. Es imposible.
Piense en ello como si tuviera una grabación mono codificada en un archivo de sonido estéreo. Son solo datos duplicados. Estos archivos JPEG estereoscópicos son muy parecidos a los GIF animados: la primera imagen será visible en los visores de imágenes estándar y solo los compatibles pueden ver la segunda imagen, o la perspectiva del ojo derecho (que es idéntica a la izquierda en este caso).
Entonces, no son realmente datos 3D, ¿correcto?
Supongo que se podría decir que no son realmente datos 3D. Técnicamente lo es, pero ambas perspectivas son idénticas...