- Implemented viewport.py for handling 3D view projections, gestures, and overlay drawing. - Created refine_image_selection.py to manage the refinement of gesture masks and output image bounds. - Added selection module with refine_selection.py to process and crop images based on alpha channel visibility. - Introduced __init__.py for selection module to expose refine_selection function.
41 lines
1.8 KiB
Markdown
41 lines
1.8 KiB
Markdown
# Perspective Tool
|
||
|
||
Perspective Tool 从图片上的四个角点建立透视四边形,把其中内容重采样为指定宽高比的矩形并写回当前 Image Empty。
|
||
|
||
## 执行过程
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
Click["点击四个角点"] --> Quad["规范为凸四边形"]
|
||
Quad --> Preview["生成 512 × 512 预览"]
|
||
Preview --> Ratio["调整目标宽高比"]
|
||
Ratio --> Size["计算受限输出尺寸"]
|
||
Size --> Warp["全分辨率 Homography"]
|
||
Warp --> Crop["按可见 Alpha 紧裁切"]
|
||
Crop --> Write["Pack 并写回 Empty"]
|
||
```
|
||
|
||
第四点确认后生成预览,拖动鼠标调整目标宽高比,用户确认后执行全分辨率 Warp。整个流程在 Blender 进程内完成。
|
||
|
||
## 节点说明
|
||
|
||
### 采集并规范四个角点
|
||
|
||
`operators/perspective_tool/__init__.py` 导出注册类型,交互和计算集中在 `edit_perspective.py`。`ImagePerspectiveTool` 启动 `EditImagePerspective`,后者接受任意顺序的四个图片角点,再根据源图 X/Y 方向整理成不交错的凸 Quad。
|
||
|
||
图片坐标投射和首次点击选择复用 `common/viewport.py`。四个角点在该流程中统一表示为 Quad。
|
||
|
||
### 预览并调整比例
|
||
|
||
第四点确定后,`edit_perspective.py` 创建 512 × 512 预览纹理。鼠标移动更新目标宽高比和 HUD,并可吸附到常用比例。
|
||
|
||
输出尺寸根据 Quad 边长和目标比例计算,最长边不超过 8192 px,总像素不超过 16,777,216。
|
||
|
||
### 执行 Homography
|
||
|
||
确认后,`edit_perspective.py` 计算 Homography,并按 256 行分块处理全分辨率像素。插值使用预乘 Alpha,避免透明边缘混入黑色。
|
||
|
||
### 裁切并写回
|
||
|
||
Warp 结果按可见 Alpha 紧裁切,再通过 `common/image.py` 创建 Packed Image 并替换当前 Empty。写回时保持中心和覆盖尺度近似一致。
|