Unity Shader PostProcessing - 2 - 边缘检测

news/2024/7/5 10:03:59

边缘检测的算法有很多种

这里介绍的是其中的一部分

  • Sobel
  • Prewitt
  • Robert
  • Line

在这里插入图片描述
这些卷积核,都是final g越大,越可能是边缘

  • Sobel
    在这里插入图片描述
    (-1,1), (0,1), (1,1)与(-1,-1),(0,-1),(1,-1)的亮度差距越大,特别是左右、上下的差异越大,则final g越大

  • Robert
    在这里插入图片描述
    uv_offset(0,1)与uv_offset(1,0)的亮度差距越大,则final g越大

  • Prewitt
    在这里插入图片描述
    (-1,1), (0,1), (1,1)与(-1,-1),(0,-1),(1,-1)的亮度差距越大,则final g越大

  • Line
    在这里插入图片描述
    Line的方式如果水平的上下差异越大、或是,垂直的左右差异越大,则final g越大
    (注意line会更多的是本像素的一排x3一列x3的像素与上下,左右的来梯度差异,个人觉得这种会比较好,但是运算会比其他的多一些)

运行效果

Sobel

在这里插入图片描述

Prewitt

在这里插入图片描述

Roberts

在这里插入图片描述

Line

在这里插入图片描述

看看远一些(像素小一些)的效果

  • Sobel
    在这里插入图片描述
  • Prewitt
    在这里插入图片描述
  • Roberts
    在这里插入图片描述
  • Line
    在这里插入图片描述

可以看出Roberts、Line在处理像素临近的亮度(差异放大)放大后,效果比前两个号一些。
因为图像尺寸缩小,原本的梯度会比较平滑,但缩小后图像失真,原本比较平滑的会因失真后把梯度变大。

总结

  • 图像边缘检测缺点
    • 边缘附近的亮度相近的话,会有很多误差,导致很多不应该为边缘的,却判定为边缘,或是应该是边缘的,却没有判定为边缘

下次我们使用后处理的深度+法线来判定

References

  • Feature Detectors
  • Unity Shader入门教程(十八):卷积与边缘检测

http://www.niftyadmin.cn/n/2525434.html

相关文章

switch表达式类型

switch表达式类型 一般格式: switch (表达式) { case 常量标号1:语句序列1; break; case 常量标号2:语句序列2; break; … case 常量标号n:语句序列n; break; default: 语句S; &…

iOS开发系列之运动事件

前面我们主要介绍了触摸事件以及由触摸事件引出的手势识别,下面我们简单介绍一下运动事件。在iOS中和运动相关的有三个事件:开始运动、结束运动、取消运动。 监听运动事件对于UI控件有个前提就是监听对象必须是第一响应者(对于UIViewController视图控制器…

C语言 side effect 和 sequence point

C语言 side effect 和 sequence point 2011-09-18 16:16 126人阅读 评论(0) 收藏 举报语言cobject编译器functionfileC 语言中,术语副作用(side effect)是指对数据对象或者文件的修改。例如,以下语句 var 99;的副作用是把…

L3-005. 垃圾箱分布

L3-005. 垃圾箱分布 题目链接:https://www.patest.cn/contests/gplt/L3-005 Dijstra 与L2-001.紧急救援类似,是Dijstra最短路的拓展,要注意排序是按照: 1.到所有居民点的最小距离的最大; 2.平均距离最短; 3…

java-对象的理解-对象在内存的存储

String str; 这段代码表示创建一个名叫str的String类型的reference。 这个reference保存在栈stack中,速度很快,但它并没有保存词或者句子的数据,它仅仅是目标数据的一个指向。 如果此时向str发送一个消息,就会返回一个运行时错误&…

怎么设置自定义Tabbar的文字大小 -------ios

系统默认的tabbar感觉好小,很丑,于是得自己来设置它的大小 我们需要在 (void)load 或者在 (void)initialize 里设置 那这两个方法有什么区别呢 可以看这里 :(转载)http://www.jianshu.com/p/9368ce9bb8f9 我们在这里…

删除两个双向循环链表的相同节点

删除两个双向循环链表的相同节点 分类: Data Structure 面试题集2011-09-23 12:37 1242人阅读 评论(1) 收藏 举报nulldeletestructsystemc有两个双向循环链表A,B,知道其头指针为:pHeadA,pHeadB,请写一个函数…

Unity Shader - Simple Toon Shading - 简单卡通渲染

文章目录最终效果 - Final Effect无光照,只有纹理与主色调Shader加描边 - OutlineGIFShader添加光影 - RecieveShadow自身接收阴影Shader调整阴影 - Adjusting Shadow ParamsShader无透视法线挤出描边Shader整体运行效果高光 - SpecularShader边缘光 - RimShader控制…