# About
This code was written for a project titled "Applying Steganography to Digital Media".
# Setup
In Matlab, do: File -> Set Path... -> Add With Subfolders... -> Browse for root directory of this repo -> OK
# Steganography
This project contains implementations of 6 distinct steganography algorithms in Matlab, a simple interface for applying steganography to images, and a couple of processing methods for increasing robustness of the algorithms. For each algorithm, there is an example application both images and videos. The following files are all located in the */steganography* folder:
| Algorithm | Image Example | Video Example |
|:----------|:-------------------------------|:------------------------|
| LSB | *steganography_image_lsb.m* | *steganography_video.m* |
| DCT | *steganography_image_dct.m* | *steganography_video.m* |
| ZK | *steganography_image_zk.m* | *steganography_video.m* |
| WDCT | *steganography_image_wdct.m* | *steganography_video.m* |
| Fusion | *steganography_image_fusion.m* | *steganography_video.m* |
| Egypt | *steganography_image_egypt.m* | *steganography_video.m* |
After running any of the above files, statistics about the algorithm performance are displayed. They are generated by *steganography_statistics.m*, which contains many customisable options.
A basic spellchecker, written in Python, is also included. It can optionally be applied through modifying *steganography_statistics.m*.
Hamming codes can also be applied. They can be enabled in the DCT or Egypt algorithms through modifiying their **use_hamming** parameter.
# Interface
Within the */interface* folder exists *ImageInterface.m*. This is a simple Matlab interface that allows performing steganography of text into images using all of the above algorithms.
It is intended only for demonstration purposes. Much more customisation of the algorithms is possible through performing steganography directly through Matlab code.
# Input, Output and Results
The */input* folder contains potential carrier images, such as the infamous lena.jpg.
The */output* folder is where the steganography algorithms output their stego-images when they are run for **1 iteration**.
The */results* folder is where the steganography algorithms output their stego-images and a CSV of results when they are run for **multiple iterations**.
The number of **iterations** is set by modifying the **iteration_total** parameter at the top of each steganography example file.
* Set **iteration_total** to 1 to run one test, which outputs to */output*
* Set **iteration_total** to 101 to run 101 tests, in which JPEG quality from 100% to 0% is tested, and results are outputted to */results*
# Other Parameters
Each algorithm can be switched between greyscale and colour, through changing **use_greyscale**. If using colour, the specific colour channel can be set with **channel**.
# Code
This project is about 98% written in Matlab, with 2% Python. If Python is not installed the Matlab code will still run succesfully, but the Spellchecker will not function, and **message_similarity_py** will return NaN.