Skip to content

Open Source DNG processor for experimenting with Demosaicing Algorithms - in Java!

License

Notifications You must be signed in to change notification settings

fkellner/jeniffer2

Repository files navigation

JENIFFER2

Jeniffer2 Logo

Build Status OpenJDK 17 License: GPLv3

Jeniffer2 is a raw image processor written in Java. It offers

  • a big choice of demosaicing algorithms
  • the option to export to TIFF, JPEG or PNG
  • tools to inspect metadata
  • tools for comparing the results of different algorithms

It has been designed to be extensible (at least regarding demosaicing algorithms) and portable.

Jeniffer2 has been developed as part of three master theses at Tübingen University, which can be downloaded here.

Fun fact: JENIFFER stands for Java Enhanced Nef Image File Format EditoR. Version 2 is using the Adobe licensed open DNG format as input instead of the proprietary Nikon NEF format.

Installing and Running Jeniffer2

Demo

Jeniffer2 algorithm comparison demo

Development

Subprojects

/dng

DNG processing library with a few tests.

/cli

CLI frontend for the library, for manual testing.

/ui

Distributable GUI frontend.

benchmark-accuracy, benchmark-performance

Shell-Scripts using the CLI and some example images to test the accuracy of the different algorithms and the performance of their implementation, and generate some plots from the collected data.

Build instructions

Prerequisites

This java project uses Apache Maven as a build tool. The language version specified in the project is 17, so you need JDK 17 or higher (check with java -version (note the single dash!) from the command line/shell of your convenience).

Tip: On Debian-based Linux systems, you can install a specific java version via apt install openjdk-<version>-jdk (at the time of writing, the latest stable version is 17).

Building and packaging using make

For your convenience, you can build the project using make build if you have CMake or something similar installed.

You need to have it installed in order to run the (hopefully) platform-independent cross-platform package script with make package, which uses the great warp-packer to produce standalone binaries (*.bin and *.exe). A helper for this are the run-<os>.sh and run.bat files.

For the windows binary, it may happen that unpacking the archive fails. Then you need to manually go to C -> Users -> <Username> -> AppData -> Local (hidden folder, setting to show hidden files can be found in the "View" Tab in the "Show/Hide" section in your explorer) and delete the warp folder.

Note that this downloads the warp-packer tool as well as JREs for each platform, although they are not committed to version control, they will not be re-downloaded if they already are present.

Building the subprojects using maven

The following instructions assume you use Maven from the command line. You can of course run the same Maven Actions from your IDE, if supported.

Building the DNG reader

Switch to the dng folder/project and run mvn install to publish the package to your local repository, so that it can be imported and used by the UI. If you want to run a specific Test, you can do so with mvn test -Dtest=*TestName. If you want to skip tests e.g. for trying something out visually, you can do mvn install -Dmaven.test.skip.

Building the CLI

Switch to the cli folder/project and run mvn [clean] package. Details in Sub-README.

Building the UI

Switch to the ui folder/project and run mvn package. The compiled JAR can be found in the generated target folder. Run it with java -jar Jennifer2-<version>-jar-with-dependencies.jar. A test DNG file can be downloaded e.g. here. On MacOS, you max need to add the -XStartOnFirstThread flag if you want to use GPU, like so:

java -XStartOnFirstThread -jar Jennifer2-<version>-jar-with-dependencies.jar

Creating the User Manual PDFs

The Markdown files USER_MANUAL*.md can be converted to PDF using pandoc.

The commands that need to be run are:

pandoc -f markdown -t latex -V linkcolor:lightblue -o USER_MANUAL.pdf USER_MANUAL.md
pandoc -f markdown -t latex -V linkcolor:lightblue -o USER_MANUAL.de.pdf USER_MANUAL.de.md

Alternatively, if you have Make available, you can simply run

make manual

Contributing

Feel free to open an issue or pull request! There is currently one single maintainer to this project, so you may expect a response time of several days.

This project is probably too small for a formal code of conduct, but please be civil to each other and do not discriminate based on race, sexuality, gender or anything else.

Credits

Jeniffer2 has been developed under the supervision of Prof. Dr. Thomas Walter at Tübingen University.

Credits go to:

  • Eugen Ljavin (who wrote the DNG processing and original AfterburnerFX/JavaFX app)
  • Joachim Groß
  • Michael Kessler
  • Claudia Grosch
  • Andreas Reiter (who added the more advanced demosaicing algorithms)
  • Florian Kellner (who refactored the code, added comparison tools, experimental GPU support and setup+maintains this repo)

Legal notice

  • This product includes DNG technology under license by Adobe.
  • Dieses Produkt enthält die bei Adobe lizenzierte DNG-Technologie.