数字图像处理的matlab作业

发布 2022-07-18 20:55:28 阅读 3573

分析图像边缘检测原理,给出梯度算子、拉普拉斯算子和canny算子原理分析过程。选取两幅图像,编程对其进行边缘检测(要求使用 sobel算子、laplace算子和canny算子),分析结果,比较三种算子的性能。

1)图像边缘检测原理分析:

边缘检测的实质是采用某种算法来提取出图像中对象与背景间的交界线。我们将边缘定义为图像中灰度发生急剧变化的区域边界。图像灰度的变化情况可以用图像灰度分布的梯度来反映,因此我们可以用局部图像微分技术来获得边缘检测算子。

经典的边缘检测方法,是对原始图像中像素的某小邻域来构造边缘检测算子。以下是对几种经典的边缘检测算子进行理论分析,并对各自的性能特点作出了比较和评价。

不妨记: ▽x,y)= 为图像的梯度,▽(x,y)包含灰度变化信息。

记: (x,y)= 为▽(x,y)的梯度,e(x,y)可以用作边缘检测算子。为了简化计算,也可以将e(x, y)定义为偏导数与的绝对值之和:

以这些理论为依据,提出了许多算法,常用的边缘检测方法有:roberts边缘检测算子、sobel边缘检测算子、prewitt边缘检测算子、canny边缘检测算子、laplace边缘检测算子等等。图像边缘检测的基本步骤:

1) 滤波。边缘检测主要基于导数计算, 但受噪声影响。但滤波器在降低噪声的同时也导致边缘强度的损失。

2) 增强。增强算法将邻域中灰度有显著变化的点突出显示。一般通过计算梯度幅值完成。

3) 检测。但在有些图像中梯度幅值较大的并不是边缘点。最简单的边缘检测是梯度幅值阈值判定。

4) 定位。精确确定边缘的位置。

(1)sobel边缘检测算子原理分析:

对数字图像的每个像素,考察它上、下、左、右邻点灰度的加权差,与之接近的邻点的权大。据此。定义sobel算子如下:

(+2+)-2+)|i-1,j-1)+2 (i,j-1)+ i+ i-1,j+1)+2 (i,j+1)+ i+

其卷积算子。

图1-4 sobel边缘检测算子方向模板。

适当取门限th,作如下判断: >th, (i, j)为阶跃状边缘点,为边。

缘图像。sobel算子很容易在空间上实现,sobel边缘检测器不但产生较好的边缘检测效果,而且受噪声的影响也比较小。当使用大的领域时,抗噪声特性会更好,但这样做会增加计算量,并且得出的边缘也较粗。

sobel算子利用像素点上下、左右邻点的灰度加权算法,根据在边缘点处达到极值这一现象进行边缘的检测。sobel算子对噪声具有平滑作用,提供较为精确的边缘方向信息,但它同时也会检测出许多的伪边缘,边缘定位精度不够高。当对精度要求不是很高时,是一种较为常用的边缘检测方法。

2)laplace检测算子原理分析:

正如上面所提到的,利用图像强度二阶导数的零交叉点来求边缘点的算法对噪声十分敏感,所以,希望在边缘增强前滤除噪声.为此,marr和hildreth[146]将高斯滤波和拉普拉斯边缘检测结合在一起,形成log(laplacian of gaussian, log)算法,也称之为拉普拉斯高斯算法.log边缘检测器的基本特征是:

1. 平滑滤波器是高斯滤波器.

2. 增强步骤采用二阶导数(二维拉普拉斯函数).

3. 边缘检测判据是二阶导数零交叉点并对应一阶导数的较大峰值.

4. 使用线性内插方法在子像素分辨率水平上估计边缘的位置.

这种方法的特点是图像首先与高斯滤波器进行卷积(高斯滤波器在6.6节中将详细讨论),这一步既平滑了图像又降低了噪声,孤立的噪声点和较小的结构组织将被滤除.由于平滑会导致边缘的延展,因此边缘检测器只考虑那些具有局部梯度最大值的点为边缘点.这一点可以用二阶导数的零交叉点来实现.拉普拉斯函数用作二维二阶导数的近似,是因为它是一种无方向算子.为了避免检测出非显著边缘,应选择一阶导数大于某一阈值的零交叉点作为边缘点.

log算子的输出是通过卷积运算得到的:

根据卷积求导法有。

其中:滤波(通常是平滑)、增强、检测这三个边缘检测步骤对使用log边缘检测仍然成立,其中平滑是用高斯滤波器来完成的;增强是将边缘转换成零交叉点来实现的;边缘检测则是通过检测零交叉点来进行的.

可以看到,零交叉点的斜率依赖于图像强度在穿过边缘时的变化对比度.剩下的问题是把那些由不同尺度算子检测到的边缘组合起来.在上述方法中,边缘是在特定的分辨下得到的.为了从图像中得到真正的边缘,有必要把那些通过不同尺度算子得到的信息组合起来.

图拉普拉斯高斯模板

3)canny边缘检测算子原理分析:

canny的目标是找到一个最优的边缘检测算法, 最优边缘检测的含义是:

1) 好的检测结果, 或者说对边缘的检测错误率要尽可能低,就是在图像上边缘出现的地方检测结果中不应该没有: 另一方面也不应出现虚假的边缘。这是显然的, 所有使用边缘检测做更深入工作的系统, 它的性能都依赖于边缘检测的误差;

2) 对边缘的定位要准确,也就是标记出的边缘位置要和图像上真正边缘的中心位置充分接近;在实践中发现仅仅满足这两条的算子并不好, 有的算子会对一个边缘产生多个响应。也就是说图像上本来只有一个边缘点的, 可是检测出来就会出现多个边缘点。

3 ) 对同一边缘要有低的响应次数。图像中的边缘最好只标识一次, 并且可能存在的图像噪声部分不应标识为边缘。canny算子结合了这三个准则, 因此具有很好的边缘检测性能, 他是通过寻找图像梯度的局部极大值, 用高斯一阶微分来计算梯度。

算法中通过双阈值法来检测强边缘和弱边缘, 当弱边缘与强边缘连接成轮廓边缘才输出。所以 canny算法不容易受噪声影响, 能够在噪声和边缘检测间取得较好的平衡。

(1)图象边缘检测必须满足两个条件:一能有效地抑制噪声;二必须尽量精确确定边缘的位置。

2)根据对信噪比与定位乘积进行测度,得到最优化逼近算子。这就是canny边缘检测算子。

3)类似与marr(log)边缘检测方法,也属于先平滑后求导数的方法。

canny边缘检测步骤:

step1:用高斯滤波器平滑图象;

step2:用一阶偏导的有限差分来计算梯度的幅值和方向;

step3:对梯度幅值进行非极大值抑制。

step4:用双阈值算法检测和连接边缘。

二)基于matlab的边缘检测技术编程。

对和采用直方图技术进行处理,如下:

matlab程序如下:

对进行边缘检测的程序。

clear all;

close all;

warning off all;

a=imread('d:\work\')

i=rgb2gray(a如果是其他类型图像,请先转换为灰度图。

%没有噪声时的检测结果。

mn_sobel = edge(i,'sobel');

mn_laplace = edge(i,'log');

mn_canny = edge(i,'canny');

figure(1);

subplot(2,2,1),imshow(i),xlabel('原始图像');

subplot(2,2,2),imshow(mn_sobel),xlabel('sobel检测');

subplot(2,2,3),imshow(mn_laplace),xlabel('laplace检测');

subplot(2,2,4),imshow(mn_canny),xlabel('canny检测');

%加入高斯噪声(μ=0,σ^2=0.005)检测结果。

i_g1 = imnoise(i,'gaussian',0,0.005);

mn_sobel = edge(i_g1,'sobel');

mn_laplace = edge(i_g1,'log');

mn_canny = edge(i_g1,'canny');

figure(2);

subplot(2,2,1),imshow(i_g1),xlabel('加入高斯噪声(μ=0,σ^2=0.005)图像');

subplot(2,2,2),imshow(mn_sobel),xlabel('sobel检测');

subplot(2,2,3),imshow(mn_laplace),xlabel('laplace检测');

subplot(2,2,4),imshow(mn_canny),xlabel('canny检测');

%加入高斯噪声(μ=0,σ^2=0.01)检测结果。

i_g2 = imnoise(i,'gaussian',0,0.01);

mn_sobel = edge(i_g2,'sobel');

mn_laplace = edge(i_g2,'log');

mn_canny = edge(i_g2,'canny');

figure(3);

subplot(2,2,1),imshow(i_g2),xlabel('加入高斯噪声(μ=0,σ^2=0.01)图像');

subplot(2,2,2),imshow(mn_sobel),xlabel('sobel检测');

subplot(2,2,3),imshow(mn_laplace),xlabel('laplace检测');

subplot(2,2,4),imshow(mn_canny),xlabel('canny检测');

对进行边缘检测的程序。

close all;

warning off all;

a=imread('d:\work\')

i=rgb2gray(a如果是其他类型图像,请先转换为灰度图。

%没有噪声时的检测结果。

mn_sobel = edge(i,'sobel');

mn_laplace = edge(i,'log');

mn_canny = edge(i,'canny');

数字图像处理作业

2017暑假小学期。专业。班级。姓名。学号。摘要 数字图像处理的目的是改善 质量,利用matlab设计几个简单的图像处理程序。该程序具备图像处理的日常功能 图像代数与几何运算 直方图与图像明暗关系分析 直方图均衡化 滤波器的使用与图像分割技术。通过运行 解释结合图像效果,分别介绍了处理原理与过程。关...

数字图像处理作业

图1是一张因拍摄时晃动而产生模糊的图像,试估计其psf并恢复图像。题中已明确此图是由于运动导致的模糊,所以采取课件上标准的恢复方法。首先,对 进行laplace滤波,是为了凸显图像中的高频部分,而后对图像进行radon变换以求出运动模糊的角度,由于角度标准和方向问题,需要将求出的角度减去90 也即。...

数字图像处理作业

数字图像处理上机实验题。一 基础部分。1.产生右图所示图像 f1 m,n 其中图像大小为256 256,中间亮条为128 32,暗处 0,亮处 100。对其进行fft 1 同屏显示原图f1 m,n 和fft f1 的幅度谱图 2 若令f2 m,n 1 m n f1 m,n 重复以上过程,比较二者幅度...