news 2026/6/22 10:14:33

如何用fft npainting lama移除图片物品?详细步骤+代码实例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何用fft npainting lama移除图片物品?详细步骤+代码实例

如何用fft npainting lama移除图片物品?详细步骤+代码实例

1. 引言:图像修复技术的应用背景

在数字图像处理领域,图像修复(Image Inpainting)是一项关键任务,旨在通过算法自动填充图像中被遮挡或需要移除的区域,使修复后的图像在视觉上自然连贯。近年来,基于深度学习的图像修复方法取得了显著进展,其中LaMa(Large Mask Inpainting)因其对大范围缺失区域的优秀修复能力而受到广泛关注。

本文将围绕一个基于FFT + npainting + LaMa的二次开发项目展开,详细介绍如何使用该系统实现图像中物品的智能移除。该项目由开发者“科哥”进行WebUI封装与功能优化,极大降低了使用门槛,适合工程落地和快速应用。

本教程属于实践应用类文章,涵盖环境部署、操作流程、核心原理简析及可运行代码示例,帮助读者从零开始掌握图像修复系统的使用与扩展。


2. 系统架构与技术选型

2.1 核心技术栈解析

该项目融合了多种图像处理与深度学习技术:

  • LaMa 模型:基于傅里叶卷积(Fourier Convolution)的生成式修复网络,擅长处理大面积缺失。
  • FFT 预处理机制:利用快速傅里叶变换增强纹理结构信息,提升修复质量。
  • npainting 后处理模块:自定义后处理逻辑,用于边缘平滑与颜色校正。
  • Gradio WebUI:提供可视化交互界面,支持画笔标注、实时预览与一键修复。

2.2 为何选择此方案?

方案优势局限性
OpenCV 基于PatchMatch轻量、无需GPU仅适用于小区域修复
DALL·E 或 Stable Diffusion创造性强易引入不合理内容
LaMa (本方案)结构保持好、边缘自然需要较高算力

结论:LaMa 在保持原始图像结构一致性方面表现优异,特别适合用于水印去除、物体移除等真实场景。


3. 环境部署与服务启动

3.1 准备工作

确保服务器满足以下条件:

  • 操作系统:Linux(Ubuntu/CentOS)
  • Python 版本:3.8+
  • GPU:NVIDIA 显卡(推荐 ≥ 8GB 显存)
  • 安装依赖:CUDA、PyTorch、Gradio、OpenCV

3.2 克隆并配置项目

git clone https://github.com/kege/cv_fft_inpainting_lama.git cd cv_fft_inpainting_lama pip install -r requirements.txt

3.3 启动 WebUI 服务

执行启动脚本:

bash start_app.sh

成功启动后输出如下提示:

===================================== ✓ WebUI已启动 访问地址: http://0.0.0.0:7860 本地访问: http://127.0.0.1:7860 按 Ctrl+C 停止服务 =====================================

此时可通过浏览器访问http://<服务器IP>:7860进入图形化操作界面。


4. 图像修复操作全流程

4.1 上传待修复图像

支持三种方式上传图像:

  1. 点击上传区选择文件
  2. 拖拽图像至上传区域
  3. 复制图像后粘贴(Ctrl+V)

支持格式:PNG、JPG、JPEG、WEBP
建议分辨率不超过 2000×2000,以保证处理效率。

4.2 标注修复区域(Mask 绘制)

使用左侧工具栏中的画笔工具进行区域标注:

  • 白色区域表示需要修复的部分
  • 可调节画笔大小以适应不同尺寸目标
  • 若误标,可用橡皮擦工具清除

技巧:为避免边缘残留,建议将标注范围略大于实际需移除区域,系统会自动羽化过渡。

4.3 执行图像修复

点击"🚀 开始修复"按钮,后台将执行以下流程:

  1. 图像预处理(BGR→RGB转换、归一化)
  2. FFT 特征提取(增强频域结构信息)
  3. LaMa 模型推理(生成填补内容)
  4. npainting 后处理(颜色匹配、边缘融合)

处理时间根据图像大小通常为 5–60 秒。

4.4 查看与保存结果

修复完成后,右侧显示修复结果,并在状态栏提示:

完成!已保存至: /root/cv_fft_inpainting_lama/outputs/outputs_20260105142312.png

用户可前往该路径下载图像,或通过前端直接另存为本地文件。


5. 核心代码实现解析

5.1 图像修复主函数

以下是简化版的核心推理代码片段,位于inference.py中:

import cv2 import numpy as np import torch from models.lama import LaMaModel from utils.fft_processor import apply_fft_enhancement def inpaint_image(image_path, mask_path, output_path): # 读取图像与掩码 image = cv2.imread(image_path) mask = cv2.imread(mask_path, 0) # BGR to RGB image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # 归一化 image = image.astype(np.float32) / 255.0 mask = (mask > 128).astype(np.float32) # FFT 增强(保留高频结构) enhanced_image = apply_fft_enhancement(image, mask) # 转换为张量 image_tensor = torch.from_numpy(enhanced_image).permute(2, 0, 1).unsqueeze(0) mask_tensor = torch.from_numpy(mask).unsqueeze(0).unsqueeze(0) # 加载模型并推理 model = LaMaModel(config="config/lama.yaml") model.load_state_dict(torch.load("weights/big-lama.pt")) model.eval() with torch.no_grad(): result_tensor = model(image_tensor, mask_tensor) # 后处理 result = result_tensor.squeeze().permute(1, 2, 0).cpu().numpy() result = np.clip(result * 255, 0, 255).astype(np.uint8) # 保存结果 result_bgr = cv2.cvtColor(result, cv2.COLOR_RGB2BGR) cv2.imwrite(output_path, result_bgr) return output_path
代码说明:
  • 使用apply_fft_enhancement提升纹理连续性
  • 掩码二值化处理确保输入规范
  • 模型输出经 Clip 和类型转换后保存

5.2 FFT 增强模块实现

# utils/fft_processor.py import numpy as np def apply_fft_enhancement(image, mask): """ 利用FFT在频域增强图像结构,辅助修复 """ # 转换到频域 fft_img = np.fft.fft2(image, axes=(0, 1)) fft_shift = np.fft.fftshift(fft_img, axes=(0, 1)) # 构建低通滤波器(保留中心低频) h, w = image.shape[:2] center_h, center_w = h // 2, w // 2 Y, X = np.ogrid[:h, :w] dist_from_center = (X - center_w)**2 + (Y - center_h)**2 mask_freq = dist_from_center <= (min(h, w) // 4)**2 # 应用滤波 fft_shift_filtered = fft_shift * mask_freq[..., None] # 逆变换回空间域 fft_unshift = np.fft.ifftshift(fft_shift_filtered, axes=(0, 1)) filtered_image = np.fft.ifft2(fft_unshift, axes=(0, 1)).real # 融合原图与滤波结果(加强结构) enhanced = image * 0.7 + filtered_image * 0.3 return np.clip(enhanced, 0, 1)

作用:通过保留低频成分并抑制噪声,使修复区域更符合整体图像的频率分布特征。


6. 实际应用场景演示

6.1 场景一:去除水印

操作流程

  1. 上传带有角标水印的图片
  2. 使用中号画笔完整涂抹水印区域
  3. 点击“开始修复”
  4. 观察背景纹理是否自然延续

效果评估:对于纯色或简单纹理背景,修复效果极佳;复杂图案下可能需微调。

6.2 场景二:移除行人或车辆

挑战点

  • 目标占据较大面积
  • 背景存在透视变化

应对策略

  • 分块多次修复
  • 每次修复后重新上传中间结果
  • 结合裁剪功能聚焦局部

6.3 场景三:修复老照片划痕

优势体现

  • 小面积瑕疵可精准定位
  • LaMa 能学习周围像素模式进行合理填充
  • 支持批量处理历史影像资料

7. 使用技巧与性能优化

7.1 提高修复质量的关键技巧

  • 精确标注:避免遗漏边缘,防止出现“半修复”现象
  • 适度扩大mask:让系统有足够上下文进行推断
  • 分步修复:对多个独立区域逐个处理,避免干扰
  • 优先使用PNG:减少压缩伪影影响

7.2 性能优化建议

优化方向措施
内存占用使用FP16精度推理model.half()
推理速度启用TensorRT加速(需额外编译)
多图处理批量加载时限制并发数 ≤ 3
缓存机制对重复风格图像缓存特征

8. 常见问题与解决方案

问题原因分析解决方法
修复后颜色偏暗BGR/RGB通道错误检查色彩空间转换逻辑
边缘明显痕迹mask边界太硬扩大标注范围,启用羽化
处理卡住无响应显存不足降低图像分辨率或启用CPU fallback
输出文件未生成权限不足检查/outputs目录写权限
WebUI无法访问端口未开放配置防火墙规则放行7860端口

9. 总结

9.1 实践经验总结

本文详细介绍了基于FFT + npainting + LaMa的图像修复系统在实际项目中的部署与使用方法。通过 Gradio 封装的 WebUI 界面,非技术人员也能轻松完成图像去水印、物体移除等任务。

核心价值体现在:

  • 易用性:图形化操作,无需编程基础
  • 高质量修复:LaMa 模型保障结构完整性
  • 可扩展性强:开源代码便于二次开发

9.2 最佳实践建议

  1. 先小试再放大:首次使用建议从小图测试起,验证效果后再处理正式数据。
  2. 保留原始文件:所有操作均为不可逆修改,务必备份源图。
  3. 结合人工校验:自动修复虽强大,仍需人工检查细节合理性。

获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/14 22:35:58

Qwen2.5网页服务响应慢?GPU利用率监控与调优完整方案

Qwen2.5网页服务响应慢&#xff1f;GPU利用率监控与调优完整方案 在部署阿里开源的轻量级大语言模型 Qwen2.5-0.5B-Instruct 后&#xff0c;许多开发者反馈&#xff1a;尽管硬件配置较高&#xff08;如4NVIDIA 4090D&#xff09;&#xff0c;但在通过网页服务进行推理时仍出现…

作者头像 李华
网站建设 2026/6/18 14:17:38

PyTorch-2.x-Universal-Dev-v1.0步骤详解:如何高效进行模型微调与训练

PyTorch-2.x-Universal-Dev-v1.0步骤详解&#xff1a;如何高效进行模型微调与训练 1. 引言 随着深度学习在计算机视觉、自然语言处理等领域的广泛应用&#xff0c;构建一个稳定、高效且开箱即用的开发环境成为提升研发效率的关键。PyTorch-2.x-Universal-Dev-v1.0 正是为此而…

作者头像 李华
网站建设 2026/6/15 10:57:28

SAM 3与YOLOv8对比:分割任务实战评测

SAM 3与YOLOv8对比&#xff1a;分割任务实战评测 1. 引言 1.1 分割任务的技术演进背景 图像与视频中的对象分割是计算机视觉领域的核心任务之一&#xff0c;广泛应用于自动驾驶、医学影像分析、智能监控和增强现实等场景。传统方法依赖大量标注数据进行监督学习&#xff0c;…

作者头像 李华
网站建设 2026/6/17 16:33:24

SAM3大模型镜像发布|英文提示词精准分割任意物体

SAM3大模型镜像发布&#xff5c;英文提示词精准分割任意物体 1. 技术背景与核心价值 图像分割作为计算机视觉的核心任务之一&#xff0c;长期以来依赖于大量标注数据和特定场景的模型训练。传统方法如U-Net、Mask R-CNN等虽在特定任务中表现优异&#xff0c;但泛化能力有限&a…

作者头像 李华
网站建设 2026/6/10 14:04:26

GTE中文语义相似度服务性能测试:准确率提升

GTE中文语义相似度服务性能测试&#xff1a;准确率提升 1. 引言 随着自然语言处理技术的不断演进&#xff0c;语义相似度计算已成为信息检索、问答系统、文本去重等场景中的核心能力。传统的关键词匹配方法难以捕捉句子间的深层语义关联&#xff0c;而基于预训练模型的向量表…

作者头像 李华
网站建设 2026/6/14 20:36:56

通义千问2.5 vs 文心一言:指令遵循能力实战评测

通义千问2.5 vs 文心一言&#xff1a;指令遵循能力实战评测 1. 背景与评测目标 随着大语言模型在企业服务、智能助手和自动化内容生成等场景的广泛应用&#xff0c;指令遵循能力已成为衡量模型实用性的重要指标。一个优秀的语言模型不仅要具备广泛的知识覆盖和流畅的语言生成…

作者头像 李华