软件工程师招聘信息网站威海房地产网站建设

张小明 2026/1/9 6:50:07
软件工程师招聘信息网站,威海房地产网站建设,做企业网站模板可以seo,安徽省建设厅官方网站各处室边缘检测方面传统的算法中最为经典的就是Canny算法#xff0c;但是标准的Canny是不具有亚像素精度的#xff0c;而且得到的结果是一堆离散的边缘点#xff0c;提取亚像素的方式有很多种#xff0c;这个在网络上还有一些资料#xff0c;而如何将离散点链接成一根一根的线条…边缘检测方面传统的算法中最为经典的就是Canny算法但是标准的Canny是不具有亚像素精度的而且得到的结果是一堆离散的边缘点提取亚像素的方式有很多种这个在网络上还有一些资料而如何将离散点链接成一根一根的线条我一直没有什么思路最近偶然又有朋友给我推荐了一片文章A Sub-Pixel Edge Detector an Implementation of the Canny /Devernay Algorithm及其配套的代码终于完了我这个梦相关论文及代码可以从http://www.ipol.im/pub/art/2017/216/下载和查看。后面仔细看了看这个配套的代码应该说其实在四五年前我就下载过只是当时感觉好复杂就没有信心一直看下去没想到原来那个就是答案所以有的时候坚持还真的很重要。这篇文章提出了自己的一个亚像素边缘检测思路同时也提供了把这些边缘点链接为线条的方法其边缘检测的算法呢我认为一般般应该说还是没有Canny好吧。这里稍微做点介绍。一、Canny /Devernay边缘检测1、计算图像的梯度值X方向梯度、Y方向梯度以及梯度幅值这个可以用一阶中心差分或者二阶中心差分。这个过程伪代码如下所示这里使用的是一阶差分image一般情况下在进行差分前需要进行下小尺度的高斯模糊以便减少噪音的干扰。注意在计算X及Y方向梯度时需要注意统一一下计算的方向及要遵循从左到右以及从上到下这样一致性。2、根据梯度值的特性来初步确定边缘的候选点并计算其亚像素位置。具体来说当我们完成了第一步的梯度计算后对于每一个点当其梯度幅值比左右两侧的点都大时我们认为其是水平边缘点当其梯度幅值比上下不部位都大时我们认为其是垂直边缘点当然也可能出现一个点其梯度幅值比上下左右都大这个时候我们还是认为其是水平边缘点。如果不满足这两个条件中的任何一个则不是边缘点。通过上面的原则选择了边缘点后因为这个位置肯定是水平或者垂直方向的最大值所以呢我们通过领域三个点的二次方插值可以得到一个局部的最大值如下面这个曲线所示imageη的坐标即是获取的新的亚像素的边缘点坐标而且从理论分析可知其和B点的偏差不会大于0.5位置。η的坐标可用下面的公式计算image相关的伪代码如下图所示image注意这里有一个问题即所获取的亚像素精度只有一个方向的也就是说如果X方向是亚像素的那么Y方向就是非亚像素如果Y方向是亚像素的那么X方向就是非亚像素。这个是不完美的。如果不考虑后续的链接成线条的过程那么下一步就可以直接使用类似于Canny中的双阀值滞后边界跟踪算法了。 但是论文里是先介绍了链接成线的过程。因此我们后面再同步说下这个事情。二、离散点链接成线条1、边缘点链接要把离散点链接为线条首先要把所有点按照一定的规则链接起来这个链接的规则比较重要。在没有任何附件条件下一堆离散点要连接起来一般来说就是要和最邻近的点相连这个可以用欧式距离来评判。但是这种原始方案对于边缘检测后的特征来说过于简单了因为边缘本身还有一定的特性通常情况下我们不但要考虑两个点的距离还要考虑两个点的梯度方向等因素因此我们制定了以下原则1、首先两个点要必须都是有效的边缘点。2、第二两个点的梯度方向必须一致所谓的一致其实是指两个点的梯度方向必须在位于连接两个点的直线的同一侧。image image如上左图所示A和B是两个边缘点由于A和B两个的梯度方向分别位于直线AB的左侧和右侧即他们不同边所以这两个点不能相链接得分为0因为他们不同边说明图像在这两个位置的变化趋势不同他们就属于不同性质的点所以不连接起来。而右图A和B梯度指向同一边因此我们认为他们性质相同可以链接。这是在论文配套的代码里的说法而论文里则是说A和B处梯度的方向夹角要小于90度这个似乎也不怎么影响。对于由两点A(x1,y1)和B(x2,y2)定义的直线要判断点C(x,y)的位置则步骤如下计算叉积 S (x2 - x1)*(y - y1) - (y2 - y1)(x - x1)然后根据符号判断位置若S 0,则点在直线的左侧相对于从A到B的方向)若S 0,则点在直线的右侧.若S 0,则点在直线上。所以如果要求两个点必须在直线的同一侧那么要么都在左侧要么都在右侧所以即要求两个点的S要么同时为正要么同时为负即两者相乘为正则可。另外我们可以规定如果点在直线的左边表示像素点的梯度方向为‌前链式传播‌forward chaining即边缘延伸方向与图像扫描方向一致如果在右边则表示‌向后链式传播‌backward chaining即边缘延伸方向与扫描方向相反这个规定不是强制性的也可以反过来。为什么要有这个规定呢因为一根线条如果从一端到另外一端相邻的各点之间梯度方向都是要位于他们之间连线的同一侧的这样线条才能很明确的作为两个不同性质区域之间的分界线而不是某两个点符合这个要求。对于每一个点我们不确定其在线条中是处于前链式中还是后链式中。对于每个点我们都要计算其最佳的前链式点以及后链式点。注意当B是A的前链式点时对应的A就是B的反链式点。每个点周边可能存在多个符合条件的可链接点而某一个点最多只能有一个前链点和一个后链点因此必须设计出合适的得分评价体系。当两个点确定可链接后如果判断属于前链式点则用距离的倒数表示前链式的得分值即距离越大得分越低而属于反向链式我们则用距离的倒数取反来计量得分此时则得分数值越小越属于最佳反向链接点。为什么要设计这样的方式呢很明显是为了区分前链和后链。在具体的实践中我们一般取计算点周边一定领域的像素来寻找前链和后链通常3*3就可以了但是考虑到噪音的影响把范围扩大到5*5领域更为合理。当我们在搜索范围内找到一个符合初步提条件的前链点B时需要判断A点是不是在之前的搜索过程中已经有了一个前链点或者B点也已经有了一个后链点如果有其中之一的情况发生我们都需要确认新搜索到的距离是否比之前的更短如果更短则原先的链接被切断而新的链接被加入。同样如果是B是后链点也存在类似的情况。这种处理方式也存在一定的瑕疵即搜索顺序对结果有一定的影响即结果并不是唯一的而目前似乎也没有什么特别理想的解决方案现有的处理流程对大部分结果也是可以接受的。 具体可以看下论文的有关描述。该部分的相关伪代码如下所示image贴一部分我整理后的代码image2、根据链接的信息提取每根完整的线条当获得了每个点的前后链接信息后我们就可以从中提取出每个独立的线条信息了。这里的大概流程如下按先行后列的方式依次扫描图像中的每一个点当遇到一个边缘点时做如下处理沿着这个边缘的后链式方向寻找找到最后一个后链式点这个过程在原始的代码中非常的巧妙用了一句表面上看上去不含任何循环体的for语句for (I Index; (J Prev[I]) 0 J ! Index; I J);Index表示当前点的位置从这个位置开始如果Prev[I]大于等于0则说明I这个位置有后链点并且这个点不是当前点因为可能有闭合曲线则把I赋值为Prev[I]进入到下一个点直到没有后链点了。当找到第一个后链点则获得了曲线的起点然后在按照前链点的坐标依次向曲线的重点寻转直到找到最后一个前链点。每找到一根曲线相应的数据中就增加一些信息这样就能获取到边缘中的所有曲线了。三、双阀值滞后边界跟踪前面提到论文里的边缘后续还要进行双阀值滞后边界跟踪算法特别是滞后边界跟踪在传统的Canny里是通过8领域区域生长之类的算法完成的而如果前期已经进行了边缘点链接则这个过程就变得非常自然了。这个过程如下所述我们定义一个图像大小的标记变量先都设置为0然后按先行后列的方式依次扫描图像中的每一个点当遇到一个边缘点时做如下处理如果这个边缘点的梯度大于高阈值且对应的标记为0则把标记修改为1同时从这个点的位置开始首先沿着前链点方向依次搜索如果搜素到的前链点处的梯度幅值小于底阈值则停止循环同时把此时的搜索位置的前链点和后链点复位。如果梯度幅值大于低阈值则标记把对应位置的标记设置为1这样下次遇到这个点就不用处理了。然后在按照后链点的方向依次搜索和前链点做同样的处理。这样做在一个流程里把双阀值及滞后边界跟踪算法同时完成这是因为通过前面的链接点编码已经保证了相互链接之间的点的领域相连性而无需使用区域生长之类的算法了相当于是水到渠成的事情了。注意在处理完成最后还要有个额外的全图搜索处理过程即把那些是边缘点且标记依旧为0的点的链接信息复位这是因为前面的处理对于那些梯度幅值小于低阈值的部分可能没有完全处理到的。这部分的伪代码如下图所示image四、相关讨论论文的配套的代码其实是比较慢的因为把点链接起来是个较为耗时的过程这里提出一个方案我们可以提前进行阈值的处理特别是在进行链接点之前我们就进行低阈值的判断这样就可以筛选掉不少点有利于后续速度提高。但是实测呢这样得到的结果和原始流程的结果不太一致我想这个应该是和前面讲的链接的不唯一性有一定的关系。但是影响不是很大。为了对曲线的结果可视化我们用不同颜色显示不同的线条这里贴出两个结果图供参考imageimage我们把第二个图的局部结果放大查看image这里有几个相交的线条算法完美的把他们分开为不同的线条。这里想到了一些简单的应用比如把一些小的毛刺给去除掉即线段长度小于某个数值则删除这个边缘等等。五、基于Canny的亚像素边缘检测和线条提取当我们通过标准的Canny边缘检测获取了整数的边缘坐标后也是可以进一步扩展为亚像素坐标的在steger的an Unbiased Detector of Curvilinear Structures一文中通过Facet Model method模型引入了相关汉森矩阵的特征值等信息结合3*3领域相关的梯度幅值数据有效的获取了X和Y方向的亚像素坐标数据注意这里不是单独X或Y方向亚像素了。这样在结合前面的线条提取等技术就可以完成Canny算法的后续扩展而且Canny本身速度是非常快的且已经进行了双阀值滞后边界跟踪因此提取出的边界点相对来说是比较少的了后续的曲线链接和提取的计算量下降的比较厉害因此扩展的耗时也是可控的。imageimageimage从以上几图可以明显的看到无论在精度还是展示效果上扩展的Canny都有着不错的结果而目前几乎所有的成熟的商业软件中显示边界时都是提取程曲线显示而不是简单的显示为点这不仅仅看上去更为高端实际也能获取更多的手段对检测的结果进行进一步的提取和挖掘。实际上在编写这方面的程序时还有很多的细节比如很多亚像素提取的代码都把边界偏移限制在0.5即如果识别到的亚像素大于0.5则不做亚像素处理实际上这个值可能要放大到0.6甚至0.8这样才能保证处理后的边界连接起来才足够平滑。这一点在steger的有关论文里也有提及。我这里提供两个DEMO供大家测试一个是直接显示Canny亚像素及曲线提取的结果一个是放大显示结果注意由于我没有做动态的放大图像流程因此这个DEMO的输入图像不要大于500*500。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

大连商城网站制作《网站建设》期末考试

一、引子:从“打字工”到“AI 驯兽师”2022 年,一个新职业横空出世——Prompt 工程师。 他们靠着一行行看似神秘的咒语,将 ChatGPT、Stable Diffusion、Claude 调教得像现代版的炼金术士。他们不是码农,却能让 AI 写代码&#xff…

张小明 2026/1/4 22:03:30 网站建设

申请一个网站需要多少钱网站空间 上传程序

OS.js实战指南:从零构建现代化Web桌面环境 【免费下载链接】OS.js OS.js - JavaScript Web Desktop Platform 项目地址: https://gitcode.com/gh_mirrors/os/OS.js 想象一下,你的团队需要一个统一的云端工作环境,员工无论身在何处都能…

张小明 2026/1/5 3:02:42 网站建设

在360网站做公告怎么弄邢台当地网站建设

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个能够自动生成Batocera游戏整合包的AI工具。该工具应具备以下功能:1. 扫描指定文件夹中的游戏ROM文件,自动识别游戏名称、平台和版本;2. …

张小明 2026/1/2 10:36:22 网站建设

怎么做网站注册名密码定机票最便宜网站建设

在瞬息万变的股票市场中,掌握一套专业的缠论分析工具至关重要。ChanlunX作为一款功能强大的智能交易插件,通过先进的算法将复杂的缠论理论转化为直观的可视化界面,为投资者提供全方位的技术分析软件解决方案。这款工具不仅能够实现缠论结构的…

张小明 2025/12/30 2:03:58 网站建设

网站建设项目报价单免费网络课程平台

在数字化转型浪潮下,企业对CRM的需求早已突破“销售管理”的单一边界,延伸至销售漏斗、团队协作、数据同步、项目管控、供应链一体化等全链路场景。本文选取超兔一体云、Salesforce、Microsoft Dynamics 365、SAP、金蝶、Zoho、HubSpot CRM7个主流品牌&a…

张小明 2025/12/29 18:08:55 网站建设

句容建设质检站网站台州企业网站模板建站

第一章:Open-AutoGLM关键词提取技术概述Open-AutoGLM 是一种基于生成式语言模型的自动化关键词提取框架,旨在从非结构化文本中高效识别具有代表性的语义关键词。该技术融合了提示工程(Prompt Engineering)、注意力机制分析与后处理…

张小明 2025/12/30 20:51:37 网站建设