| # Sample Images Guide |
|
|
| The demo can work with any image, but here are some recommendations for educational purposes. |
|
|
| ## Using Your Own Images |
|
|
| ### Option 1: Upload at Runtime (Recommended for Users) |
| The simplest way is to use the **file uploader** in the sidebar. Users can upload their own images to experiment with. |
|
|
| **Supported formats:** PNG, JPG, JPEG |
|
|
| **Recommendations:** |
| - Images with gradients (to show posterization) |
| - Images with fine details (to show pixelation) |
| - Images with sharp edges (to show JPEG artifacts) |
| - Natural photos vs. graphics/screenshots |
|
|
| ### Option 2: Use HuggingFace Dataset (Recommended for Deployment) |
|
|
| If you want a default image always available, use a HuggingFace dataset: |
|
|
| 1. **Create a dataset on HuggingFace:** |
| - Go to https://huggingface.co/new-dataset |
| - Upload your images |
| - Make it public |
|
|
| 2. **Update `app.py`:** |
| ```python |
| image_path = hf_hub_download( |
| repo_id="your-username/your-dataset-name", |
| filename="your-image.jpg", |
| repo_type="dataset", |
| ) |
| ``` |
|
|
| ### Option 3: Bundle with Repository |
|
|
| For local development, you can include images in the repository: |
|
|
| 1. **Create a directory:** |
| ```bash |
| mkdir sample_images |
| ``` |
|
|
| 2. **Add images to `.gitignore` if they're large:** |
| ``` |
| sample_images/*.jpg |
| sample_images/*.png |
| ``` |
|
|
| 3. **Update `app.py`:** |
| ```python |
| img = cv.imread('sample_images/your-image.jpg') |
| img = cv.cvtColor(img, cv.COLOR_BGR2RGB) |
| ``` |
|
|
| ## Recommended Image Types |
|
|
| ### For Demonstrating Sampling (Pixelation) |
|
|
| **Good choices:** |
| - **Text documents or signs** - shows when text becomes unreadable |
| - **Portraits** - shows loss of facial detail |
| - **Architectural photos** - shows loss of fine lines and edges |
| - **Natural scenes** - shows overall degradation |
|
|
| **Characteristics:** |
| - High resolution (512x512 or larger) |
| - Clear details at different scales |
| - Mix of fine and coarse features |
|
|
| ### For Demonstrating Quantization (Bit Depth) |
|
|
| **Good choices:** |
| - **Sunset/sunrise photos** - smooth color gradients |
| - **Blue sky** - shows banding clearly |
| - **Gradients** - artificial gradients work great |
| - **Portraits** - shows posterization in skin tones |
|
|
| **Characteristics:** |
| - Smooth color transitions |
| - Wide tonal range |
| - Subtle color variations |
|
|
| ### For Demonstrating JPEG Artifacts |
|
|
| **Good choices:** |
| - **Graphics with solid colors** - shows blocking clearly |
| - **Screenshots with text** - compression artifacts around text |
| - **High-contrast edges** - ringing artifacts |
| - **Patterns** - mosquito noise |
|
|
| **Characteristics:** |
| - Sharp edges |
| - Solid color areas |
| - High contrast regions |
| - Fine patterns or textures |
|
|
| ## Sample Image Sources |
|
|
| ### Free Stock Photos (Educational Use) |
| - **Unsplash**: https://unsplash.com/ (free license) |
| - **Pexels**: https://www.pexels.com/ (free license) |
| - **Pixabay**: https://pixabay.com/ (free license) |
|
|
| ### Scientific Image Datasets |
| - **USC-SIPI Image Database**: http://sipi.usc.edu/database/ |
| - Standard test images used in image processing research |
| - Includes "Lena", "Peppers", "Airplane", etc. |
| |
| - **ImageNet**: https://image-net.org/ |
| - Massive dataset, but you only need a few samples |
|
|
| ### Creating Your Own Test Images |
|
|
| Use Python to generate test images with specific properties: |
|
|
| ```python |
| import numpy as np |
| import cv2 as cv |
| |
| # Gradient image (good for quantization demo) |
| gradient = np.zeros((512, 512, 3), dtype=np.uint8) |
| for i in range(512): |
| gradient[i, :, :] = int(255 * i / 512) |
| cv.imwrite('gradient.png', gradient) |
| |
| # Pattern image (good for JPEG artifacts demo) |
| pattern = np.zeros((512, 512, 3), dtype=np.uint8) |
| pattern[::8, :] = 255 # Horizontal lines |
| pattern[:, ::8] = 255 # Vertical lines |
| cv.imwrite('pattern.png', pattern) |
| |
| # Noise image (good for compression comparison) |
| noise = np.random.randint(0, 256, (512, 512, 3), dtype=np.uint8) |
| cv.imwrite('noise.png', noise) |
| ``` |
|
|
| ## Image Guidelines |
|
|
| For best educational results: |
|
|
| 1. **Size**: 512x512 or similar (not too large, loads faster) |
| 2. **Format**: PNG for original (lossless) |
| 3. **Content**: Clear subject matter, recognizable features |
| 4. **Variety**: Have different types available for different concepts |
| 5. **Rights**: Ensure you have permission to use/distribute |
|
|
| ## Current Implementation |
|
|
| The app currently: |
| 1. **Tries to download** from HuggingFace (if configured) |
| 2. **Falls back** to a generated sample image with: |
| - Color gradients |
| - Geometric shapes |
| - Text |
| 3. **Allows upload** via sidebar |
|
|
| This ensures the demo works even without internet access or external dependencies. |
|
|
| ## Testing Your Images |
|
|
| Before using an image in production, test: |
| - Does it load quickly? |
| - Are effects visible at different sampling rates? |
| - Does quantization create noticeable banding? |
| - Are JPEG artifacts visible at low quality? |
| - Is the file size reasonable (<5MB)? |
|
|
| ## Need Help? |
|
|
| For questions about image preparation or integration, open an issue on GitHub. |
|
|