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 |