Skip to main content

An interactive image viewer for multidimensional numpy arrays

Project description

image-slide

Python 3.8+ License: MIT

A comprehensive Python image viewer for multidimensional numpy arrays with interactive controls for navigation, contrast adjustment, and complex data visualization.

image-slide Demo

Features

Core Functionality

  • Multi-dimensional array support: View numpy arrays of arbitrary dimensions and shapes
  • Image navigation: Slider-based navigation through image stacks
  • Complex array support: Display magnitude, phase, real, or imaginary parts
  • Interactive controls: Contrast, brightness, and colormap adjustment
  • Keyboard shortcuts: Fast navigation with arrow keys
  • Professional interface: Compact layout with all controls accessible

Display Controls

  • Contrast adjustment: 0.1x to 3.0x multiplication
  • Brightness adjustment: -1.0 to +1.0 offset
  • Colormap selection: 11 built-in colormaps (gray, viridis, plasma, etc.)
  • Auto-contrast: Automatic contrast adjustment based on percentiles
  • Reset function: Restore all settings to defaults

Navigation

  • Mouse: Use the slider to navigate between images
  • Keyboard shortcuts:
    • ←/→: Previous/next image
    • Page Up/Down: Jump by 10 images
    • Home/End: Go to first/last image

Installation

From PyPI (when published)

pip install image-slide

From Source

git clone https://github.com/GyroTools/image-slide.git
cd image-slide
pip install -e .

Dependencies

  • Python 3.8+
  • numpy >= 1.19.0
  • matplotlib >= 3.3.0

Quick Start

Basic Usage

import numpy as np
from image_slide import ImageSlideViewer

# Create or load your numpy array of arbitrary shape
image_stack = np.random.random((10, 100, 100))

# Create and run viewer
viewer = ImageSlideViewer(image_stack, "My Images")
viewer.run()

Convenience Function

from image_slide import image_slide

# Even simpler - direct function call
image_slide(image_stack, "My Images")

Complex Arrays

# Complex array example
n_images, height, width = 5, 100, 100
complex_stack = np.random.random((n_images, height, width)) + 1j * np.random.random((n_images, height, width))

viewer = ImageSlideViewer(complex_stack, "Complex Data")
viewer.run()

Loading from Files

# Load from numpy file
data = np.load('your_data.npy')
image_slide(data, "Loaded Data")

# Load multiple images into stack
import glob
from PIL import Image

files = glob.glob("*.png")
images = [np.array(Image.open(f)) for f in files]
image_stack = np.array(images)
image_slide(image_stack, "Image Stack")

Input Requirements

Data Types

  • Real arrays: Any numeric numpy dtype (int, float, etc.)
  • Complex arrays: complex64, complex128 with magnitude/phase/real/imaginary display options
  • Normalized: Data is automatically normalized for display

Advanced Usage

Complex Array Display Modes

When working with complex arrays, you can choose what to display:

  1. Magnitude: |z| - Shows the amplitude
  2. Phase: arg(z) - Shows the phase angle
  3. Real: Re(z) - Shows the real part
  4. Imaginary: Im(z) - Shows the imaginary part

Programmatic Control

# Create viewer but don't show immediately
viewer = ImageSlideViewer(image_stack, "My Images")

# Set initial display parameters
viewer.contrast = 1.5
viewer.brightness = 0.2
viewer.current_complex_display = "phase"  # for complex arrays

# Update display and show
viewer.update_display()
viewer.run()

Keyboard Shortcuts Reference

Key Action
Previous image
Next image
Page Up Jump back 10 images
Page Down Jump forward 10 images
Home Go to first image
End Go to last image

Interface Components

  • Top Controls: Contrast, brightness, colormap, and action buttons arranged horizontally
  • Image Display: Central area with no borders, maximum space utilization
  • Bottom Navigation: Image slider and index display
  • Status Bar: Min/max values and data type information

Examples

Scientific Data Visualization

import numpy as np
from image_slide import image_slide

# Simulate time series data
t = np.linspace(0, 4*np.pi, 50)
x, y = np.meshgrid(np.linspace(0, 2*np.pi, 100), np.linspace(0, 2*np.pi, 100))
time_series = np.array([np.sin(x + t[i]) * np.cos(y + t[i]) for i in range(len(t))])

image_slide(time_series, "Time Series Visualization")

Medical Imaging

# Simulate medical image stack (e.g., CT slices)
slices = np.random.random((30, 256, 256))
# Add some structure
for i, slice_img in enumerate(slices):
    slices[i] = gaussian_filter(slice_img, sigma=2)

image_slide(slices, "Medical Image Stack")

Fourier Transform Analysis

# Create test pattern and its FFT
pattern = np.sin(2*np.pi*x*3) * np.cos(2*np.pi*y*2)
fft_data = np.fft.fftshift(np.fft.fft2(pattern))

# Stack original and FFT for comparison
combined = np.array([pattern, np.abs(fft_data), np.angle(fft_data)])
image_slide(combined, "FFT Analysis")

Command Line Usage

The package is designed to be used as a Python library. Import and use the viewer in your Python scripts as shown in the examples above.

Development

Setting up Development Environment

git clone https://github.com/GyroTools/image-slide.git
cd image-slide
pip install -e ".[dev]"

Running Tests

pytest

Code Formatting

black image_slide/

Contributing

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

License

This project is licensed under the MIT License - see the LICENSE file for details.

Changelog

Version 1.0.0

  • Initial release
  • Basic image navigation and display
  • Complex array support
  • Contrast and brightness controls
  • Multiple colormap options
  • Keyboard shortcuts
  • Professional compact interface

Acknowledgments

  • Built with matplotlib for image display
  • Uses tkinter for GUI
  • Inspired by scientific image analysis workflows

Support

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

image_slide-1.0.1.tar.gz (15.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

image_slide-1.0.1-py3-none-any.whl (12.3 kB view details)

Uploaded Python 3

File details

Details for the file image_slide-1.0.1.tar.gz.

File metadata

  • Download URL: image_slide-1.0.1.tar.gz
  • Upload date:
  • Size: 15.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for image_slide-1.0.1.tar.gz
Algorithm Hash digest
SHA256 a7c893fd14b82874ed8b14d7780478e7a272fb23e8826bb8a74b5850037f24f8
MD5 8c5a31890af358c096a919056a3941fa
BLAKE2b-256 c637377d641d500297056b473fcff592d8d71543a68adbf37c5e2e6d94855bd2

See more details on using hashes here.

Provenance

The following attestation bundles were made for image_slide-1.0.1.tar.gz:

Publisher: python-publish.yml on GyroTools/image-slide

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file image_slide-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: image_slide-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 12.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for image_slide-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 938f8b9dd2f2bc000c8511a088c86681fa857cf24d55503ae7a17d55347a449d
MD5 47a621c615e4ab34a78682a8d308cdf2
BLAKE2b-256 f11c768ecb957477e8b47ebe97c0057effb085a289224c6a4fcb1216d94aa4f6

See more details on using hashes here.

Provenance

The following attestation bundles were made for image_slide-1.0.1-py3-none-any.whl:

Publisher: python-publish.yml on GyroTools/image-slide

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page