Here are the programs that I wrote during the Digital Image Processing class in 2008, as well as some new experiments.
- Grayscale to black-and-white
- Thresholding
- Bit-plane slicing
- Random dithering
- Ordered dithering
- Bayer dithering
- Clustered dithering
- Error-diffusion dithering
- Floyd-Steinberg dithering
- Jarvis-Judice-Ninke dithering
- Atkinson dithering
- Image-based dithering
- Halftoning with a single texture
- Halftoning with texture fusion
- Image scaling
- Nearest-neighbor interpolation
- Bilinear interpolation
- Alpha compositing
- Intensity transformations
- Gamma correction
- Linear contrast stretching
- Histogram equalization
- Histogram equalization
- Adaptive histogram equalization
- Contrast-limited adaptive histogram equalization
- Convolution
- Median filter
- Segmentation
| Input | Output (threshold = 100) |
|---|
 |  |
| Output (bit 6) | Output (bit 5) |
|---|
 |  |
| Output (bit 4) | Output (bit 3) |
|---|
 |  |
| Input | Output (threshold = 100, noise = 40) |
|---|
 |  |
| Input | Output (4x4 Bayer matrix) |
|---|
 |  |
| Input | Output |
|---|
 |  |
| Input | Output |
|---|
 |  |
| Input | Output |
|---|
 |  |
| Input | Output |
|---|
 |  |
| Input | Output (block size = 8, alpha = 0.6) |
|---|
  |  |
| Input | Output (block size = 5, alpha = 0.7, threshold1 = 110, threshold2 = 140) |
|---|
   |  |
| Input | Output (N = 5, cropped) |
|---|
 |  |
| Input | Output (N = 5, cropped) |
|---|
 |  |
| Input | Output |
|---|
|  |
| Input | Output (c = 1.0, gamma = 0.6) |
|---|
 |  |
 |  |
| Input | Output (c = 1.5, gamma = 1.5) |
|---|
 |  |
 |  |
| Input | Output (delta = 1000) |
|---|
 |  |
 |  |
| Input | Output (block size = 100) |
|---|
 |  |
 |  |
| Input | Output (block size = 64, clip limit = 2.2) |
|---|
 |  |
 |  |
| Input | Output (Sharp kernel) |
|---|
 |  |
| Input | Output (threshold = 128) |
|---|
 |  12 segments |
| Input (cropped) | Output (threshold = 80, cropped) |
|---|
 |  397 segments |