Skip to main content

CatVision - Biologically Accurate Cat Vision Filter

Python 3.8+ License: MIT

A Python package that replicates the biologically accurate vision of cats based on peer-reviewed research on feline retinal structure and visual characteristics.

Features

Biologically Accurate Cat Vision Simulation

  • 🔵 Spectral Sensitivity: Dichromatic vision with S-cone (450nm) and L-cone (556nm) peaks
  • 👁️ Vertical Slit Pupil: 3:1 aspect ratio for enhanced depth of field
  • 🌙 Rod-Dominated Vision: 25:1 rod/cone ratio for superior night vision
  • ✨ Tapetum Lucidum: 30% light reflection enhancement for low-light conditions
  • 📐 Reduced Spatial Acuity: 1/6 human acuity (3 vs 18 cycles per degree)
  • 🎬 Enhanced Temporal Processing: 55Hz flicker fusion threshold
  • 🏃 Motion Detection: 1.8x human sensitivity with horizontal bias
  • 👀 Wide Field of View: 200° horizontal × 140° vertical

Installation

From PyPI

pip install catvision

From Source

git clone https://github.com/aryashah2k/catvision.git
cd catvision
pip install -e .

Development Installation

pip install -e ".[dev]"

Quick Start

from catvision import CatVisionFilter
import cv2

# Initialize the filter
cat_filter = CatVisionFilter()

# Load an image
image = cv2.imread('input.jpg')

# Apply cat vision transformation
result = cat_filter.apply_cat_vision(image, use_biological_accuracy=True)

# Save the result
cv2.imwrite('cat_vision_output.jpg', result)

Usage Examples

Basic Image Processing

from catvision import CatVisionFilter
import cv2

# Create filter instance
cat_filter = CatVisionFilter()

# Process single image
image = cv2.imread('photo.jpg')
cat_view = cat_filter.apply_cat_vision(image)
cv2.imwrite('cat_perspective.jpg', cat_view)

Video Processing

from catvision import CatVisionFilter
import cv2

cat_filter = CatVisionFilter()

# Process video sequence
frames = []  # Your video frames
processed_frames = cat_filter.apply_cat_vision_to_sequence(
    frames, 
    fps=30,
    use_biological_accuracy=True
)

Biological Validation

from catvision import CatVisionFilter

cat_filter = CatVisionFilter()

# Validate against biological data
test_images = [...]  # Your test images
validation = cat_filter.validate_biological_accuracy(test_images)

print(f"Overall Accuracy: {validation['overall_accuracy_score']:.2%}")
print(f"Spectral Sensitivity: {validation['spectral_sensitivity_validation']:.2%}")
print(f"Spatial Acuity: {validation['spatial_acuity_validation']:.2%}")

Visualizations

from catvision import CatVisionFilter

cat_filter = CatVisionFilter()

# Generate spectral sensitivity curves
cat_filter.plot_spectral_sensitivity_curves(save_path='spectral_curves.png')

# Visualize spatial acuity map
cat_filter.visualize_spatial_acuity_map(
    image_size=(480, 640),
    save_path='acuity_map.png'
)

# Show temporal frequency response
cat_filter.demonstrate_temporal_frequency_response(save_path='temporal_response.png')

Biological Parameters

All parameters are based on peer-reviewed research:

Parameter Value Human Comparison
Pupil Shape 3:1 vertical slit Circular
Rod/Cone Ratio 25:1 20:1
S-cone Peak 450nm (blue) 420nm
L-cone Peak 556nm (green-yellow) 534nm (M), 564nm (L)
Rod Peak 498nm (blue-green) 498nm
Spatial Acuity 3 cpd ~18 cpd
Flicker Fusion 55 Hz ~24 Hz
Field of View 200°×140° 180°×135°
Tapetum Reflectance 30% enhancement None

Architecture

The package uses a modular mixin architecture:

CatVisionFilter
├── SpectralMixin (spectral.py)
│   ├── Spectral sensitivity curves
│   └── Color perception adjustments
├── SpatialMixin (spatial.py)
│   ├── Pupil kernel (vertical slit)
│   ├── Spatial acuity reduction
│   └── Field of view transformation
├── TemporalMixin (temporal.py)
│   ├── Temporal frequency processing
│   └── Flicker fusion modeling
├── MotionMixin (motion.py)
│   ├── Optical flow (Lucas-Kanade/Farneback)
│   ├── Motion enhancement
│   └── Directional sensitivity
├── LowlightMixin (lowlight.py)
│   ├── Tapetum lucidum effect
│   └── Rod dominance simulation
├── VisualizationMixin (visualization.py)
│   └── Scientific visualizations
└── ValidationMixin (validation.py)
    └── Biological accuracy validation

API Reference

Core Class

CatVisionFilter()

Main filter class that combines all cat vision characteristics.

Methods:

  • apply_cat_vision(image, previous_frame=None, kernel_size=15, use_biological_accuracy=True) - Apply complete cat vision pipeline
  • apply_cat_vision_to_sequence(frame_sequence, fps=30, use_biological_accuracy=True) - Process video sequence
  • get_filter_parameters() - Get current biological parameters
  • save_parameters(filepath) - Save parameters to JSON file
  • validate_biological_accuracy(test_images, ground_truth_data=None) - Validate filter accuracy

Visualization Methods:

  • plot_spectral_sensitivity_curves(save_path=None) - Plot photoreceptor spectral curves
  • visualize_spatial_acuity_map(image_size, save_path=None) - Show acuity distribution
  • demonstrate_temporal_frequency_response(save_path=None) - Display temporal sensitivity
  • visualize_pupil_kernel(kernel_size=15, save_path=None) - Show pupil convolution kernel

Examples

The package includes comprehensive examples in the examples/ directory:

  • basic_usage.py - Simple image processing
  • video_processing.py - Video sequence processing
  • biological_validation.py - Accuracy validation
  • visualizations.py - Generate all visualizations

Run examples:

python examples/basic_usage.py
python examples/biological_validation.py
python examples/visualizations.py

Testing

Run the test suite:

# Run all tests
pytest tests/

# Run with coverage
pytest tests/ --cov=catvision --cov-report=term-missing

# Run specific test module
pytest tests/test_spectral.py -v

Scientific Background

This implementation is based on published research on cat vision:

Key References

  1. Spectral Sensitivity: Loop et al. (1987) - "Spectral characteristics of cat retinal ganglion cells"
  2. Spatial Acuity: Blake (1979) - "The visual acuity of the cat"
  3. Temporal Processing: Pasternak & Merigan (1981) - "The luminance dependence of spatial vision in the cat"
  4. Motion Detection: Orban et al. (1986) - "Velocity selectivity in the cat visual system"
  5. Tapetum Lucidum: Ollivier et al. (2004) - "Retinal structure and light intensification"

Biological Accuracy

The filter achieves high biological accuracy through:

  • Direct implementation of measured spectral sensitivity curves
  • Frequency-domain spatial filtering based on contrast sensitivity functions
  • Temporal processing matching measured flicker fusion thresholds
  • Motion detection calibrated to behavioral measurements

Performance

  • Single Image (640×480): ~100ms (biological mode)
  • Video Frame (1080p): ~200ms per frame
  • Memory Usage: <500MB for typical workloads

Requirements

  • Python 3.8+
  • opencv-python-headless >= 4.8.0
  • numpy >= 1.24.0
  • scipy >= 1.10.0
  • matplotlib >= 3.7.0
  • Pillow >= 10.0.0

Contributing

Contributions are welcome! Please fork the Repository, create a feature branch, and submit a pull request!

Development Setup

git clone https://github.com/aryashah2k/catvision.git
cd catvision
pip install -e ".[dev]"
pytest tests/

License

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

Citation

If you use this package in your research, please cite:

@software{catvision2025,
  title={CatVision: Biologically Accurate Cat Vision Filter},
  author={Arya Shah and Vaibhav Tripathi},
  year={2025},
  url={https://github.com/aryashah2k/catvision}
}

Acknowledgments

  • Based on decades of cat vision research by neuroscientists worldwide
  • Inspired by the need for accurate animal vision simulation in research
  • Built with modern Python best practices and scientific computing tools

Contact

  • Issues: GitHub Issues
  • Email: {arya[dot]shah, vaibhav[dot]tripathi}[at]iitgn[dot]ac[dot]in

Note: This package is designed for scientific and educational purposes. For neuroscience research applications, please validate results against your specific requirements.

Release files for catvision 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for catvision 1.0.0
File Size Uploaded
catvision-1.0.0.tar.gz 39.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for catvision 1.0.0
File Interpreter ABI Platform
catvision-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size:65.5 kB

Release files / catvision-1.0.0.tar.gz

Download URL catvision-1.0.0.tar.gz
Size 39.0 kB
Tags Source
SHA-256 checksum
How to use checksums
290ac28e1260ce023f6952ca7724ef5959a6dc6799e70380c6fe6fedb151fec5
BLAKE2b-256 checksum
How to use checksums
518aeca98afe3d0a181d9eb14e45cde287927c9fd2c98feaa53cc8822bb5c300
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.5

Release files / catvision-1.0.0-py3-none-any.whl

Download URL catvision-1.0.0-py3-none-any.whl
Size 26.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b0b3fbe8010f717f420329c2b8135f681c53253fe21b520555dccb7ec438f855
BLAKE2b-256 checksum
How to use checksums
34ab743cc5aaad948a5947c9da4a3a81967f2993c5024714061365dfdf8e620d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.5

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page