Git Product home page Git Product logo

crud89 / texturize Goto Github PK

View Code? Open in Web Editor NEW
17.0 3.0 1.0 19.87 MB

A unified framework for example-based texture synthesis, developed alongside my master's thesis.

License: MIT License

CMake 17.65% C++ 82.06% PowerShell 0.28%
texture-synthesis texture-analysis texture-generation image-processing procedural-textures computer-vision synthetic-images computer-graphics textures image-analysis

texturize's Introduction

Texturize: A framework for example-based Texture Synthesis

Texturize is a framework, that has been created alongside my master's thesis. Most of the researchers in the field of texture synthesis do either not provide any implementation samples or have abandoned their sources, so that they are no longer accessible. My motivation was to create a framework, that can be used as a starting point to implement different algorithms and make them comparable, without requiring to re-implement common principles. It provides a unified infrastructure, that allows to customize and mix various aspects of different synthesis algorithms. It follows a modular design that allows to build new modules or customize existing ones. Typical tasks of example-based texture synthesis have been carefully studied and generalized in order to construct a common workflow. That way, I was able to create a prototype synthesizer, that is capable of synthesizing materials for Physically Based Rendering (PBR) from low-resolution exemplars.

The framework must not be confused with the GIMP PlugIn of the same name.

What's it all about?

In general, texture synthesis is a problem field, that researches algorithms, that can create images which are used to add detail to geometric surfaces in computer graphics. Those images are called textures and if they are not created by humans, they are called synthetic textures. There are two major areas in texture synthesis:

  • Procedural synthesizers are algorithms that form new textures from mathematical models.
  • Non-Parametric synthesizers take existing texture exemplars and aim to create new, visually similar textures with higher resolution.

Texturize is a framework for non-parametric synthesizers. Those algorithms have applications in many different computer graphics problems. They are used in image editing (e.g. to fill "holes" or transfer style), video editing and others. When creating this framework, I focused on re-mixing existing textures, i.e. synthesizing new images, that look visually similar to the exemplar, but do not feature heavy repetitions. This can, for example, be used to cover geometric surfaces without visible tiling artifacts.

If you want a more detailed introduction into texture synthesis, consider taking a look int my thesis.

Getting started

Building a synthesizer is a process that involves multiple steps. For convenience, they are described in the getting started guide. A reference implementation, called Sandbox, is also provided. You can learn more about it in the sandbox guide.

Custom framework builds

In case you want to include the framework into other applications, or require different versions of its dependencies, a custom build might be required. Please refer to the building guide for more information.

License

The project is currently licensed under the MIT license. Please refer to the COPYING file for more information.

texturize's People

Contributors

crud89 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

zephyr007

texturize's Issues

Treat all warnings as errors

Because warnings demand just as much attention as errors. The compiler should successfully compile the code after specifying the /WX flag for release builds.

This only applies to internal warnings. Warnings from external libraries are currently suppressed by specifying the /experimental:external /external:W0 compiler flag. This only works for Visual Studio 15.6 or higher.

Requires Issue #1 to be resolved first.

Make binary application interface (ABI) more stable

The framework dynamically links the C Runtime Library (CRT) by specifying the /MD or /MDd options. Linking a client application to another version of the CRT can cause problems when calling members that rely on STL types. The framework interface should be redesigned to not emit STL types.

More specifically, the warnings C4275 and C4251 should be treated as errors.

In order to resolve those warnings, the following three steps should be preferred in the order they are listed here:

  • Remove STL types from public interfaces.
  • Export common STL types like std::string. This only works for fully specialized templates.
  • Hide STL-dependant interfaces using the pImpl idom.

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.