您的位置:首页 > 编程语言 > MATLAB

图像处理笔记 —— 边缘检测

2016-03-12 12:41 651 查看

图像处理笔记 —— 边缘检测

源码运行平台:matlab2015

使用的图片库,USC-SIPI:http://sipi.usc.edu/database

一. 边缘检测的基本概念

图像的边缘相当于二元函数的梯度幅度比较大的位置点,而且梯度还能反映图像局部变化最快的方向,在某指定的方向上,把梯度模超过指定阈值的位置数据记录下来,就是沿该方向的图像边缘。

正确地描绘边缘应当包括两个方面:边缘点的位置以及局部的边缘方向。边缘一般是指灰度变化率最大的位置。图像边缘的成因:

图像灰度在表面法向变化的不连续性造成的边缘。

图像对象 在空间上的深度不一致形成的边缘。

在光顺表面上由于颜色的不一致性形成的边缘

物体的光影造成的边缘

常用术语

阶跃边:在剖面上看,图像灰度在奇异点,两侧由明显的差异

高台边:图像灰度除去奇异点位置之外保持平坦,只在奇异点附近突然跃起或者降低。

边缘点:图像灰度的显著变化点,又称奇异点

边缘段:边缘的坐标及其方向

边缘检测:从图像中检测边缘点和边缘段,并且描述边缘方向的过程。在边缘检测中,存在两种类型的错误:漏检了边缘点和非边缘点误认为边缘点。

轮廓:图像边缘的列表

边缘连接:将边缘列表元素有序化的过程

边缘跟踪:在图像或者图像序列中,确定轮廓的过程。

二. 基于微分算子的边缘检测原理

微分算子的两个重要性质,由于这两个性质,在使用微分算子之前,应该采用预处理抗噪声技术。

定域性: 即局部性,每一点的导数只与函数在该点邻近的信息有关

敏感性:对局部的函数值变化敏感,抗噪性差

微分算子的定域性:

设函数 f(x,y),(x,y)∈Ω 有足够高阶的连续可导性,则,Dm,n:f(x,y)→Dm,nf(x,y) 是有限阶偏导数,

Dm,nf(x,y)=∂m+nf(x,y)∂xm∂yn

那么要计算一点(a,b)处的导数Dm,n:f(a,b) ,只需要f(x,y) 在 (a,b) 的一个小邻域B={(x,y)|(x−a)2+(y−b)2≤ε} 中的信息{f(x,y)|(x,y)∈B} 即可。

边缘检测技术的基本步骤:

将相应的微分算子简化为离散差分格式,进而简化成模板(记为 T)。

利用模板对图像 f(x,y),获得模板作用后的结果 Tf(m,n)

提出阈值 h,在采用一阶微分算子情形,记录下高于某个阈值 h 的位置坐标 sh={(m,n)||Tf(m,n)|≥h} ,采用二阶微分算子时,一般时对某个阈值 ε>0 确立 sh={(m,n)||Tf(m,n)|≤ε}

对集合 sh 进行整理,同时调整阈值 h。

阈值 h 很重要,如果过小,则结果呈现为到处都是边缘点,如果过大,则使边缘点特别稀疏。

三. 算子

方向导数与梯度之间具有以下关系▽εf(a,b)=<ε,▽f(a,b)> 并且 0≤∥▽εf(a,b)∥≤∥ε∥∗∥▽f(a,b)∥ 假定 ▽f≠0,则该不等式右端取等号的充分必要条件:ε 与 ▽f 同方向,即 ε=k▽f; 该不等式左端取等号的充分必要条件:ε 与 ▽f 垂直。这表明,图像f(x,y)在任意一点 (a,b) 处,变化最快的方向就是梯度方向,同时,变化最慢的方向是与梯度相互垂直的方向。

Roberts 差分公式:

|T1f(i,j)|=|f(i,j)−f(i+1,j+1)|2+|f(i+1,j)−f(i,j+1)|2−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−√

|T2f(i,j)|=|f(i,j)−f(i+1,j+1)|+|f(i+1,j)−f(i,j+1)|

若只对 Rxf进行判决,则选择的是与 x 方向垂直的边缘。若只对 Ryf 进行判决,则选择的是与 y 方向垂直的边缘。

Sobel 算子差分公式为: |f(i,j)|=|Sx.∗f|+|Sy.∗f| ( 矩阵之间使用的是点乘)

其中 f 为

f(i−1,j−1)f(i−1,1)f(i−1,j+1)f(i,j−1)f(i,j)f(i,j+1)f(i+1,j−1)f(i+1,j)f(i+1,j+1)

Sx 为

−1−2−1000121

Sx 为

10−120−2101

Prewitt算子的模板为

Sx 为

−1−1−1000111

Sx 为

10−110−1101

Kirsch算子总共有8种模板,这里我们仅列出一种

Sx 为

53−350−35−3−3

Sx 为

−3−3−350−355−3

Robinson算子总共有8种模板,这里我们仅列出一种

Sx 为

10−120−2121

Sx 为

0−1−210−1210

四. 二阶微分算子

二阶微分算子可以找到一个一致的阈值进行选择来进行那个边缘检测定位。

在二维边缘检测中,经常采用 Laplace 微分算子

△f(x,y)=∂2f∂2x+∂2f∂2y

现实生活中采用前后向差分策略

∂2f∂x2→f(i+1,j)−2f(i,j)+f(i−1,j)

∂2f∂y2→f(i,j+1)−2f(i,j)+f(i,j−1)

相关源码及图像

%%matlab
clc;clear all;close all;

%读取图片
img = imread('4.1.06.tiff');
figure('NumberTitle','off','Name','边缘检测');
subplot(331);imshow(img);title('原图');

%转换成灰度图
img_g = rgb2gray(img);
subplot(332);imshow(img_g);title('灰度图');

%基于 Roberts 算子的一阶微分算子检测
roberts_img = edge(img_g,'roberts',0.1);
subplot(333);imshow(roberts_img);title('Roberts 算子');

%基于 Sobel 算子的一阶微分算子检测
roberts_img = edge(img_g,'sobel',0.1);
subplot(334);imshow(roberts_img);title('Sobel算子');

%基于 Prewitt 算子的一阶微分算子检测
roberts_img = edge(img_g,'prewitt',0.1);
subplot(335);imshow(roberts_img);title('Prewitt 算子');

%二阶微分算子检测
roberts_img = edge(img_g,'log',0.01);
subplot(336);imshow(roberts_img);title('二阶微分算子');

%基于 zerocross 算子的一阶微分算子检测
roberts_img = edge(img_g,'zerocross',0.01);
subplot(337);imshow(roberts_img);title('zerocross 算子');




参考文献

[1] 王桥. 数字图像处理[M]. 北京:科学出版社, 2009. 113-131
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息