Как я могу без потерь извлечь 2D-изображение из стереоскопического JPEG? - Фотопедия
3 голосов
/ 18 августа 2017

У меня есть несколько изображений JPEG, снятых с Nintendo 3DS через Miiverse, и я хотел бы оптимизировать их для Интернета.

Изображения 2D, но хранятся в стереоскопическом формате JPEG, поэтому каждый файл в итоге содержит одно и то же изображение дважды. Чтобы вдвое уменьшить объем памяти, который мне требуется, было бы хорошо удалить второе изображение. Если я импортирую один из файлов в GIMP, я вижу, что его экспорт с исходными настройками качества дает примерно половину размера файла. Единственная проблема, связанная с этим процессом (я бы автоматизировал его и использовал ImageMagick), это то, что он, несомненно, приведет к ухудшению качества изображения. Так есть ли способы добиться извлечения 2D-изображения без потерь? Только для Linux.

Несмотря на то, что преобразование в PNG действительно уменьшает размер и будет без потерь, оно не уменьшает его вдвое. PNG8 тоже не вариант, так как мне требуется более 256 цветов. Кстати, я также хочу удалить данные EXIF, но это легко сделать с помощью exiv2.

Ответы [ 3 ]

2 голосов
/ 31 июля 2018

Вот скрипт bash, который извлекает стереопары влево-вправо из mpo файлов, используя exiftool. В зависимости от источника файла изображение вправо может храниться в другом теге.

#!/usr/bin/env bash

for i in *.mpo ; do
    j="${i#*/}"
    k="${j%.mpo}"

    # extract left images
    <b>exiftool -trailer:all= "$i" -o "${k}.left.jpg"</b>
    exiftool -TagsFromFile "$i" "${k}.left.jpg"

    # extract right images
    if exiftool "$i" | grep "MP Image 3" ; then
        # Samsung NX 45mm f/1.8 2D/3D
        <b>exiftool "$i" -mpimage3 -b > "${k}.right.jpg"</b>
        exiftool -TagsFromFile "$i" "${k}.right.jpg"
    else
        # Fujifilm Real 3D W3
        <b>exiftool "$i" -mpimage2 -b > "${k}.right.jpg"</b>
        exiftool -TagsFromFile "$i" "${k}.right.jpg"
    fi
done
1 голос
/ 19 августа 2017

Я нашел решение своей проблемы.

Изображения JPEG начинаются с FF D8 FF, поэтому решение для отдельного файла состоит в том, чтобы просто найти второе вхождение этого файла с помощью шестнадцатеричного редактора и удалить его вместе со всем, что следует за ним. Написание сценария для автоматизации этого процесса должно быть простым, и он может даже легко разделить изображения на два отдельных файла - это может быть удобно, если ваше изображение на самом деле имеет две перспективы.

Не переставая думать об этом, я использую это для извлечения первого изображения:
bbe -b '/\xFF\xD8\xFF\xE1/:' -e 'D 2' -o outputFile inputFile

Это работает. Я счастлив. Украденный у этот ответ .

0 голосов
/ 18 августа 2017

Если я импортирую один из файлов в GIMP, я вижу, что его экспорт с исходными настройками качества дает примерно половину размера файла.

Каким это должно быть, когда вы делаете именно это.

Изображения являются двухмерными, но хранятся в стереоскопическом формате JPEG, поэтому каждый файл в итоге содержит одно и то же изображение дважды.

Нет, это не так.

Содержит два разных изображения с разных точек зрения.

Они будут похожи, но не одинаковы.

Единственная проблема, связанная с этим процессом (я бы автоматизировал его и использовал ImageMagick), это то, что он, несомненно, приведет к ухудшению качества изображения.

У вас есть два изображения, и only способ сделать это - извлечь одно или другое из файла.

Так есть ли способы добиться извлечения 2D-изображения без потерь? Только для Linux.

Помимо чтения и сохранения в JPEG, без потерь.

Вы не можете разумно объединить два разных изображения, поскольку они взяты с двух разных точек зрения, и вы попытаетесь ввести ряд артефактов, связанных с параллаксом, пытаясь объединить их.

...