Fall 2016 Image Stylization Qt Application
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
stippler
.gitignore
Doxyfile
README.md

README.md

COMP4905A Honours Project

Fall 2016

Bernard Llanos

Supervised by Dr. David Mould

School of Computer Science, Carleton University

Description

A Qt-based GUI application for generating stipple paintings and SLIC segmentations from images, as well as other stylizations based on stippling and segmentation. (SLIC is Simple Linear Iterative Clustering, referenced below.)

The project for which this application was developed is described in a series of blog posts at: http://gigl.scs.carleton.ca/blog/51

I have removed the image stylization algorithms specific to the project prior to making the rest of the code public. Please contact me if you need access to the full codebase.

Building Instructions

  • Install Qt development tools.
    • Qt >= 5.6.0 and Qt Creator >= 4.0.0 were used for development. (Qt Creator is not necessary for building the project, as Qt projects can be built using command-line tools directly.)
  • Open 'stippler/stippler.pro' with Qt Creator and build the project, or use the qmake-qt5 command line program to build the project.
    • Example (for a Linux environment): qmake-qt5 ./stippler/stippler.pro -r -spec linux-g++

Features and Operating Instructions

  • Launch the executable with Qt Creator or directly from the command line.
  • The program accepts one optional command line argument: The path of an image file to load.
  • The program will launch a simple graphical user interface consisting of the following:
    • A central scrollable area for displaying images
    • A bottom status bar for displaying errors and progress information
    • A menu bar with conventional menu items for opening images and adjusting zoom, as well as a menu of image stylization algorithms which can be run on the currently displayed image.
  • Some image stylization algorithms will request additional input images by opening a file browser. The purpose of each additional image will be briefly described by the title of the file browser dialog.
    • Presently, all algorithms require additional images that have the same pixel dimensions as the primary input image.

Documentation

Code documentation can be generated by running doxygen Doxyfile in this directory.

Documentation generation depends on Doxygen.

Doxygen will convert specially-formatted source code comments into HTML files, which can be read and navigated through using a web browser. The HTML output is placed in './docs/html'. Open './docs/html/index.html' to view the main page.

References

Algorithms

  • Base stippling algorithm: H. Li and D. Mould. "Structure-preserving Stippling by Priority-based Error Diffusion," in Proceedings of Graphics Interface, 2011, pp.127-134.
  • R. Achanta et. al. "SLIC superpixels compared to state-of-the-art superpixel methods." IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 34, no. 11, pp. 2274-2281, Nov. 2012.
  • N. Otsu. "A threshold selection method from gray-level histograms." IEEE Transactions on Systems, Man, and Cybernetics, vol. 9, no. 1, pp. 62-66, Jan. 1979.
    • My implementation was a port of the Java code provided by Dr. Andrew Greensted, referenced below.
  • P. Morin. (2014, Feb. 4). Open Data Structures. (Edition 0.1G). [On-line]. Available: http://opendatastructures.org/ [Oct. 9, 2016].
    • Referenced for common data structures and associated algorithms.

Qt Examples

Open Data Structures

Open Data Structures is an open textbook and associated code library started by Pat Morin, and distributed under the Creative Commons Attribution License.

I used the Open Data Structures C++ BinaryHeap class template (and its dependencies) as the basis for my priority queue implementation in BinaryHeap.h.

A formal citation for the textbook would be as follows:

P. Morin. (2014, Feb. 4). Open Data Structures. (Edition 0.1G). [On-line]. Available: http://opendatastructures.org/ [Oct. 9, 2016].

Other Code References

Qt Examples License

Recopied from Qt example code.


Copyright (C) 2015 The Qt Company Ltd. Contact: http://www.qt.io/licensing/

This file is part of the examples of the Qt Toolkit.

You may use this file under the terms of the BSD license as follows:

"Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  • Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  • Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
  • Neither the name of The Qt Company Ltd nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."