MPO stereo images, that were taken in example using Fujifilm FinePix Real 3D Cameras contain a field parallax in their exif data. The parallax value can be used by stereoscopic viewers like my stereoscopic image viewer SIV to adjust the 3D effect. By manipulating this value one can can customize the strength of the pop out effect and reduce the ghosting effect. This may lead to a more pleasuring viewing experience.
The parallax value can easily be displayed using exiftool:
exiftool -ee -Parallax DSCF0045.MPO
If you want to set the parallax value of an image, this is not that easy, since the value is stored in the exif data of the second embedded jpeg file in the MPO, which is not directly writable with exiftool. However one can find out the beginning of the second file with exiftool, extract the image and then set the parallax value. Afterwards on can put all together again using dd. Doing this manually is a quite awful task, so I wrote a little script for automating it:
#!/bin/bash #setparallax.sh #$1: MPO File $2: Parallax value
For determining the value that matches the visual requirements of your image you may use the parallax adjustment function of SIV (+/- key) and use the value on the OSD and printed out in the console. Perhaps some day I will add the functionality, to directly write the new parallax value to the MPO file, to SIV. However the setparallax script at least gives us the possibility to write the parallax value until then.
The current OpenSceneGraph ebuild in the Gentoo Portage tree does not install the OpenSceneGraph sample data set. These files include some sample models, fonts, bitmaps etc. used in the OpenSceneGraph examples and other applications. This is a problem for applications relying on the files to be available. In example my stereoscopic image viewer SIV relies on having the OpenSceneGraph sample dataset installed and fails to load the arial font from the dataset with the following error:
Download the modified ebuild and extract the archive into /usr/local/portage. Be sure to include the following line in your /etc/make.conf:
PORTDIR_OVERLAY=”/usr/local/portage”
If you want to use OpenSceneGraph with ffmpeg support, download the patch from bugs.gentoo.org and copy it to /etc/portage/patches/dev-games/openscenegraph-2.8.3/ as described there, to compile with ffmpeg-0.6. Otherwise the emerge will fail with:
/osgPlugins/ffmpeg/FFmpegAudioStream.hpp:18:9: error: cannot allocate an object of abstract type ‘osgFFmpeg::FFmpegAudioStream’
Now you can set the examples USE-Flag and emerge openscenegraph to get the example dataset.
If you have got flightgear installed, reinstall simgear afterwards, like the ebuild requests you to do:
emerge -1 dev-games/simgear
Depending on if you were upgrading or just reinstalling with the new ebuild it may be necessary to run revdep-rebuild to resolve issues with broken libraries. Hopefully the next ebuild in the portage tree will include the sample data set.
Wxwidgets support seems to be broken with the current version. When using the wxwidgets USE-Flag Openscenegraph fails to compile with, so include
=dev-games/openscenegraph-3.0.1 -wxwidgets
in your /etc/portage/package.use if you have enabled wxwidgets in your make.conf.
I just fixed some bugs and implemented a slideshow mode in SIV, the viewer for stereoscopic jps images, I published in SIV – a stereoscopic jps viewer for Linux. As I wrote before in VR920 headtracking driver for Linux I want to extend the viewer using the tracking data from the VR920 HMD, so one can look around the scene by turning his head. Once this work is done you can enjoy a new experience in 3D. So expect the download of a newer version of SIV to appear soon on MyGNU.de.
In the meanwhile you may want to share your experiences with the viewer. What do you like the viewer for? What do you think should be improved?
As promised in JPS-viewer for linux, here comes the very first release of SIV, the first available Stereoscopic Image Viewer for Linux supporting quad buffered stereo. Well this is not 100% correct, since it is build upon OpenSceneGraph it is somewhat platform independant and schould compile well on windows, mac and unix platforms. However, I only tried with linux since there are enough alternatives available for most other platforms.
SIV is capable of displaying jps stereo images in different stereo modes. I tried it in fullscreen/windowed mode with anaglyphic and quad buffered stereo mode. Different output devices I tested were my Vuzix VR920 and relevator shutter glasses on Nvidia Quadro FX 350M and FX 3400. It still lacks some convenience functions like a diashow mode.
Screenshot of the viewer as window in anaglyphic mode:
A note about the name SIV, SIV stands for Stereoscopic Image Viewer, but as I found out Siv is also the name of the wife of the god Thor in the norse mythology. See: Wikipedia: Sif and Behindthename: Siv. Sif and Siv are the same name, both writings are possible. Once I found out this, I thought that’s a cool name for this piece of work.
Usage:
./siv [options] jpsfile(s) Options: –CullDrawThreadPerContext Select CullDrawThreadPerContext threading model for viewer. –CullThreadPerCameraDrawThreadPerContext Select CullThreadPerCameraDrawThreadPerCo- ntext threading model for viewer. –DrawThreadPerContext Select DrawThreadPerContext threading model for viewer. –SingleThreaded Select SingleThreaded threading model for viewer. –accum-rgb Request a rgb accumulator buffer visual –accum-rgba Request a rgb accumulator buffer visual –cc Request use of compile contexts and threads –clear-color <color> Set the background color of the viewer in the form “r,g,b[,a]”. –display <type> MONITOR | POWERWALL | REALITY_CENTER | HEAD_MOUNTED_DISPLAY –rgba Request a RGBA color buffer visual –samples <num> Request a multisample visual –screen <num> Set the screen to use when multiple screens are present. –serialize-draw <mode> OFF | ON – set the serialization of draw dispatch –stencil Request a stencil buffer visual –stereo Use default stereo mode which is ANAGLYPHIC if not overriden by environmental variable –stereo <mode> ANAGLYPHIC | QUAD_BUFFER | HORIZONTAL_SPLIT | VERTICAL_SPLIT | LEFT_EYE | RIGHT_EYE | HORIZONTAL_INTERLACE | VERTICAL_INTERLACE | CHECKERBOARD | ON | OFF –window <x y w h> Set the position (x,y) and size (w,h) of the viewer window. -O <option_string> Provide an option string to reader/writers used to load databases -e <extension> Load the plugin associated with handling files with specified extension -h or –help Display this information -l <library> Load the plugin
You may notice that most of the options come from osgViewer, which is the base class for the viewer. This gives the advantage, that one can use the “normal” osgViewer controls such as flying around the scene. Try holding the right mouse button and moving the mouse up or down for zooming out or in. Or press F for toggling fullscreen mode or press S for toggling the stats (fps, etc.) display.
You may supply multiple .jps files at the command line. I.e. ./siv *.jps will display all jps files in the current folder 😉
Once the first image of the list is being displayed you may use CURSOR_UP/DOWN or the mouse wheel to select a different image for being displayed. In future versions I may implement a diashow function…
When displaying an image the filename of the image is displayed in the lower left corner.
As default SIF starts in fullscreen quad buffered stereo mode. Thus if your graphics hardware does not support this mode, the viewer will exit with the following error:
Error: Not able to create requested visual. GraphicsWindow has not been created successfully. Viewer::realize() – failed to set up any windows
In this case try anaglyphic mode or the apropiate 3D mode for your hardware (see the –stereo option).
You may experience the application segfaulting. Most possibly the reason is that your OpenSceneGraph lacks the library osgdb_jp2.so in the lib/osgPlugins folder. If you strace the application and the last thing it tries before segfaulting is to access osgdb_jp2.so, this is the reason. The Problem will be corrected in the next version of SIV. For now install Jasper and rebuild OpenSceneGraph.
Download:
Do not download these files anymore unless you explicitely want this version. New version is available at: SIV-1.0 released
I decided to publish the viewer under the creative common noncommercial license. Make sure you have the OpenScenegraph library installed before trying to compile or run the viewer. You may download the full source (Eclipse Project) from here:
. More binary formats may be available in the future. Fore the x86_64 binary you’ll need OpenSceneGraph-2.8.
Binaries for most linux distributions can be downloaded from www.openscenegraph.org. Instructions on how to build OpenSceneGraph on gentoo can be found on PlopByte.
Building from source:
For building from source unpack the zip and cd to siv/Release and run make.
Future plans:
For the future I’d like to implement a diashow function and to integrate the VR920 headtracking into the viewer. It would be really cool to view a sea panorama image in 3D by turning the head This is the reason why the image is not being displayed plain, but on a cylinder segment. For the tracking I’ll have to write a driver for the VR920 headtracking first, to get the camera viewmatrix for the viewer. Since in Vuzix Forums I found a non working driver, from which I was able to learn how to read the sensor data, I only have to implement the neccesary calculations and calibration methods.
Well, I hope you enjoy the 3rd dimension. If you like the viewer feel free to link to MyGNU.de.