image - 如何使用 GIMP 防止色带?
问题描述
只需在 python GIMP 中做一个简单的 bump_map 操作。但结果有色带!
import os, glob, sys, time
from gimpfu import *
image = pdb.gimp_file_load(img_path, img_path, run_mode=RUN_NONINTERACTIVE)
gray = pdb.gimp_file_load(gray_path, gray_path, run_mode=RUN_NONINTERACTIVE)
pdb.plug_in_bump_map(image, image.active_layer, gray.active_layer,
135.0, 20.00, 30, 0, 0, 0.0, 0.0, 1, 0, 0)
pdb.file_png_save_defaults(image, image.active_layer, out_path, out_path)
如果我删除“plug_in_bump_map”操作,我保存的最终结果中没有色带。如果我对灰度图像应用高斯模糊,最终结果中的色带会消失,但会留下不希望的模糊,我该怎么办?所有图像均为PNG。
解决方案
好的,所以它是条带:)
但是如果你仔细观察,你会发现条纹已经在你的凹凸贴图中,并且是不可避免的,因为你的 PNG 中只有 256 个级别。
当两个均匀区域之间的值发生显着变化且它们之间具有某种线性边界时,就会出现条带化。所以这两个缓解措施是
- 在边界周围传播变化:
- 更高精度的图像,因此变化可以小于 1/256
- 模糊图像
- 使边界与眼睛非线性(传播噪声)
- 抖动,两者都有一点作用,因为它引入了中间值,但随机放置它们。
解决问题的最佳方法是在源头上,因此,如果 openCV 可以计算超过 256 个级别,请执行此操作并以某种高位深度格式导出凹凸图(16 位/通道 PNG 就足够了,否则为 TIFF)。
否则,如果您必须从 8 位凹凸贴图开始:
- 在 Gimp 中加载
- 转换为高精度(32bit FP 线性)
- 如果您查看此时的直方图,您仍然只有 256 个值:
- 然后,您可以使用 RGB 噪声过滤器添加“抖动”以扩展值以填补空白。最好使用直方图对话框来完成,并提高值直到“梳子”结构几乎消失:
- 您还可以使用传播噪声来稍微“摇动像素”(2-3px),这样过渡的线性度就会降低,因此不太明显:
- 然后,您可以应用凹凸贴图。你用条带换取一点颗粒感:
- 您可以使用中值模糊来减少颗粒感,而不必使用会使图像失去太多清晰度的值。
也可以用选择性高斯模糊代替步骤 4 和 5。
编辑:尝试了您的 16bpc:
- 提升到 32bit FP 线性
- 应用凹凸贴图而不进行预处理
“本机”结果已经好多了:
它可以通过以下方式改进:
- 阈值为 0 的“flats”颜色的颜色选择
- 选择性高斯模糊
推荐阅读
- python - 如何重新安装损坏的 pip?
- php - Laravel - 可重用的资源控制器
- c# - 如何在与 Web API 通信的 ASP.NET Core MVC 应用程序中使用自定义身份验证/授权?
- ios - 在显示的自定义视图中在哪里调用动画
- python - django 异常:未找到带有关键字参数“{'pk':''}' 的“comment_new”的反向
- scala - Spark中自定义对象的RDD问题
- javascript - 在我的网页上加载广告后,航点偏移不再正确
- eclipse - Data Studio 中的 sshd 连接失败
- android - 使用介绍滑块滑动时动画错误
- oracle-sqldeveloper - SQL Developer:每次查询后重置与 12c 数据库的连接