冈萨雷斯数字图像处理10

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

四、边缘检测

Roberts采用两个模板来计算图像的梯度,如下图
-1 0 0 1 0 1 -1 0
水平梯度模板

垂直梯度模板


水平梯度为: Gx z9 z5 垂直梯度为: Gy z8 z6 2 2 1/ 2 梯度为: g Gx G y Roberts边缘检测器调用语法为: [g,t]=edge(f, ‘roberts’, T, dir); Roberts边缘检测器是最古老的边缘检测器之一, 常用于硬件计算中,既简单又快速
四、边缘检测


f Gx x 2 f f , 幅值为:f m ag(f) G 2 G x y G y y

虽然点检测和线检测算法都很简单,但边缘检测在 实际图像处理中更为常用。 边缘检测通常采用检测亮度的不连续性来实现,即 采用一阶导数和二阶导数来检测。 一阶导数一般用梯度来表示,公式为:
四、边缘检测



不同边缘检测方法的比较: f = imread(‘lp.bmp’); f=rgb2gray(f); [gsobel, t] = edge(f, ‘sobel’); figure, imshow(gsobel); [glog, t] = edge(f, ‘log’); figure, imshow(glog); [gcanny, t] = edge(f, ‘canny’); figure, imshow(gcanny);


1/ 2
(f / x) 2 (f / y ) 2


1/ 2
常用梯度的幅值表示梯度,近似为: f Gx G y 二阶导数用拉普拉斯算子来计算,公式为:
2 2 f ( x , y ) f ( x, y) 2 f 2 x y 2
四、边缘检测
灰度值截面图
四、边缘检测

Sobel采用两个模板来计算图像的梯度,如下图:
-1 -2 -1 -1 0 1
0
1
0
2
0
1
-2
-1
0
0
2
1

垂直梯度模板 水平梯度模板 水平梯度为: Gx ( z7 2z8 z9 ) ( z1 2z2 z3 )

垂直梯度为: Gy ( z3 2z6 z9 ) ( z1 2z4 z7 ) 2 2 1/ 2 g Gx G y Gx G y 梯度为: Sobel边缘检测器调用语法为: [g,t]=edge(f, ‘sobel’, T, dir); T是输入的阈值,t返回的阈值,dir是梯度方向,可 以是’horizontal’, ‘vertical’或’both’

通过不停迭代计算,得到最大类间方差对应的k值 对应的值即为阈值。
六、阈值处理

例10.7 计算全局阈值 T = 0.5*(double(min(f(:)))+double(max(f(:)))
done = false; While ~done g=f >= T; tnext = 0.5*(mean(f(g))+mean(f(~g))); done = abs(T-tnext)<0.5; T= Tnext; end
四、边缘检测
LoG全称为:Laplacian of Gaussian LoG检测器相当于先对图像进行高斯平滑,再计算 二阶导数(用拉普拉斯算子) r r 高斯函数: 2 2 h(r ) e 2 r 2 h( r ) e 2 4 其关于r的二阶导数为: 2 将图像与 h(r )做卷积,就可以得到双边缘图像, 然后使用零交差检测器定位边缘位置 LoG边缘检测器调用语法为: [g,t]=edge(f, ‘log’, T, sigma); 其中T是阈值,若为0则产生闭合边缘的轮廓, sigma是高斯函数的标准差的大小,Log算子的大 小为NXN, N=CEIL(SIGMA*3)*2+1
第10章 图像分割
一、主要内容

点检测 线检测 边缘检测 阈值分割 基于区域的分割 分水岭分割
二、点检测


图像中的孤立点,可以用模板来检测。若在某个点 的位置模板响应值R大于指定阈值T,则认为该位置 已检测到一个孤立点: |R|≧T 常用的一个点检测模板为: -1 -1 -1
左下:A点是三 条正弦曲线的 交点,对应 1,3,5三点形成 的 直线。B点对应 2,3,4三点形成 的直线
五、Hough变换检测直线


Hough变换检测直线的步骤: 找到包含最大值的Hough变换单元并记下其位置 把第一步中找到的最大点的邻域中的Hough变换 单元设为0 重复以上两个步骤,直到找到需要的峰值数为止。 例10.6 Hough变换检测直线
三、线检测

可以用特定的模板来检测指定方向的线,如:
-1 -1 -1 2 2 2 -1 -1 -1 -1 -1 -1 2 2 2 -1 -1 -1 -1 2 2 2 -1 -1 -1 2 -1 -1 -1 2 -1 2
-1 -1
-1 -1
水平

+45 °
垂直
-45 °
若对检测图像中指定方向的线感兴趣,则可以简单 地在图像上运行掩膜并对结果的绝对值做阈值处理
六、阈值处理

阈值处理相当于在图像中找到一个阈值T来区分前 景和背景,任何大于T的值设为前景,小于T的值 设为背景,即:
1 g ( x, y) 0
若f ( x, y) T
如f ( x, y) T


标注为1的像素对应于前景,标注为0的像素对应 为背景 阈值处理有全局阈值处理和局部阈值处理等
四、边缘检测
原车牌图像 Sobel边缘图像 LoG边缘图像 Canny边缘图像
五、Hough变换检测直线




上述各种边缘检测方法只能产生边缘上的像素,不 能把这些边缘像素连接起来。 Hough变换可以把检测到的边缘像素连接起来构 成特定形状的图形 Hough变换的基本思想是把直线从坐标空间变换 成参数空间。 参数空间中直线的标准表示法为:
-1 -1 8 -1 -1 -1

点检测可用滤波函数imfilter来实现。 实例:g=abs(imfilter(double(f), w))>=T;
二、点检测



例10.1,点检测 f = imread(‘Fig1002(a)(test_pattern_with_single_pixel).tif’); w=[-1 -1 -1; -1 8 -1; -1 -1 -1]; %检测模板 g=abs(imfilter(double(f), w)); %滤波 T=max(g(:)); %得到最大值 g = g>=T; %只取最大值一个点 imshow(g); %显示点的位置
x cos y sin

其中ρ是原点到直线的距离, θ是直线与x轴夹角。 由ρ的值和θ的值都在一定Байду номын сангаас围之内,所以可以将 参数空间进行有限细分。
五、Hough变换检测直线
直线参数空间示意图
两曲线交点对应一条直线
参数平面累加器单元
五、Hough变换检测直线
左上:笛卡 尔坐标上的 5个点 右上:5个点在 参数坐标中的 位置

2 2
2 2
四、边缘检测

LoG算子截面图
四、边缘检测





Canny检测器是最有效的边缘检测器,工作原理: 使用高斯滤波器对图像进行平滑,减少噪声 计算每个像素的局部梯度和方向 确定边缘点的局部最大值构成的脊,并跟踪所有脊 的顶部 8连接所有的脊像素得到边缘连接 Canny边缘检测器的语法为: [g,t]=edge(f, ‘canny’, T, sigma); T是阈值向量,sigma是高斯滤波器的标准差,默 认值为1
四、边缘检测

Prewitt采用两个模板来计算图像的梯度,如下图
-1 -1 -1 -1 0 1
0
1
0
1
0
1
-1
-1
0
0
1
1

垂直梯度模板 水平梯度模板 水平梯度为: Gx ( z7 z8 z9 ) ( z1 z2 z3 )


垂直梯度为: Gy ( z3 z6 z9 ) ( z1 z4 z7 ) 2 2 1/ 2 梯度为: g Gx G y Prewitt边缘检测器调用语法为: [g,t]=edge(f, ‘prewitt’, T, dir); Prewitt边缘检测器比Sobel检测器要简单一些, 但是容易产生一些噪声
一阶导数
灰度图像
二阶导数
四、边缘检测




边缘检测的基本准则: 找到亮度的一阶导数在幅度上比指定阈值大的位置 找到亮度的二阶导数有零交差的位置 matlab函数edge采用以上两个准则来检测边缘, 其采用了不同的方法来计算梯度,语法为: [g, t]=edge(f, ‘method’, parameters) f是输入图像,g是边缘二值图像,method是梯度 计算方法,t是梯度阈值。 检测梯度的方法有:Sobel, Prewitt, Roberts, Log, Zero crossing, Canny
六、阈值处理


一种全局阈值处理方法: 为T选一个初始估计值 使用T分割图像,形成大于T的像素集合G1和小于T 的像素集合G2 计算G1和G2范围内的平均亮度值μ 1和μ2 计算新的阈值T=1/2(μ 1+ μ2) 重复第2到第4步,直到迭代产生的T的差值小于给 定参数T0为止
六、阈值处理
三、线检测





例10.2 检测指定方向的线 f = imread(‘Fig1004(a)(wirebond_mask).tif’); w=[2 -1 -1; -1 2 -1; -1 -1 2]; %-45 °方向 g=imfilter(double(f), w); %滤波 imshow(g, []); %滤波结果 gtop=g(1:120, 1:120); % 左上角图像 gtop = pixeldup(gtop, 4); %放大图像 figure, imshow(gtop, []); %显示放大的图像 gbot=g(end-119:end,end-119:end);% 右下角图像 gbot=pixeldup(gbot, 4); figure, imshow(gbot, []);

OTSU方法(最大类间方差方法): 给定某个阈值k, 则类间方差定义为:
2 B 0 ( 0 T ) 2 1 ( 1 T ) 2 其中0是值小于k的像素所占的比例, 1是值大于或等于 k的像素的比例。 0是值小于k的像素的均值 1是值大于或等于 k的像素的均值 T 是所有像素的均值
相关文档
最新文档