Step1:初始化边缘点位置EdgeDot=(col, vol), col=0,vol=0.定义边缘图figureedge数组,大小为nWidth×nHeight,初始化为全255(非边缘);Step2:在非最大抑制所得图中查看EdgeDot点的值,并赋给IfEdge;Step3:if(IfEdge=noedge)then Step7;Step4:查看梯度图中EdgeDot点的值,并赋给magni- tude;Step5:if(magnitudeStep6:在记录结果的边缘图中记下EdgeDot点并设置非最大抑制图对应点值为noedge,然后在梯度图中查看EdgeDot点的八邻域点梯度magnitudenear,若magnitudenear>h1,重复执行Step6,否则执行Step7;Step7:col++;if(col>=nWidth) then vol++;if(vol>=nHeight) then end;(程序结束)
执行Step2.
算法中门限的选择直接影响着Canny算子的性能。
作者用Visual C++ 6.0实现了该算法,主要包括:图象平滑(image smoothing,这里使用高斯滤波)、微分(differentiation)处理、非最大值抑制non-maximum suppression)、边缘阈值化(edge thresholding)等步骤。选取CT图像序列中的一切片(如图1所示)该图像分割算法在实际应用中效果如图1所示: