码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Unity边缘检测的数学原理和shader实现


    最近一直研究基于灰度的边缘检测,搜索了好多博客文章,发现没有对Sobel算子解释的非常清晰明了的,对于我这种数学控,细节控,实在是无法忍受,所以索性自己查阅数学资料,研究一番,花了一周时间终于搞清楚了所有的困惑,分享给大家。这篇文章非常长,分成3个部分:实现原理,代码部分,数学部分,大家可以根据需要查看,如果能从头到尾啃完,相信一定有巨大收获!由于我不想把所有数学公式再打一遍了,所以直接上图了,请谅解

    目录

    1.实现原理

    1-1.边缘检测的原理

    1-2.像素的梯度

    1-3.思路总结

     1-4.像素的梯度

     1-5. 曼哈顿距离(Manhattan Distance )

    2.Shader实现

    2-1.思路

     2-2.C#部分

    2-3.Shader部分

    3.数学部分

    a.导数定义

     b.线性近似

    c.两个变量时的近似

    d.两个变量的链式求导

     e.方向导数

     f.梯度(Gradient)

     g.梯度的坐标系变换

     4.参考文献


    1.实现原理

    1-1.边缘检测的原理

    图像由像素点组成的,在像素点的灰度变化剧烈的地方就可以被当作是边缘.

    a.比较灰度

           像素点一般来说可以有三种颜色表示,RGB,单独比较任何以中颜色,都不能表达图像某区域的变化.所以要比较灰度.

    b.单像素点的最大变化值

    每个像素点的灰度变化,是和周围像素点比较的结果,而且这个比较是有方向的.  某个方向也许变化不大,另一个方向变化或许很大.  必须选取变化最大的一个方向的数值,这个数值才有资格代表这个像素点的变化率. 从数学角度来说,灰度在某个方向的变化率,其实就是灰度在某个方向上的方向导数.  那么哪个方向的方向导数最大呢,是梯度的方向(注意,梯度是个向量),并且这个最大方向导数的绝对值,也就是最大的变化率的绝对值,等于梯度的模.

    c.选出边缘

    每个像素点的最大变化率都求出后,我们可以根据自己设定的阈值,进行筛选,得到最终的边缘.或者是按照这个变化率绝对值的大小,按照比例绘制粗细不同,颜色深浅不同的边缘轮廓.

    1-2.像素的梯度

    具体的梯度公式和方向导数的推导证明请参考最后的“数学部分”,此处我们直接开始讨论像素的梯度计算.

  • 相关阅读:
    【FPGA】Verilog:实现 RS 触发器 | Flip-Flop | 使用 NOR 的 RS 触发器 | 使用 NAND 的 RS 触发器
    3D成像技术概述
    5方面认识LED透明屏显示屏 生产|原理|技术|应用
    携手低代码平台公司,创造高效率办公!
    【云原生 | 从零开始学Kubernetes】二、使用kubeadm搭建K8S集群
    亚马逊添加购物车和收藏有什么区别
    同步与异步区别
    8年测试老鸟总结,APP自动化测试思路整理,跟着步骤快速撸码...
    SpringBoot学习11 - Spring-Aop(常用的切点表达式关键字Demo讲解演示)
    基于ubuntu1604的ROS安装
  • 原文地址:https://blog.csdn.net/konglingbin66/article/details/127566944
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号