fast-canny 0.1.0

Industrial-grade Zero-Allocation SIMD Canny Edge Detector
Documentation
# Canny


Canny 就是给图像“画骨架”的艺术。想象一下,你手里有一张照片,你想用钢笔把里面物体的轮廓勾勒出来,Canny 算法做的就是这件事。

## 第一步:打磨(高斯模糊)


**目的:别让噪音骗了你。**
照片里有很多细小的、杂乱的斑点(噪点)。如果你直接找边缘,算法会把这些小斑点也当成边缘,画出来的线条会非常脏。

- **做法**:就像给照片加了一层“美颜滤镜”,把整张图稍微模糊一点。这样,微小的噪声被抹平了,而真正的轮廓(大方向)依然在。

---

## 第二步:找坡度(计算梯度)


**目的:哪里亮度变化大,哪里就有边缘。**
边缘的本质就是“变脸”。比如黑色的头发和白色的皮肤交界处,亮度会突然从很低跳到很高。

- **做法**:算法会扫描全图,找出亮度变化最剧烈的地方。它会记录下两件事:
  1.  这里的变化有多猛?(**幅值**  2.  变化的方向是朝哪里的?(**方向**
---

## 第三步:瘦身(非极大值抑制)


**目的:只要最细的线条。**
找完坡度后,边缘往往是“胖乎乎”的一团。但我们要的是“骨架”,线条必须只有一个像素宽。

- **做法**:算法会像个严苛的裁判,在每一个边缘区域里走动。如果它发现你这个像素点不是周围一圈里最“猛”的(亮度变化不是最大的),就直接把你踢走。最后,只留下一条最细、最准的线。

---

## 第四步:海选(双阈值)


**目的:区分“真警察”和“假警察”。**
现在线很细了,但里面还是有很多由于光影波动产生的假边缘。

- **做法**:我们设定两条线(高门槛和低门槛):
  - **强边缘**:超过高门槛。这肯定是边缘,绝对保留。
  - **弱边缘**:在两个门槛之间。可能是边缘,也可能是干扰,待定。
  - **垃圾**:低于低门槛。直接扔掉。

---

## 第五步:拯救(滞后跟踪)


**目的:不抛弃,不放弃。**
这是最有人情味的一步。那些“弱边缘”到底留不留?

- **做法**:算法会看这个弱边缘**是否连接着一个强边缘**  - 如果它是一条长线的一部分(连着强边缘),它就被“救”了,变成真正的边缘。
  - 如果它是孤零零的一个点,那它就是噪声,干掉它。

---

## 为什么 Canny 这么厉害?


虽然现在的 AI(深度学习)很火,但 Canny 依然是工业界的“钉子户”,因为它:

1.  ****:不需要昂贵的显卡,用我们之前讨论的 Rust 优化后,手机瞬间就能算完。
2.  ****:它找出来的边缘非常细,且定位极准。
3.  ****:逻辑清晰,不需要训练模型,在任何光照下表现都很稳定。

**一句话总结:**

> Canny 先把图弄糊,再找亮度变化大的地方,然后把粗线变细,最后只留下那些足够强或者连着强线的线条。