Canny边缘检测部分步骤思考

本文深入探讨了Canny边缘检测算法中的非极大值抑制步骤,对比了线性插值与方向离散化方法,并分析了双阈值检测、边缘连接及不同算法实现的优劣。介绍了图像膨胀、递归和图形学处理等方法,并讨论了其在算法复杂度上的表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用OpenCV写的一次作业,打算是重下canny这个函数,然后稍微理一下有一点点自己思考的部分(没有代码因为拖延症并没有在ddl前把它写完……)

非极大值抑制

1.线性插值

这种方法第一眼看到觉得很神奇……不过在维基和OpenCV的官网上用到的方法都不是这一种。
这一步会对使用线性插值或对方向离散化性能和实现的比较。分析了一下觉得意义不大就没有实现……因为要加很多运算量。
一个是之前偷懒想的可以不用开根号,一旦用了这种方法直接计算就不是线性插值了……另一个是看了一下Sobel算子得到的结果,发现在比如22.5、67.5附近的不算多,感觉对于整体结果影响不会非常大。而且一旦实现这个过程,要多出两条三角函数的运算,感觉意义不大。

2.对方向离散化

伪代码:

pi_4 = atan(1);    // 得到PI/4的值
mode = (atan(gradY / gradX) + pi_4 * 5 / 2) / pi_4;   //离散化

这里对于gradX为零单独处理。
还有一个就是负数除法和正数不一样orz
然后要是要提高效率应该可以直接根据gradY / gradX来计算不需要求出arctan。

双阈值

直接指定阈值对阈值进行测试。
计算梯度的直方图,这样可以直接规定(前30%是强边界,前70%是弱边界)等,或许可以实现对图像更好的控制。
此外还有使用大津算法来确定。这是一种区分前景和背景的算法,求出的阈值为高阈值,高阈值的1/2为低阈值[1]。

检测和连接边缘

1.函数迭代

预告一下用这种方法直接毫无悬念的直接stackoverflow了。反正我写的连Lena都跑不动……直接弃了。

For all strong edge point i:
   Function addpoint(i);

Function addpoint(i):
   If i is a week edge:
      add i in the edge;

   For point j around point i:
      addpoint(j);

2.图像膨胀

这种方法就是,类似形态学运算,就是相当于一次次膨胀,然后每次膨胀完除掉不可能是边界的点再一次膨胀。

Flag = false;
while (Flag)
    Flag = false;
    for every weak edge i:
        for point j around point i:
            If j is a strong edge:
                 add i in the edge;
                 Flag = true;   // 没有再次更新的时候停止

算法复杂度应该在O((m*n)^2),在低阈值和高阈值相差越大的时候运算会越慢,当两个值相近的时候膨胀次数少,很快就能结束。

3.递归

是对函数迭代的一种简化。

For all strong edge point i:
    Stack.push(i);
while(stack is not empty):
    i = stack.pop();
    for point j around point i:
       if j is a week edge:
          add j in the edge;
          Stack.push(j);

这种方法的算法复杂的读应该在O(m*n),因为一个点最多入栈出栈8次(周围有8个点)。

4.图形学处理

这个是根据之前的图形学想到的。其实strong edge相当于起始的着色点。然后判断不是edge的可以认为是边界。然后在这种情况下可以大大减少上一种情况的入栈的点。
这种算法的基础应该是按行进行操作。每一行连通的点可以认为是用最左侧的点代表。每次入栈的是上下行的第一个。
计算机图形学第三版
虽然这种算法应该不是特意为这种有一堆初始点的情况写的但至少比我想到的前一种算法肯定快(x)

Reference

[1]https://en.wikipedia.org/wiki/Canny_edge_detector
维基 算法的总体思路归纳
[2]https://docs.opencv.org/3.3.1/da/d5c/tutorial_canny_detector.html
OpenCV的Canny函数官方文档
[5]http://www.cnblogs.com/love6tao/p/5152020.html
根据百分比确定阈值
[6]http://blog.youkuaiyun.com/likezhaobin/article/details/6892176
插值的思想

转载于:https://www.cnblogs.com/BirdCage/p/9974021.html

内容概要:该论文深入研究了液压挖掘机动臂下降势能回收技术,旨在解决传统液压挖掘机能耗高的问题。提出了一种新型闭式回路势能回收系统,利用模糊PI自整定控制算法控制永磁无刷直流电动机,实现了变转速容积调速控制,消除了节流和溢流损失。通过建立数学模型和仿真模型,分析了不同负载下的系统性能,并开发了试验平台验证系统的高效性和节能效果。研究还涵盖了执行机构能量分布分析、系统元件参数匹配及电机控制性能优化,为液压挖掘机节能技术提供了理论和实践依据。此外,通过实验验证,该系统相比传统方案可降低28%的能耗,控制系统响应时间缩短40%,为工程机械的绿色化、智能化发展提供了关键技术支撑。 适合人群:从事工程机械设计、制造及维护的工程师和技术人员,以及对液压系统节能技术感兴趣的科研人员。 使用场景及目标:①理解液压挖掘机闭式回路动臂势能回收系统的原理和优势;②掌握模糊PI自整定控制算法的具体实现;③学习如何通过理论建模、仿真和实验验证来评估和优化液压系统的性能。 其他说明:此研究不仅提供了详细的理论分析和数学建模,还给出了具体的仿真代码和实验数据,便于读者在实际工作中进行参考和应用。研究结果表明,该系统不仅能显著提高能源利用效率,还能延长设备使用寿命,降低维护成本,具有重要的工程应用价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值