在Canny算子的论文中提出了最优边缘检测算子应满足三个标准①检测错误率低——尽可能多地查找出图像中的实际边缘边缘的误检率将边缘识别为非边缘低且避免噪声产生虚假边缘将非边缘识别为边缘②定位准确率高——标识出的边缘与图像中的实际边缘尽可能接近准确定位边缘③最小边缘宽度——对同一边缘产生尽可能少的响应次数最好仅标识一次。Rafael Gonzalez和Richard Woods的《数字图像处理》中是这样的还只说是目标到底实现目标了吗若实现了怎么实现的。肯定是不能绝对实现完全实现了也就不叫目标了。那如果相对达成目标总有参照方法吧。没前没后的一个抄一个。Canny边缘检测算法的具体过程可以描述为下述三个步骤 通过高斯函数的一阶微分计算图像的梯度通过非极大值抑制non-maximum suppression沿梯度方向查找边缘梯度的单个局部极大值点使用双阈值检测强边缘和弱边缘若弱边缘与强边缘连通则将弱边缘包含到输出中。边缘检测算子应满足三个标准①检测错误率低——尽可能多地查找出图像中的实际边缘边缘的误检率将边缘识别为非边缘低且避免噪声产生虚假边缘将非边缘识别为边缘②定位准确率高——标识出的边缘与图像中的实际边缘尽可能接近准确定位边缘③最小边缘宽度——对同一边缘产生尽可能少的响应次数最好仅标识一次。在梯度算子的基础上Canny算子多出来的步骤做什么由于差分对噪声敏感通过平滑处理对图像降噪避免虚假边缘的产生。①后半句✓ \checkmark✓通过弱边缘的检测连接图像的边缘使边缘的误检率低。①前半句✓ \checkmark✓梯度算子检测的边缘有一定宽度可以通过细化处理产生单像素宽的边缘但是细化处理无差别地删除边界像素形成线宽为1的细线。Canny算子通过查找梯度的脊线ridgeline使边缘定位准确且产生单像素宽的边缘。②③✓ \checkmark✓John F. Canny提出了Canny算子Canny使用了变分法推导出在满足上述约束条件下的最优函数可表示为四个指数项之和的形式可以通过高斯函数的一阶导数来近似。目前Canny边缘检测算法具有多个实现版本Rafael Gonzalez的《数字图像处理》中非极大值抑制的实现我认为不好。我偏向MATLAB的实现。禹晶、肖创柏、廖庆敏《数字图像处理面向新工科的电工电子信息基础课程系列教材》P237依据MATLAB图像处理工具包的edge函数总结了Canny边缘检测过程。这里给出了阶段结果。向量的可视化一般都用箭头图。关于梯度方向的可视化我首先想到箭头图分辨率不高还挺好但是分辨率高了什么都看不清。[X,Y]meshgrid(0:pi/8:pi,-pi:pi/8:pi);U1sin(X);V1cos(Y);tiledlayout(1,1)ax1nexttile;quiver(ax1,X,Y,V1,U1)axis equaltitle(ax1,Left Plot)axis off所以光流法那边提出了用颜色平面来可视化也不知道哪位高人想到的效果确实不错从颜色一目了然观察向量的方向。所以即使是教材也要跟上时代的发展和进步所以不做科研的人也做不好教学。