一个把图片 / PNG 序列 / 视频转换为 MagicEye 立体视错觉图(Autostereogram) 的桌面工具,UI 借鉴 X (Twitter) 的暗色极简风。
- 导入 单张图片、PNG 序列文件夹、或 视频文件 (mp4 / mov / avi…)。
- AI 深度估计 (MiDaS-small ONNX) —— 普通彩色照片一键转深度图,立刻可用作魔眼源。
- 实时调节 深度强度 / 平滑 / 反转 / 图样宽度 / 图样类型。
- 内置图样:彩色随机点、柔和马卡龙、黑白随机点、几何方块、自定义贴图。
- 「源图 / 深度图」一键切换查看,方便调整效果。
- 转换完成后 直接在程序里预览,序列/视频可 播放动画。
- 一键 导出 单张 PNG、PNG 序列、或合成 MP4。
python -m venv .venv
.venv\Scripts\activate # Windows PowerShell
pip install -r requirements.txt
numba是可选加速依赖,没装也能运行(速度会慢一些)。
python main.pyMagicEye 图实际上是 Autostereogram(自动立体图),原理:
- 把输入图片当成 深度图(亮 = 近,暗 = 远,或反之)。
- 用一段重复的随机图样填充画面,水平错位距离 = 深度 决定的视差。
- 双眼放松对焦穿透画面时,大脑会还原 3D 形状。
观看技巧:盯着屏幕中心,让眼睛逐渐放松、像看远处一样,不要追焦像素,几秒后立体形状会浮现。
普通照片直接当深度图效果不佳,因为亮度并不等于距离。本程序内置三档可选模型:
| 模型 | 体积 | CPU 单帧 | 细节 | 适用 |
|---|---|---|---|---|
| MiDaS Small (v2.1) | 67 MB | ~0.3 s | 一团朦胧 | 快速预览、批量动画 |
| Depth Anything V2 Small(默认) | 99 MB | ~0.8 s | 能识别五官、发丝 | 推荐 |
| Depth Anything V2 Base | 389 MB | ~5–10 s | 最锐利 | 单张精修 |
工作机制:
- 模型在「深度」面板的下拉菜单里切换,第一次使用时自动从 GitHub Releases / HuggingFace 下载到
~/.cache/magiceye/,进度条同步显示。 - DAv2 走 保持长宽比 的预处理(短边 = 518,贴齐 14 倍),细节远胜方形拉伸。
- 估计出的深度按帧缓存:调节图样、强度、平滑等参数 不会重复推理。
- 「查看深度」按钮可一键切到深度视图,直观判断模型识别效果。
- 想换模型?只切换下拉菜单即可,缓存会自动失效重算。
核心采用 Thimbleby–Inglis–Witten autostereogram 算法(行内链表回溯):
shift = pattern_w * (1 - amp * depth[y, x])
out[y, x] = out[y, x - shift] if x >= shift
out[y, x] = pattern[y % ph, x % pw] otherwise
为了实时预览,使用 numba @njit(parallel=True) 把外层按行并行;没有 numba 时退化为纯 NumPy 版本。
