首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >控制Sobel边厚

控制Sobel边厚
EN

Computer Graphics用户
提问于 2016-05-30 12:43:29
回答 1查看 1.5K关注 0票数 5

我用一个Sobel过滤器在着色器中画一个轮廓。我怎么控制它的厚度?这是我的大纲代码:

代码语言:javascript
复制
float3x3 Kx = {
-1, 0, 1,
-2, 0, 2,
-1, 0, 1};

float3x3 Ky = {
1, 2, 1,
0, 0, 0,
-1,-2,-1};

float Lx = 0;
float Ly = 0;    

for (int y = -1; y <= 1; ++y) {
    for (int x = -1; x<= 1; ++x) {
        float2 offset = float2( x, y );
        float3 tex = tex2D(sampler, uv + offset).rgb;
        float luminance = dot(tex, float3(0.3, 0.59, 0.11));

        Lx += luminance * Kx[y+1][x+1];
        Ly += luminance * Ky[y+1][x+1];
    }
}
float color = sqrt(Lx*Lx + Ly*Ly);
return float4( color, color, color, color );
EN

回答 1

Computer Graphics用户

回答已采纳

发布于 2016-05-31 04:50:41

我过去做过两种不同的方法:

  1. 在运行Sobel操作符之前,在图像上应用预模糊。这将有副作用,消除任何噪音比模糊的内核,但它也将加厚的线条,你最终画。
  2. 应用后处理,通过在每一点(即边缘)上冲压形状,或者使用某种膨胀过程来使线条变厚。
票数 4
EN
页面原文内容由Computer Graphics提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://computergraphics.stackexchange.com/questions/2529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档