想象一间素描教室:老师傅老陈拿到照片后从不急着下笔,而是先眯眼观察,擦掉纸上的杂点,再沿明暗交界处轻轻画线,最后把断线连成完整轮廓。Canny 边缘检测就是这样一位严谨的老画师:去噪、求梯度、压细边缘、连通断线,每一步都有章法。而画室新来的 AI 画师小H 见过几百万张“照片—轮廓”配对图,提笔就能直接勾出轮廓,很少犹豫,这就是 HED 深度学习边缘检测。 这篇文章会用“老画师 vs AI 画师”的比喻,带你理解 Canny 的完整流程、HED 的核心原理,以及两者在工业、医疗、自动驾驶中的选型思路。听懂这条主线,你不仅能看懂代码,还能在实际项目里判断:什么时候该用老陈的耐心,什么时候该信小H的直觉。

岗位关联

边缘检测是计算机视觉的“起笔”,Canny 让你理解传统特征的工程智慧,HED 让你看见深度学习如何重塑同一个任务。掌握两者,是 CV 工程师从会用工具走向能选工具的关键一步。

目录
  1. 可视化演示
  2. 边缘检测基础
  3. Canny多阶段流程
  4. Canny超参数调优
  5. HED深度学习原理
  6. Canny与HED对比
  7. 工程实现要点
  8. 典型应用落地
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示Canny多阶段检测流程、HED深度学习网络结构与两种算法的性能对比。

本节配有交互动效(进入视口后自动加载,约 3KB)。

Canny多阶段边缘检测流程 高斯模糊:降噪平滑图像 梯度计算:Sobel算子提取边缘强度 G = √(Gx² + Gy²) 梯度幅值计算

边缘检测基础

老陈拿到照片,不会着急下笔,而是先眯起眼睛找“明暗交界线”。屋里墙是浅黄的、桌子是深棕的,它们之间就有一条分界线;窗框和天空之间也有一条。对人眼来说,这条线是轮廓,对计算机来说,它其实是图像里亮度发生剧烈变化的地方。边缘检测,就是把这种“亮度突变”找出来并画成线。

计算机看到的照片是一格格亮度值。想在某个点判断有没有边缘,就要看这个点的亮度比邻居亮多少、暗多少,以及朝哪个方向变化。这个“变化速度和方向”在数学上就叫梯度。如果把亮度想象成山坡高度,梯度就是山坡最陡的方向和坡度;边缘点,就是山坡突然变陡的地方。

图像梯度的标准写法如下:

老陈这时还会遇到一个麻烦:照片上常有噪点。噪点像铅笔飞白,会让“明暗交界”变得毛躁,甚至画错线。所以老陈不能只看原始亮度,必须先处理噪声,再谈描边。这也是 Canny 为什么要把“去噪”放在第一步的原因。

∇I(x,y)=(Gx,Gy),M(x,y)=Gx2+Gy2,θ(x,y)=arctan⁡2(Gy,Gx)\begin{aligned}\nabla I(x,y)&=(G_x,G_y),\\M(x,y)&=\sqrt{G_x^2+G_y^2},\\\theta(x,y)&=\arctan2\left(G_y,G_x\right)\end{aligned}
  1. 水平与竖直变化量\(G_x\) 表示水平方向的亮度差,\(G_y\) 表示竖直方向的亮度差。
    Gx=I(x+1,y)−I(x−1,y)\displaystyle G_x=I(x+1,y)-I(x-1,y)
  2. 梯度幅值把两个方向的变化合起来,得到总变化强度 \(M\),这是判断边缘强弱的主要依据。
    M(x,y)=Gx2+Gy2\displaystyle M(x,y)=\sqrt{G_x^2+G_y^2}
  3. 梯度方向用反正切函数得到变化最陡的方向 \(\theta\),后续非极大值抑制会用到它。
    θ(x,y)=arctan⁡2(Gy,Gx)\displaystyle \theta(x,y)=\arctan2(G_y,G_x)

Canny多阶段流程

老陈的秘诀,是一套练了几十年的四步流程:先擦灰、再找方向、后压细线、最后连线。Canny 算法正是把这套画法变成了可计算的规则,每一步都有明确目的。

第一步是高斯模糊去噪。高斯模糊就像用一块半透明的磨砂纸在画面上轻轻一擦,让孤立的小噪点变淡,同时保留真正的大轮廓。图像处理中常用二维高斯函数作为模糊核:

模糊之后,老陈用 Sobel 算子计算梯度,得到每个像素的边缘强度与方向。但梯度图往往是一大片“亮带”,像铅笔涂得太粗。于是第三步做非极大值抑制:只看沿着梯度方向的那条山脊,凡是局部最大的点才保留,其余全部压掉。这样得到的边缘不再是粗粗的一团,而是一条条细线。最后一步是双阈值滞后连接:设一个高阈值、一个低阈值,高于高阈值的一定是边缘,低于低阈值的直接丢弃,夹在中间的弱边缘只有和强边缘连通时才保留。断开的细线被重新连起来,一条完整轮廓诞生了。

老陈把这四步走完,才敢把画交给客户。Canny 的优势正在于这种“流程化”:每步都可解释、可调参,也正因如此,它成了传统边缘检测最经典的范本。

G(x,y)=12πσ2exp⁡(−x2+y22σ2)G(x,y)=\frac{1}{2\pi \sigma^2}\exp\left(-\frac{x^2+y^2}{2\sigma^2}\right)
  1. 归一化系数\(\displaystyle \frac{1}{2\pi \sigma^2}\) 保证模糊核权重总和为 1,去噪时不会改变图像整体亮度。
    12πσ2\displaystyle \frac{1}{2\pi \sigma^2}
  2. 距离平方\(x^2+y^2\) 表示当前像素离邻域中心越远,权重越低。
    x2+y2\displaystyle x^2+y^2
  3. 指数衰减\(\displaystyle \exp\left(-\frac{x^2+y^2}{2\sigma^2}\right)\) 让中心像素占据主导,周围像素只起辅助平滑作用。
    −x2+y22σ2\displaystyle -\frac{x^2+y^2}{2\sigma^2}

Canny超参数调优

同样是老陈,画不同照片时会换不同铅笔:画粗糙石墙用硬铅,画柔软布料用软铅。Canny 也有自己的“铅笔型号”,其中最重要的就是两个阈值。

双阈值把梯度幅值分成三档:强边缘、弱边缘、非边缘。这个决策过程可以写成分段函数:

高阈值设得太高,只剩最锋利的线,很多真实轮廓会断掉;高阈值设得太低,噪点也被当成边缘,画面会乱成一团。低阈值影响弱边缘的候选数量,低阈值太高会把模糊边缘全部丢掉,太低又会让噪声混进来。高斯核大小同样有取舍:核越大去噪越强,但边缘会被磨得模糊、位置偏移;核越小细节保留多,但噪声也更容易被误判为边缘。

老陈的经验是:先用 \(0.33\) 倍图像灰度中位数估算一个合理阈值,再在验证集上微调。没有“万能参数”,只有在速度、细节和鲁棒性之间反复权衡的工程直觉。

E(x,y)={Es,M(x,y)≥ThighEw,Tlow≤M(x,y)<Thigh0,M(x,y)<TlowE(x,y)=\begin{cases}E_s, & M(x,y)\ge T_{\mathrm{high}}\\E_w, & T_{\mathrm{low}}\le M(x,y)<T_{\mathrm{high}}\\0, & M(x,y)<T_{\mathrm{low}}\end{cases}
  1. 强边缘档当梯度幅值 \(M(x,y)\) 不低于高阈值 \(T_{\mathrm{high}}\) 时,这条边缘非常确定,直接标记为强边缘 \(E_s\)。
    M(x,y)≥Thigh\displaystyle M(x,y)\ge T_{\mathrm{high}}
  2. 弱边缘档幅值介于低阈值 \(T_{\mathrm{low}}\) 和高阈值 \(T_{\mathrm{high}}\) 之间时,标记为弱边缘 \(E_w\),是否保留要等滞后连接决定。
    Tlow≤M(x,y)<Thigh\displaystyle T_{\mathrm{low}}\le M(x,y)<T_{\mathrm{high}}
  3. 非边缘档幅值低于低阈值时,大概率是噪声或平缓区域,直接置为 0。
    M(x,y)<Tlow\displaystyle M(x,y)<T_{\mathrm{low}}

HED深度学习原理

画室另一侧,AI 画师小H 的工作方式完全不同。他不学四步流程,而是直接看几百万张照片和对应的轮廓图,自己总结“什么样的像素组合算边缘”。这种“输入图像,直接输出边缘图”的思路,就是端到端学习。HED 全称 Holistically-Nested Edge Detection,核心是让网络在不同尺度上都输出边缘预测,再把它们融合起来。

为什么需要多尺度?浅层网络感受野小,擅长捕捉纹理和细碎边缘;深层网络感受野大,更能理解物体级别的轮廓。HED 在多个阶段分别预测边缘,最后融合所有侧输出,就像小H先看局部笔触,再看整体构图,最后综合下笔。训练时的目标函数是各侧输出损失与融合输出损失的加权和:

HED 练成后,只要把图片丢进网络,前向传播一次就能得到边缘图,不需要手工设计梯度算子和阈值规则。它尤其擅长处理“模糊边界”,比如猫的毛发、医学影像中的软组织边缘。小H不是不犯错,但他见过太多画风,面对复杂场景往往比老陈更从容。

L=∑m=1Mαmℓmside+ℓfuse,ℓmside=−∑i[yilog⁡y^i+(1−yi)log⁡(1−y^i)]\mathcal{L}=\sum_{m=1}^{M}\alpha_m \ell_m^{\mathrm{side}} + \ell^{\mathrm{fuse}},\quad\ell_m^{\mathrm{side}}=-\sum_{i}\left[y_i\log \hat{y}_i+(1-y_i)\log(1-\hat{y}_i)\right]
  1. 侧输出加权和\(\displaystyle \sum_{m=1}^{M}\alpha_m \ell_m^{\mathrm{side}}\) 表示把每一层的边缘预测损失按权重 \(\alpha_m\) 加起来,让每个尺度都学到信息。
    ∑m=1Mαmℓmside\displaystyle \sum_{m=1}^{M}\alpha_m \ell_m^{\mathrm{side}}
  2. 二分类交叉熵\(\displaystyle -\left[y_i\log \hat{y}_i+(1-y_i)\log(1-\hat{y}_i)\right]\) 比较每个像素的真实标签 \(y_i\) 和预测概率 \(\hat{y}_i\),误差越大损失越大。
    yilog⁡y^i+(1−yi)log⁡(1−y^i)\displaystyle y_i\log \hat{y}_i+(1-y_i)\log(1-\hat{y}_i)
  3. 融合损失\(\ell^{\mathrm{fuse}}\) 让最终融合层也直接接受监督,保证大家都能向最终轮廓图对齐。
    ℓfuse\displaystyle \ell^{\mathrm{fuse}}

Canny与HED对比

当老陈和小H同台竞争时,客户最关心的通常是三件事:画得快不快、画得准不准、换一个场景还能不能画。

Canny 的优势是快和稳。它没有训练过程,只做几次卷积和阈值判断,CPU 上也能实时运行;缺点是规则由人设计,遇到光照突变、阴影、纹理复杂的场景时,容易把纹理错当边缘,或把真实边缘漏掉。HED 的优势是准和强。它根据大量标注数据学习“什么是边缘”,对复杂背景更鲁棒,边缘也更接近人对轮廓的感知;缺点是模型较重,需要 GPU 或边缘设备加速,并且训练数据决定了它的上限。

评估边缘检测质量,常用的指标是 F1 分数:

选型建议并不复杂:如果场景固定、算力有限、需要毫秒级响应,优先用老陈 Canny;如果边缘本身模糊、背景杂乱、允许 GPU 推理,就请小H HED 上场。很多工业系统甚至会让两者配合:先用 Canny 快速筛选 ROI,再用 HED 对可疑区域精细检测。

F1=2×Precision×RecallPrecision+RecallF_1=\frac{2\times \mathrm{Precision}\times \mathrm{Recall}}{\mathrm{Precision}+\mathrm{Recall}}
  1. 精确率\(\mathrm{Precision}\) 表示算法标出的边缘里有多少是真正边缘,精确率高说明“误报少”。
    Precision\displaystyle \mathrm{Precision}
  2. 召回率\(\mathrm{Recall}\) 表示真实边缘里有多少被算法找到,召回率高说明“漏检少”。
    Recall\displaystyle \mathrm{Recall}
  3. 调和平均\(\displaystyle \frac{2\times \mathrm{Precision}\times \mathrm{Recall}}{\mathrm{Precision}+\mathrm{Recall}}\) 同时惩罚误报和漏检,避免只偏袒其中一个指标。
    2×Precision×RecallPrecision+Recall\displaystyle \frac{2\times \mathrm{Precision}\times \mathrm{Recall}}{\mathrm{Precision}+\mathrm{Recall}}

工程实现要点

真正开工时,老陈会先挑铅笔、裁纸、调橡皮,这些准备工作决定最终成品质量。Canny 的工程实现也一样,代码只有一行,但代码前的预处理和代码后的处理往往才是成败关键。

OpenCV 中 Canny 的调用非常简洁:cv2.Canny(blurred, low, high)。但直接对原始图像调往往效果不佳,正确做法是先转灰度,再用高斯模糊去噪,有时还要做光照归一化、缩放、裁剪。边缘检测对噪声非常敏感,预处理做得越好,检测越干净。

Sobel 算子是梯度计算中最常用的工具,它的水平核和垂直核可以写成矩阵形式:

边缘检测之后,通常还要做边缘后处理:用形态学操作连接断点,用轮廓提取算法把边缘点组织成完整轮廓,再用长度、面积等条件过滤小噪声轮廓。最后,用 F1、精确率、召回率在标注数据集上评估,而不是只看一两张图的效果。老陈的“桌面整洁”,对应到工程里就是规范的预处理、参数管理和质量评估流程。

S_x=\begin{bmatrix}-1&0&1\\-2&0&2\\-1&0&1\end{bmatrix},\quadS_y=\begin{bmatrix}1&2&1\\0&0&0\\-1&-2&-1\end{bmatrix}
  1. 水平核 \(S_x\)中间列系数为 0,左右两侧一正一负,用来检测左右方向的亮度差。
    Sx=[−101−202−101]\displaystyle S_x=\begin{bmatrix}-1&0&1\\-2&0&2\\-1&0&1\end{bmatrix}
  2. 垂直核 \(S_y\)上下两行一正一负,用来检测上下方向的亮度差。
    Sy=[121000−1−2−1]\displaystyle S_y=\begin{bmatrix}1&2&1\\0&0&0\\-1&-2&-1\end{bmatrix}
  3. 中间权重 2给中心像素更高权重,让梯度计算对位置更敏感,减少噪声影响。
    2\displaystyle 2

典型应用落地

画室接到的订单千奇百怪:有的要画钢筋横截面,有的要画人体器官边界,还有的要画城市道路。不同订单,老陈和小H各有所长。

在工业质检场景中,产品表面缺陷通常表现为明显的明暗变化,背景相对可控。Canny 速度快、参数稳定,适合放在流水线上实时检测划痕、缺角、焊点偏移。在医学影像中,器官和组织边界往往模糊、低对比度,噪声大,Canny 很容易把噪声当成边缘。HED 能利用语义信息画出更连续、更接近医生标注的边界,适合辅助分割肿瘤或器官。在自动驾驶场景中,车道线、路沿、障碍物边缘需要同时满足实时性和鲁棒性,常见的做法是 Canny 负责快速粗检,深度学习模型在关键区域做精细确认,两者互为补充。

老陈和小H不是竞争对手,而是画室的两位合伙人。读懂各自的能力边界,才能给不同的画派选对场合,让每一笔都落在最需要的地方。

AI 应用场景

工业流水线实时缺陷检测

阶段:图像预处理与特征提取

解决的问题:传统人工质检依赖老师傅目视,效率低、标准不稳定;Canny 可以在几十毫秒内提取产品轮廓和缺陷边界,把“有没有明显划痕、缺角”变成可量化的边缘特征。

具体案例:手机外壳生产线用高分辨率相机拍摄每台外壳,先做高斯模糊消除灰尘噪声,再用 Canny 提取边缘;如果边缘轮廓与标准模板的差异超过阈值,立即判为缺陷品,每分钟可检测上百个外壳。

医学影像中的模糊边界提取

阶段:模型训练与推理

解决的问题:CT、MRI 中软组织边界模糊,Canny 依赖梯度突变,容易把噪声或伪影画成边缘;HED 通过多尺度融合学习器官轮廓的语义特征,可以在低对比度图像中画出更完整的边界。

具体案例:医院积累了一批肝脏 CT 切片和医生标注的轮廓图,算法团队用 HED 训练边缘检测模型,输出肝脏边界概率图,再交给分割网络细化,显著减少医生手动勾画时间。

自动驾驶车道线粗定位

阶段:感知后处理与多传感器融合

解决的问题:自动驾驶需要同时看车道线、路沿和障碍物轮廓,只用深度模型计算量大、延迟高;Canny 作为轻量前级可以快速给出边缘候选区域,再由深度学习模型验证。

具体案例:车载摄像头把图像缩放后送入 Canny,系统快速锁定中低空区域的强边缘带;若疑似路沿边缘,再送入轻量分割模型确认,既保证帧率又提高复杂光照下的可靠性。

Python 演示

python40 行
import cv2import numpy as np  def make_synthetic_image():    """造一张包含矩形、圆形、斜线的合成图像,模拟待检测场景。"""    img = np.full((300, 400, 3), 220, dtype=np.uint8)    cv2.rectangle(img, (50, 60), (180, 240), (120, 120, 120), -1)    cv2.circle(img, (280, 140), 70, (80, 80, 80), -1)    cv2.line(img, (0, 260), (399, 200), (160, 160, 160), 8)    return img  def auto_canny(gray, sigma=0.33):    """用灰度中位数自动估计Canny双阈值。"""    median = np.median(gray)    low = int(max(0, (1.0 - sigma) * median))    high = int(min(255, (1.0 + sigma) * median))    return cv2.Canny(gray, low, high)  def extract_contours(edges):    """把边缘像素组织成轮廓列表,便于后续筛选。"""    contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)    return contours  if __name__ == "__main__":    img = make_synthetic_image()    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)    blurred = cv2.GaussianBlur(gray, (5, 5), 1.2)    edges = auto_canny(blurred)    contours = extract_contours(edges)     result = img.copy()    cv2.drawContours(result, contours, -1, (0, 0, 200), 2)    cv2.imwrite("canny_result.png", result)     print("edge pixels:", int(edges.sum() / 255))    print("contours:", len(contours))
目的:用 OpenCV 实现“高斯去噪 → 自动阈值 Canny → 轮廓提取”的完整传统边缘检测流程,并保存可视化结果。
  1. gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)把彩色图转成灰度图,因为 Canny 只需亮度信息。
  2. blurred = cv2.GaussianBlur(gray, (5, 5), 1.2)高斯模糊消除合成图上的微小噪声,对应老陈“先擦灰”。
  3. median = np.median(gray)用整张图的灰度中位数估计噪声水平。
  4. low = int(max(0, (1.0 - sigma) * median))低阈值由中位数向下偏移得到。
  5. high = int(min(255, (1.0 + sigma) * median))高阈值由中位数向上偏移得到。
  6. edges = auto_canny(blurred)内部调用 cv2.Canny,完成梯度计算、非极大值抑制和双阈值滞后连接。
  7. contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)把边缘点连接成轮廓列表。
  8. cv2.drawContours(result, contours, -1, (0, 0, 200), 2)在原图上描出检测到的轮廓,方便肉眼检查。

常见误区

误区很多人以为把 `cv2.Canny` 调用完,得到的白线就是可以直接用的物体轮廓,不需要任何后处理。

正解Canny 输出的是“亮度突变点”,不区分这是物体轮廓还是纹理阴影。就像老陈描出了所有明暗交界,但不代表每条线都是客户要的窗户轮廓。实际工程里还要做轮廓提取、长短过滤、闭合连接,甚至用语义信息筛选。

为何常见:因为示例代码通常只展示 Canny 的输出图,看起来已经很“像边缘”,容易让人忽略后处理环节。

误区既然噪声需要模糊,那把高斯核设成 9×9、11×11,边缘应该更干净。

正解高斯核太大确实能压住更多噪声,但也会把真实边缘磨得模糊,导致边缘位置偏移甚至消失。老陈用磨砂纸用力过猛,会把铅笔线也擦掉。正确做法是选择刚好能压制噪声的最小核,再配合阈值调优。

为何常见:初学者看到“高斯模糊去噪”,容易把去噪强度和效果画等号,忽略了定位精度这个代价。

误区HED 是深度学习模型,几百万张图都训练完了,部署时应该开箱即用,不用调参。

正解HED 不需要调 Canny 的高低阈值,但它有网络结构、训练损失权重、输入尺寸、后处理阈值等参数。不同数据域差异很大,在自然图像上训练的模型直接用到医学图像,效果可能反而不如老陈。

为何常见:深度学习的“端到端”概念被过度简化,让人误以为模型自己解决了所有选择,其实部署仍离不开数据和场景适配。

误区有人以为把边缘检测做好,就能像人一样“认出”照片里有一只猫。

正解边缘检测只回答“哪里亮度变化剧烈”,不回答“那是什么”。老陈画出猫的轮廓,但要认出这是猫,还需要形状、纹理、语义等更高层信息。HED 虽然利用语义提升了边缘质量,但它输出的仍是边缘图,而不是分类结果。

为何常见:边缘检测结果和肉眼轮廓很接近,容易让人产生“轮廓即理解”的错觉。

面试题

Q1. Canny 边缘检测流程的第一步通常是什么?

单选题 · easy

  • A.非极大值抑制
  • B.双阈值滞后连接
  • C.高斯模糊去噪← 正确答案
  • D.计算梯度方向

答案:C。Canny 先做高斯模糊去噪,降低噪声对后续梯度计算的影响。双阈值和方向计算都在后面,非极大值抑制也在梯度计算之后。

Q2. Canny 中计算图像梯度能得到什么信息?

单选题 · mid

  • A.像素颜色值
  • B.边缘强度与方向← 正确答案
  • C.压缩图像体积
  • D.增强图像分辨率

答案:B。梯度幅值反映边缘强弱,梯度方向反映亮度变化方向。老陈正是靠“强度和方向”决定哪里下笔、如何压线,而不是靠颜色。

Q3. 非极大值抑制的主要作用是什么?

单选题 · mid

  • A.保留局部梯度最大点← 正确答案
  • B.删除全部弱边缘
  • C.增大梯度幅值
  • D.对图像做傅里叶变换

答案:A。梯度图常常是一条粗亮带,非极大值抑制沿着梯度方向检查,只保留局部最大的像素,把粗带压成细线。

Q4. Canny 双阈值中,弱边缘在什么情况下会保留?

单选题 · hard

  • A.所有弱边缘均保留
  • B.所有弱边缘均删除
  • C.降低低阈值后保留
  • D.与强边缘连通时保留← 正确答案

答案:D。弱边缘本身不确定,只有与强边缘连通时才被保留,这就是“滞后连接”。这就像老陈把断线接到主轮廓上,而不是把所有飞白都留下。

Q5. Canny 与 HED 最本质的区别是什么?

单选题 · mid

  • A.Canny 需要训练数据
  • B.HED 端到端学习边缘← 正确答案
  • C.HED 不需要图像输入
  • D.Canny 基于深度学习

答案:B。Canny 是人工设计规则的多阶段流程,HED 是数据驱动的端到端网络,直接学习从图像到边缘图的映射。

Q6. HED 多尺度侧输出能带来哪些优势?

多选题 · hard

  • A.捕获不同粗细边缘← 正确答案
  • B.输出张量更小
  • C.融合多尺度信息← 正确答案
  • D.减少卷积层数量

答案:AC。浅层侧输出负责细纹理,深层侧输出负责物体级轮廓,融合后兼顾粗细边缘。多尺度融合并不会减少卷积层数量,而是会用更多监督信号辅助训练。

Q7. 高斯核选得过大,边缘检测会发生什么?

单选题 · mid

  • A.去噪强但边缘模糊移位← 正确答案
  • B.去噪弱但边缘锐利
  • C.去噪不影响边缘位置
  • D.去噪只影响彩色图像

答案:A。高斯核越大,周围像素参与平滑的范围越大,噪声被压得更狠,但真实边缘也被磨得变宽、位置偏移,定位精度下降。

Q8. Canny 高阈值设得过大,通常会导致什么结果?

单选题 · easy

  • A.保留的边缘更少← 正确答案
  • B.保留的边缘更多
  • C.所有边缘都保留
  • D.梯度方向发生改变

答案:A。高阈值决定“强边缘”的门槛,门槛太高,很多真实但强度不足的边缘会被过滤掉,最终只剩最锐利的部分。

Q9. F1 分数在边缘检测评估中主要衡量什么?

单选题 · mid

  • A.精确率与召回率的权衡← 正确答案
  • B.图像亮度的高低
  • C.卷积核的大小
  • D.网络参数量多少

答案:A。边缘检测既怕误报也怕漏检,F1 是精确率和召回率的调和平均,能综合反映边缘图与标准轮廓的接近程度。

Q10. 在工程中使用 Canny 或 HED 时,哪些做法是合理的?

多选题 · hard

  • A.噪声大时先做高斯滤波← 正确答案
  • B.用边缘检测替代目标分类
  • C.模糊边缘优先考虑 HED← 正确答案
  • D.阈值在验证集上调优← 正确答案

答案:ACD。预处理去噪、验证集调参都是标准工程手段;模糊低对比场景用 HED 更合适。但边缘检测解决不了目标分类问题,它只是感知流程的一部分。