【问题标题】:Cement Effect - Artistic Effect水泥效果 - 艺术效果
【发布时间】:2011-01-04 13:49:58
【问题描述】:

我希望给图像一个效果,生成的图像看起来好像是在粗糙的胶合背景上绘制的,胶合背景在边缘附近自定义自身以突出它们...请帮助我写一个算法来产生这样的效果。 第一张图是原图

第二张图片是我正在寻找的输出。

请注意边缘被检测到,并且掩码在边缘附近发生变化以清楚地指示边缘

【问题讨论】:

    标签: c++ c algorithm graphics image-processing


    【解决方案1】:

    您需要阅读Bump Mapping。有很多凹凸贴图algorithms

    基本算法是:

    每个像素

    1. 在凹凸贴图纹理上查找与凹凸图像上的位置相对应的位置。
    2. 计算凹凸贴图的表面normal
    3. 将第 2 步中的表面法线添加到几何表面法线(在图像的情况下,它是一个向上的矢量),以便法线指向新的方向。
    4. 计算新的“凹凸不平”表面与场景中灯光的相互作用,例如使用 Phong 着色 - 灯光位置由您决定,并决定阴影的位置。

    最后,这是一个用于 2D 图像的plain C implementation

    【讨论】:

    • 我已经尝试过凹凸贴图合成。但问题是水泥蒙版会以这样一种方式自我调整,以至于它似乎突出了边缘。我的意思是水泥蒙版会动态变化以反映原始图像中的边缘。请仔细参考输出/结果图像。圆形和花状形状边缘的水泥蒙版经过调整,使其似乎已检测到边缘并突出显示它们。
    • @megha:就去做吧。在应用凹凸贴图之前,只需更改水泥蒙版以反映原始图像中的边缘。
    • @megha 看起来像绘图的亮度用于修改凹凸贴图,方法是随着亮度降低(或类似的东西)减少法线的 z 分量。
    【解决方案2】:

    从 1) 输入图像为 R、G、B 和 2) 一张纹理图,灰度图。

    图像可能以字节为单位,从 0 到 255。将其除以 255.0,因此我们将它们设为 0.0 到 1.0。这使数学更容易。为了性能,您实际上不会这样做,而是使用聪明的定点数学,我留给您一个实现问题。

    首先,要获得不同颜色区域之间的边缘效果,请在纹理图像中添加或减去部分 R、G 和 B 通道:

    texture_mod = texture - 0.2*R - 0.3*B
    

    您可以使用非线性论坛变得更有趣,例如阈值化 R、G 和 B 通道,或计算一些涉及它们的数学表达式。尝试这总是很有趣;我不确定什么最适合重新创建您的示例。

    接下来,计算纹理模型的浮雕版本以创建照明效果。这是纹理向上和向右滑动一个像素(或者你喜欢多少)的差异,以及相同的纹理滑动。这给出了 3D 照明效果。

    emboss =  shift(texture_mod, 1,1) - shift(texture_mod, -1, -1)
    

    (这个公式是用texture_mod还是原来的纹理数据?实验看看。)

    这是电源步骤。将输入图像转换为 HSV 空间。 (LAB 或其他色彩空间可能效果更好,也可能效果不佳 - 实验并查看。)请注意,在您想要的最终图像中,“台面”之间的裂缝更暗,因此我们将使用原始的 texture_mod 和浮雕差异来改变 V通道,带有控制效果强度的系数:

    Vmod = V * ( 1.0 + C_depth * texture_mod + C_light * emboss)
    

    C_depth 和 C_light 都应该在 0 和 1 之间,可能是更小的分数,例如 0.2 到 0.5 左右。您将需要一个软糖因子来防止 Vmod 溢出或限制在最大值 - 除以 (1+C_depth+C_light)。在亮端进行一些钳位可能有助于高光看起来更亮。像往常一样尝试并查看...

    作为一个要点,您还可以通过某种方式修改饱和度通道,也许在 texture_mod 较低的地方减少它。

    最后,将 (H, S, Vmod) 转换回 RGB 颜色空间。

    如果内存紧张或性能很关键,您可以跳过 HSV 转换,而是将 Vmod 公式应用于各个 R、G、B 通道,但这会导致色调和饱和度发生变化。这是速度和美观之间的权衡。

    【讨论】:

      【解决方案3】:

      这称为凹凸映射。它用于为表面提供非平面外观。

      【讨论】:

      • 我已经应用了凹凸贴图..但是请看边缘..这就是我卡住的地方
      猜你喜欢
      • 1970-01-01
      • 2014-11-17
      • 1970-01-01
      • 2016-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-30
      • 1970-01-01
      相关资源
      最近更新 更多