主权项 |
一种基于canny的自适应阈值的边缘检测算法,其特征在于,包括如下步骤:步骤一、原始灰度图像高斯滤波:选用一维高斯函数G(x)构造滤波器,分别按行和列对原始图像f(x,y)进行卷积操作,得到平滑图像I(x,y):<maths num="0001" id="cmaths0001"><math><![CDATA[<mrow><mi>G</mi><mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow><mo>=</mo><mfrac><mrow><mi>exp</mi><mrow><mo>(</mo><mo>-</mo><msup><mi>x</mi><mn>2</mn></msup><mo>/</mo><msup><mrow><mn>2</mn><mi>σ</mi></mrow><mn>2</mn></msup><mo>)</mo></mrow></mrow><msup><mrow><mn>2</mn><mi>πσ</mi></mrow><mn>2</mn></msup></mfrac><mo>,</mo></mrow>]]></math><img file="FDA0000689223140000011.GIF" wi="477" he="139" /></maths><maths num="0002" id="cmaths0002"><math><![CDATA[<mrow><mi>G</mi><mrow><mo>(</mo><mi>y</mi><mo>)</mo></mrow><mo>=</mo><mfrac><mrow><mi>exp</mi><mrow><mo>(</mo><msup><mrow><mo>-</mo><mi>y</mi></mrow><mn>2</mn></msup><mo>/</mo><msup><mrow><mn>2</mn><mi>σ</mi></mrow><mn>2</mn></msup><mo>)</mo></mrow></mrow><msup><mrow><mn>2</mn><mi>πσ</mi></mrow><mn>2</mn></msup></mfrac></mrow>]]></math><img file="FDA0000689223140000012.GIF" wi="430" he="129" /></maths> (公式1)I(x,y)=[G(x)G(y)]*f(x,y) (公式2)其中,σ是高斯函数的标准差,用来控制平滑程度;步骤二、梯度计算:计算梯度幅值和方向,梯度的计算通常采用求偏导数的方法,Canny算子采用2x2邻域一阶偏导数的有限差分计算平滑后的图像I(x,y)的梯度幅值Grad(x,y):<maths num="0003" id="cmaths0003"><math><![CDATA[<mrow><mi>Grad</mi><mrow><mo>(</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo>)</mo></mrow><mo>=</mo><msqrt><msub><mi>I</mi><mi>x</mi></msub><msup><mrow><mo>(</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo>)</mo></mrow><mn>2</mn></msup><mo>+</mo><msub><mi>I</mi><mi>y</mi></msub><msup><mrow><mo>(</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo>)</mo></mrow><mn>2</mn></msup></msqrt></mrow>]]></math><img file="FDA0000689223140000013.GIF" wi="644" he="96" /></maths> (公式3)<maths num="0004" id="cmaths0004"><math><![CDATA[<mrow><mi>Ori</mi><mrow><mo>(</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo>)</mo></mrow><mo>=</mo><mi>arctan</mi><mrow><mo>(</mo><mfrac><mrow><msub><mi>I</mi><mi>y</mi></msub><mrow><mo>(</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo>)</mo></mrow></mrow><mrow><msub><mi>I</mi><mi>x</mi></msub><mrow><mo>(</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo>)</mo></mrow></mrow></mfrac><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000689223140000014.GIF" wi="500" he="137" /></maths> (公式4)其中,I<sub>x</sub>(x,y)和I<sub>y</sub>(x,y)分别是原图像被滤波器沿行列作用的结果;步骤三、极大值抑制:用3x3窗口在领域对Grad(x,y)的元素沿梯度方向进行梯度幅值的比较,对于每个点,将邻域中心元素Grad(x,y)与沿梯度方向的两个梯度幅值结果比较,如果Grad(x,y)的值小于梯度方向上的两个邻域,则将Grad(x,y)对应的边缘标志位赋0值;步骤四、自适应高低阈值计算:对经过步骤三的梯度图进行梯度统计,绘制梯度直方图,根据直方图信息,将直方图峰值对应的梯度值和以该梯度值为均值计算得到的方差,作为梯度背景的表达形式,得到高阈值Th;再从边缘点中除去高于高阈值的边缘点,采用相同的方法,计算得到低阈值Tl,高阈值计算式如下:Th=G<sub>peark</sub>+δ (公式5)<maths num="0005" id="cmaths0005"><math><![CDATA[<mrow><mi>δ</mi><mo>=</mo><msup><mrow><mo>(</mo><munderover><mi>Σ</mi><mrow><mi>i</mi><mo>=</mo><mn>0</mn></mrow><mi>N</mi></munderover><msup><mrow><mo>(</mo><msub><mi>G</mi><mi>i</mi></msub><mo>-</mo><msub><mi>G</mi><mi>peark</mi></msub><mo>)</mo></mrow><mi>n</mi></msup><mo>/</mo><mi>N</mi><mo>)</mo></mrow><mrow><mn>1</mn><mo>/</mo><mi>n</mi></mrow></msup></mrow>]]></math><img file="FDA0000689223140000021.GIF" wi="528" he="140" /></maths> (公式6)低阈值计算式如下:Tl=G<sub>peark</sub>+δ' (公式7)<maths num="0006" id="cmaths0006"><math><![CDATA[<mrow><msup><mi>δ</mi><mo>'</mo></msup><mo>=</mo><msup><mrow><mo>(</mo><munderover><mi>Σ</mi><mrow><mi>i</mi><mo>=</mo><mn>0</mn></mrow><msup><mi>N</mi><mo>'</mo></msup></munderover><msup><mrow><mo>(</mo><msub><mi>G</mi><mi>i</mi></msub><mo>-</mo><msub><mi>G</mi><mi>peark</mi></msub><mo>)</mo></mrow><mi>n</mi></msup><mo>/</mo><msup><mi>N</mi><mo>'</mo></msup><mo>)</mo></mrow><mrow><mn>1</mn><mo>/</mo><mi>n</mi></mrow></msup></mrow>]]></math><img file="FDA0000689223140000022.GIF" wi="586" he="151" /></maths> (公式8)其中,n取2或者3,n是关系整幅图像中提,取主轮廓的程度G<sub>peark</sub>为直方图峰值对应的梯度值;N或N’是相应范围内的像素点总个数;步骤五、强弱边缘连接:用高阈值Th和低阈值Tl对经过步骤三的梯度图进行处理,将梯度小于阈值的像素灰度赋值为0,分别分割得到两个阈值边缘图像:强边缘图H和弱边缘图L,在强边缘图H中连接边缘轮廓,连接至端点处时,在弱边缘图L中寻找领域相连的弱边缘点,填补图像H的边缘空隙,保证边缘的连续性和准确性。 |