Code Monkey home page Code Monkey logo

jeniffer2's Introduction

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.

jeniffer2's People

Contributors

fkellner avatar

Watchers

 avatar

jeniffer2's Issues

Decide whether to re-implement intermediate steps or remove the option

In earlier versions, RCD demosaicing supported different intermediate results to be shown. Now, only the GUI remains but the implementation in the DNGProcessor is missing.

Possible Cons:

  • might impact performance (needs to be evaluated)
  • makes GUI more complicated

Possible Pros:

  • interesting to look at
  • helps with debugging during implementation of new algorithms

Implement a new demosaicing algorithm

In the current state of Jeniffer2, implementing a new demosaicing algorithm should only require

  • adding a new Algorithm Class (take e.g. de.unituebingen.dng.processor.demosaicingprocessor.BilinearMean as an example)
  • editing the DemosaicingProcessor to include it

Feel free to create a pull request, or comment a link to an interesting implementation that should be included!

Move away from AfterburnerFX

Since the framework does not seem to be actively maintained any longer, and using it means that the GUI cannot be compiled to a native image with GraalVM. However, I do not know enough about JavaFX in order to do this confidently (or make native compilation work with the framework), so any help on this would be greatly appreciated!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.