边缘提取算子
- 格式:docx
- 大小:10.53 KB
- 文档页数:1
实现用三种边缘检测算子对一幅图像提取边缘,给出结果并分析。
用sobel,log,candy三种算子对图像进行边缘提取:f = imread('E:\木子的U盘\大三的木子\第一学期\数字图像处理\xback.jpg');f = rgb2gray(f); %将图像转化为灰度图像[gsobel_default,ts] = edge(f,'sobel');%利用sobel算子的默认语法得到边缘图像subplot(231);imshow(gsobel_default);title('g sobel default');[glog_default,tlog]=edge(f,'log');%利用log算子的默认语法得到边缘图像subplot(233);imshow(glog_default);title('g log default');[gcanny_default,tc]=edge(f,'canny');%利用candy算子的默认语法得到边缘图像subplot(235);imshow(gcanny_default);title('g canny default');gSobel_best=edge(f,'sobel',0.05);%减少不必要的细节subplot(232);imshow(gSobel_best);title('g sobel best');gLog_best=edge(f,'log',0.003,2.25);%subplot(234);imshow(gLog_best);title('g log best');gCanny_best=edge(f,'canny',[0.04 0.10],1.5);%subplot(236);imshow(gCanny_best);title('g canny best');MATLAB图像显示如下:分析如下:sobel得出的结果与试图检测边缘的目标相差太远。
图像识别中的轮廓提取算法探索引言:图像识别技术如今已经广泛应用于各个领域,其关键之一就是图像中的轮廓提取算法。
轮廓提取的准确与否直接影响到图像识别的效果。
本文将探索图像识别中常用的轮廓提取算法,并对其原理和优缺点进行分析。
一、边缘检测算法边缘检测是图像处理中最基础的一步,是进行轮廓提取的前提。
常用的边缘检测算法有Sobel算子、Laplacian算子和Canny算子等。
1. Sobel算子Sobel算子是一种基于梯度的边缘检测算法,其原理是通过计算每个像素点的梯度值来判断其是否为边缘点。
然后根据梯度值的大小确定边缘的强度,进而提取轮廓。
Sobel算子的优点是计算简单,对噪声鲁棒性强。
但其缺点也较为明显,容易产生边缘断裂的情况,并且对角线边缘检测效果较差。
2. Laplacian算子Laplacian算子是一种基于二阶导数的边缘检测算法,其原理是通过计算图像中每个像素点的二阶导数来判断其是否为边缘点。
Laplacian算子的优点是能够检测出边缘的交叉点,能够更精准地定位边缘。
但其缺点是对噪声比较敏感,容易产生误检。
3. Canny算子Canny算子是一种综合考虑多种因素的边缘检测算法,其原理是通过梯度计算、非极大值抑制和阈值处理来提取目标轮廓。
Canny算子的优点是能够提取清晰且连续的边缘,对噪声抑制效果好。
但其缺点是计算量较大,算法较为复杂。
二、区域生长算法区域生长算法是一种基于种子点的轮廓提取方法,其原理是在图像中选择若干个种子点,然后通过像素点之间的相似性判断来逐渐生长成为一个完整的区域。
区域生长算法的优点是能够提取出连续且相似的轮廓,适用于要求较高的图像识别任务。
但其缺点是对种子点的选择比较敏感,容易受到图像质量和噪声的影响。
三、边缘跟踪算法边缘跟踪算法是一种基于边缘连接的轮廓提取方法,其原理是通过追踪边缘点的连接关系,形成完整的轮廓。
边缘跟踪算法的优点是能够提取出精细的轮廓,并且对噪声抑制效果好。
图像边缘提取图像的边界信息⼀般通过灰度值突变来体现,所以图像边缘提取⼀般通过捕捉灰度突变的⽅法来实现,捕捉灰度突变可以通过求微分来实现导数越⼤说明变化越⼤,边缘信号越强1.Sobel算⼦也叫离散微分算⼦,⼀阶微分算⼦,求导算⼦,先做⾼斯平滑在做微分求导可以在各个⽅向上求图像的梯度如⽔平⽅向 Gx=[-1,0,1,-2,0,2,-1,0,1],垂直⽅向Gy=[-1,-2,-1,0,0,0,1,2,1]最终G=sqrt(Gx^2+Gy^2),或者G=|Gx|+|Gy|第⼆种的运算速度要快于第⼀种,所以⼀般采⽤第⼆种⽅法Sobel算⼦的改进版叫Scharr算⼦[-3,0,3,-10,0,10,-3,0,3]#include<iostream>#include<opencv2/opencv.hpp>using namespace std;using namespace cv;int main(int argc, char **argv){Mat src, dst;src = imread("b.png");if (src.empty()){cout << "load img failed" << endl;return -1;}imshow("input img", src);Mat gaussian,gray_src;GaussianBlur(src, gaussian, Size(3, 3), 0, 0);cvtColor(gaussian, gray_src, CV_BGR2GRAY);imshow("blur gray", gray_src);Mat xgrad, ygrad;Sobel(gray_src, xgrad, CV_16S, 1, 0, 3);Sobel(gray_src, ygrad, CV_16S, 0, 1, 3);convertScaleAbs(xgrad, xgrad);convertScaleAbs(ygrad, ygrad);imshow("x grade", xgrad);imshow("y grade", ygrad);addWeighted(xgrad, 0.5, ygrad, 0.5, 0, dst);imshow("output img", dst);/*dst = Mat(xgrad.size(), xgrad.type());int width = dst.cols;int height = dst.rows;for(int i=0;i<height;++i)for (int j = 0; j < width; ++j){int xg = xgrad.at<char>(i, j);int yg = ygrad.at<char>(i, j);int xy = xg + yg;dst.at<char>(i, j) = saturate_cast<uchar>(xy);}imshow("output img", dst);*/waitKey(0);return0;}plance算⼦求⼆阶导数,在⼆阶导数的时候,最⼤变化处的值为0,即边缘的⼆阶导数是0流程:⾼斯模糊去噪GaussianBlur()转为灰度值cvtColor()Laplance⼆阶导数计算Laplancian()取绝对值convertScaleAbs()显⽰结果#include<iostream>#include<opencv2/opencv.hpp>using namespace std;using namespace cv;int main(int argc, char **argv){Mat src, dst;src = imread("b.png");if (src.empty()){cout << "load img failed" << endl;return -1;}imshow("input img", src);Mat gaussian,gray_src;GaussianBlur(src, gaussian, Size(3, 3), 0, 0);cvtColor(gaussian, gray_src, CV_BGR2GRAY);imshow("blur gray", gray_src);Laplacian(gray_src, dst, CV_16S,3);convertScaleAbs(dst, dst);imshow("Laplacian", dst);threshold(dst, dst, 0, 255, THRESH_OTSU | THRESH_BINARY);imshow("output img", dst);/*dst = Mat(xgrad.size(), xgrad.type());int width = dst.cols;int height = dst.rows;for(int i=0;i<height;++i)for (int j = 0; j < width; ++j){int xg = xgrad.at<char>(i, j);int yg = ygrad.at<char>(i, j);int xy = xg + yg;dst.at<char>(i, j) = saturate_cast<uchar>(xy);}imshow("output img", dst);*/waitKey(0);return0;}3.Canny边缘检测步骤:⾼斯模糊 GaussianBlur灰度转换cvtColor计算梯度Sobel/Scharr⾮最⼤信号抑制⾼低阈值输出⼆值图像⾮最⼤信号抑制需要计算梯度⽅向T1为低阈值,T2为⾼阈值,凡是⾼于T2的都保留,凡是低于T1的都丢弃,从⾼于T2的像素出发,凡是⼤于T1且相互连接的都保留,最终得到⼀个输出⼆值图像推荐的⾼低阈值⽐为3:1或2:1Canny(src,dst,threshold_low,threshold_high,Sobel_size,Lwgradient)最后⼀个如果是true就⽤L2归⼀化(开根),如果不是就L1归⼀化(绝对值),⼀般⽤L1 #include<iostream>#include<opencv2/opencv.hpp>using namespace std;using namespace cv;Mat src, dst, gray_src, gaussian;int t1_value = 50;int max_value = 255;const char* OUTPUT_TITLE = "Canny Result";void Canny_Demo(int,void*);int main(int argc, char **argv){//Mat src, dst;src = imread("b.png");if (src.empty()){cout << "load img failed" << endl;return -1;}imshow("input img", src);//Mat gaussian,gray_src;//GaussianBlur(src, gaussian, Size(3, 3), 0, 0);namedWindow(OUTPUT_TITLE, CV_WINDOW_AUTOSIZE);cvtColor(src, gray_src, CV_BGR2GRAY);createTrackbar("Threshold Value :", OUTPUT_TITLE, &t1_value, max_value, Canny_Demo);Canny_Demo(0, 0);waitKey(0);return0;}void Canny_Demo(int, void*){Mat edge_output;blur(gray_src, gray_src, Size(3, 3), Point(-1, -1), BORDER_DEFAULT);Canny(gray_src, edge_output, t1_value, t1_value * 2, 3, false);//dst.create(src.size(), src.type());//src.copyTo(dst, edge_output);imshow(OUTPUT_TITLE, ~edge_output);}去掉注释会变成彩⾊图,注意修改imshow中的输出变量。
Matlab实现:图像边缘提取1、边缘提取算法⽅法⼀:⼀阶微分算⼦Sobel算⼦Sobel算⼦检测⽅法对灰度渐变和噪声较多的图像处理效果较好,Sobel算⼦对边缘定位不是很准确,图像的边缘不⽌⼀个像素。
Roberts算⼦Roberts算⼦检测⽅法对具有陡峭的低噪声的图像处理效果较好,但是利⽤roberts算⼦提取边缘的结果是边缘⽐较粗,因此边缘的定位不是很准确。
Prewitt算⼦Prewitt算⼦检测⽅法对灰度渐变和噪声较多的图像处理效果较好。
但边缘较宽,⽽且间断点多。
Canny算⼦Canny算⼦是⽬前边缘检测最常⽤的算法,效果也是最理想的。
Canny⽅法不容易受噪声⼲扰,能够检测到真正的弱边缘。
优点在于,使⽤两种不同的阈值分别检测强边缘和弱边缘,并且当弱边缘和强边缘相连时,才将弱边缘包含在输出图像中。
⽅法⼆:⼆阶微分算⼦Laplacian算⼦Laplacian算⼦法对噪声⽐较敏感,所以很少⽤该算⼦检测边缘,⽽是⽤来判断边缘像素视为与图像的明区还是暗区。
2、实验结果分析⼀、边缘提取:Sobel算⼦检测⽅法对灰度渐变和噪声较多的图像处理效果较好,sobel算⼦对边缘定位不是很准确,图像的边缘不⽌⼀个像素;Roberts算⼦检测⽅法对具有陡峭的低噪声的图像处理效果较好,但是利⽤roberts算⼦提取边缘的结果是边缘⽐较粗,因此边缘的定位不是很准确;Prewitt算⼦检测⽅法对灰度渐变和噪声较多的图像处理效果较好。
但边缘较宽,⽽且间断点多;Laplacian算⼦法对噪声⽐较敏感,所以很少⽤该算⼦检测边缘,⽽是⽤来判断边缘像素视为与图像的明区还是暗区;Canny⽅法不容易受噪声⼲扰,能够检测到真正的弱边缘。
优点在于,使⽤两种不同的阈值分别检测强边缘和弱边缘,并且当弱边缘和强边缘相连时,才将弱边缘包含在输出图像中。
⼆、边缘复合增强Sobel、Robert、Prewitt算⼦的增强效果并不是很明显,尤其是Robert算⼦,因为它提取的边缘点过于稀疏和离散;Laplacian算⼦和canny算⼦的增强效果都⽐较理想,将边缘叠加上去后,整个⼿的轮廓和边缘都很清晰,直观上看,canny算⼦实现的效果⽐Laplacian算⼦好,最明显的地⽅就是⼿指尖的边缘。
形态学边缘提取算法引言形态学边缘提取算法是一种基于形态学原理的图像处理算法,用于从图像中提取出目标物体的边缘信息。
通过分析和改变图像中物体的形状和结构,形态学边缘提取算法可以有效地去除图像中的噪声,突出目标物体的边缘特征,为之后的图像分析和识别任务提供基础。
一、形态学基础知识在介绍形态学边缘提取算法之前,我们首先需要了解一些形态学的基本概念和操作。
形态学是一种基于图像形状和结构的数学理论,其主要用于图像的形态学处理和分析。
在形态学中,常用的操作包括膨胀、腐蚀、开运算和闭运算等。
1. 膨胀操作膨胀操作是一种使用结构元素对图像进行扩张的操作。
膨胀可以使物体的边界膨胀和增大,从而连接物体的间断部分。
膨胀操作可以用来填充物体中的空洞或连接相邻物体。
2. 腐蚀操作腐蚀操作是一种使用结构元素对图像进行侵蚀的操作。
腐蚀可以使物体的边界腐蚀和减小,从而分离相邻物体或去除物体的凸起部分。
腐蚀操作可以用来去除图像中的噪声或者分离物体。
3. 开运算和闭运算开运算是指先对图像进行腐蚀操作,再对结果进行膨胀操作的叠加操作。
开运算可以去除图像中的小的噪点并保持物体的整体形状和结构。
闭运算则是先对图像进行膨胀操作,再对结果进行腐蚀操作的叠加操作。
闭运算可以填充图像中的空洞,并保持物体的整体形状和结构。
二、基于形态学的边缘提取算法基于形态学的边缘提取算法主要利用膨胀和腐蚀等形态学操作来突出图像中物体的边缘特征。
下面将介绍几种常见的基于形态学的边缘提取算法。
1. 基于梯度的边缘提取算法基于梯度的边缘提取算法是通过计算图像的梯度来提取物体的边缘信息。
其中,梯度操作是通过对图像应用膨胀和腐蚀操作来计算得到物体的边缘。
一般来说,先对图像进行膨胀操作,再对膨胀结果进行腐蚀操作,最后计算两者之差得到物体的边缘。
2. 基于灰度差分的边缘提取算法基于灰度差分的边缘提取算法是通过计算图像中像素灰度值的差分来提取物体的边缘信息。
其中,差分操作可以通过先对图像进行膨胀操作,再对膨胀结果和原图像进行减法操作得到。
• 95•图像边缘提取是图像识别中很重要的一步,提取边缘的效果可直接影响到目标识别的精度和准确度。
本文针对此问题,选择了三种有代表性的边缘提取算子,分别讨论了Sobel算子、Laplace算子和Canny算子,并分析各算子的特性和优缺点,初步证明了它们的边缘提取效果和适用场景。
引言:随着人工智能的飞速发展,计算机视觉方面的发展也越来越快,图像处理更是日趋成熟。
本文针对图像处理中的边缘提取,进行初步分析,为图像处理的深入研究奠定基础。
1.边缘提取Sobel 算子主要用于边缘提取,目的是计算图像灰度的近视梯度。
Sobel 算子是一种一阶微分算子,通过对上下、左右邻近点的灰度求加权差,来计算当前灰度值,因此对噪声有平滑效果,由于Sobel 算子没有把图像的主题和背景严格区分,所以边缘提取效果一般,对精度要求不高时,比较常用。
Laplace 算子是一种二阶算子,图像像素值发生最大变化的时候,它的二阶导数为零,Laplace 算子依此理论计算图像二阶导数,提取边缘。
Laplace 算子对孤立算子要比对边缘更加敏感,因此更适合于无噪声图像。
在边缘提取方面,通常和高斯模糊相结合来优化提取效果。
Canny 算子是一种多级边缘检测算法,首先利用高斯滤波器对图像进行平滑去噪,灰度转换并计算梯度,然后对非边缘像素进行抑制,最后通过高低阈值检测方法实现连接边缘。
Sobel 算子能检测出图像中比较细的边缘部分,且适用于不同的场合,有检测率高、定位精准和响应明确等特点。
缺点也特别明显,图像处理速度较慢。
图1 原图像图像边缘提取中三个算子的初步分析沈阳理工大学 史利莹• 96•2.结束语本文对Sobel 算子、Laplace 算子和Canny 算子在边缘提取上的表现进行了初步讨论,通过了解算法的工作原理,分析出算法的边缘提取思路。
三种算子可应用于不同的工作场景,比如对精度要求不高时,用Sobel 算子效率更高,对精度要求较高时,Canny 算子的效果更好。
目录摘要 (I)1简介 (1)1.1MATLAB 简介 (1)1.2数字图像处理简介 (1)2边缘检测 (3)2.1边缘的含义 (3)2.2边缘检测的含义 (3)2.3边缘检测的步骤 (3)3常用的边缘检测算子 (5)3.1微分算子 (5)3.1.1 Sobel算子 (5)3.1.2 robert算子 (6)3.1.3 prewitt算子 (6)3.2 Laplacian算子 (6)3.3 Log算法 (7)3.4 Canny边缘检测法 (7)4程序设计 (8)5运行结果 (10)6边缘检测结果比较 (12)7心得体会 (13)参考文献 (14)摘要边缘检测是利用边缘增强算子,突出图像中的局部边缘,然后定义象素的“边缘强度”,通过设置阈值的方法提取边缘点集。
本设计利用MATLAB软件分析几种应用于数字图像处理中的边缘检测算子,根据它们在实践中的应用结果进行研究,主要包括:Robert 边缘算子、Prewitt 边缘算子、Sobel 边缘算子、LoG边缘算子以及Laplacian 算子等对图像边缘检测,根据实验处理结果对几种算子进行比较。
关键词:Matlab边缘检测算子1简介1.1MATLAB简介Matlab是国际上最流行的科学与工程计算的软件工具,它起源于矩阵运算,已经发展成一种高度集成的计算机语言。
有人称它为“第四代”计算机语言,它提供了强大的科学运算、灵活的程序设计流程、高质量的图形可视化界面设计、便捷的与其它程序和语言接口的功能。
随着Matlab语言功能越来越强大,不断适应新的要求并提出新的解决方法,可以预见,在科学运算,自动控制与科学绘图领域,Matlab语言将长期保持其独一无二的地位。
Matlab 的特点如下:(1) 高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来;(2) 具有完备的图形处理功能,实现计算结果和编程的可视化;(3) 友好的用户界面及接近数学表达式的自然化语言,使学者易于学习和掌握;(4) 功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等) ,为用户提供了大量方便实用的处理工具.Matlab的优势如下:(1)友好的工作平台和编程环境(2)简单易用的程序语言(3)强大的科学计算机数据处理能力(4)出色的图形处理功能(5)应用广泛的模块集合工具箱(6)实用的程序接口和发布平台(7)应用软件开发(包括用户界面)1.2数字图像处理简介数字图像处理又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程,以提高图像的实用性,达到人们所要求的预期结果。
图像边缘提取算法研究报告概述图像的边缘包含了图像最重要的信息。
什么是边缘?一般是指图像灰度变化率最大的位置。
从成因上看,一般图像边缘主要由四个方面的因素形成:(1)图像灰度在表面法向变化的不连续造成的边缘;(2)图像对像素在空间上不一致形成的边缘;(3)在光滑的表面上由于颜色的不一致形成的边缘:(4)物体的光影造成的边缘。
图像边缘提取的作用有:(1)改良图像质量;(2)分离对象;(3)理解和重构视觉场景;(4)识别特征;(5)其他。
图像边缘检测是图像处理与计算机视觉共同的基本课题,1960年以来,相继发展了一系列采用梯度算子和拉普拉斯算子的边缘检测技术;为了降低图像噪声对边缘检测算法的干扰,1980年以来,又建立了高斯低通滤波与拉普拉斯算子复合的过零点检测Marr-Hildreth 理论;在另一个方向上,1980年代初期,Canny 从信号处理的角度出发,使边缘检测算法更具有实用性。
本报告主要介绍以上以上几个方面的内容,通过matlab 程序实现以上几种算法,对比各种算法的性能。
算法介绍及相应程序一、 基于微分算子的边缘检测检测图像边缘信息,可以把图像看做曲面,边缘就是图像的变化最剧烈的位置。
这里所讲的边缘信息包含两个方面:一是边缘的具体位置,即像素的坐标;而是边缘的方向。
微分算子有两个重要性质:定域性(或局部性)、敏感性(或无界性)。
敏感性就是说,它对局部的函数值变化很敏感,但是因其对变化过于敏感又有了天然的缺陷——不能抵抗噪声。
局部性意思是指,每一点的导数只与函数在该点邻近的信息有关。
主要有两大类基于微分算子的边缘检测技术:一阶微分算子边缘检测与二阶微分算子边缘检测。
这些检测技术采用以下的基本步骤:(1)将相应的微分算子简化为离散的差分格式,进而简化为模板(记为T)。
(2)利用模板对图像f(m,n)进行运算,获得模板作用后的结果Tf(m,n)。
(3)提出阈值h,在采用一阶微分算子情形记录下高于某个阈值h 的位置坐标}),(|),{(h n m Tf n m S h ≥=(而采用二阶微分算子情形,一般是对某个阈值0>ε确立}),(|),{(ε≥=n m Tf n m S h )(4) 对集合h S 进行整理,同时调整阈值h 。
halcon边缘提取算子Halcon是一款高效的图像处理工具,它提供了丰富的算子,实现了常用的图像处理功能。
其中,边缘提取算子是常用的一种。
边缘提取算子的原理是根据图像中的像素灰度值的不同,确定边界处的像素,并将其结果输出。
下面,我们将围绕Halcon边缘提取算子展开阐述。
1.导入图像对于任意一种图像处理算法,首先要做的是导入待处理的图像。
我们可以使用Halcon的read_image命令,将图像文件导入到Halcon 中。
例如,我们可以使用如下代码读取一个名为“test.jpg”的图像:read_image(Image,'test.jpg')2.转换灰度图像省略转换成灰度图像的步骤,可直接使用边缘提取算子。
3.应用边缘提取算子Halcon提供了不同的边缘提取算子,如Sobel、Prewitt、Laplacian等。
其中,最常用的是Sobel算子。
我们可以使用Halcon的sobel_amp函数,对图像应用Sobel算子。
sobel_amp(Image,&Edges,3)其中,sobel_amp函数的第一个参数是需要进行边缘提取处理的图像,&Edges是输出的边缘图像。
第三个参数3表示使用一个大小为3的卷积核。
4.显示结果处理完成后,我们可以使用Halcon的dev_display函数,将图像输出到显示器上。
dev_display(Edges)至此,我们完成了边缘提取算子的全过程。
这是边缘提取算法用Halcon实现的一种流程,其中有不同的细节和技巧需要掌握。
但总的来说,边缘提取算法是实现大多数图像处理功能的重要基础之一。
总结:边缘提取算子是Halcon中的一个重要图像处理算法,其原理是根据图像中的像素灰度值的不同,确定边界处的像素,并将其结果输出。
实现该算法的步骤包括:导入图像、转换为灰度图像、应用边缘提取算子和显示结果。
了解并掌握该算法可以为进一步学习Halcon的图像处理算法打下坚实的基础。
图像的边缘提取专业:信息与计算科学班级:1001 姓名:何沛沛学号:201031101015一、摘要边缘提取,就是将图像中各种人物及物品的边缘的刻画出来,而其它的非边缘区域则用边缘区域的对比色进行填充。
让我们再把视线回到二维灰度值图上,很显然,如果把图像看成一个连续的曲面,那么在边缘处由于灰度值的剧烈变化,那么无疑,在边缘处像素点的导数(可以是关于x或y的一阶导数或关于x,y的二阶导数)必定要高过非边缘区域处的点。
而由于我们的图像是一个个像素点组成的,所以,用离散化的点的刻画不仅更为直接,而且要比连续的曲面处理方便不少。
这时,要做的只是将连续曲面上的导数进行离散化(将微分方程改写成差分方程)。
在边缘提取里,将这样的离散化,称作"算子"。
其中多为一阶算子及二阶算子算子。
在此选用Roberts算子配合图像细化,在其基础上做二值化设定一个阈值T,从多值的图像中直接提取目标物体。
接下来对图像进行边缘提取及外包得到主体部分的大致轮廓。
由于图像部分弱边缘的中断,最后进行图像的强弱边缘连接。
二、实验目的提取出人像的轮廓。
三、基本步骤:第一步:采用Roberts算子利用局部差分算子进行边缘检测,及边缘细化。
先获取图像宽高,数据再对图像数据与模板做卷积Convolution(float *fpData, float *fpKernel, float fCoef, int nSize, unsigned char *nResult)//对x分量作卷积Convolution(pGray, roberts_x, fTempC, nSize, &Data_x);//对y分量作卷积Convolution(pGray, roberts_y, fTempC, nSize, &Data_y);细化:roberts在图像边缘附近的区域内产生较宽的响应void CDipDoc::OnThining()左图为一阶微分算子,右图为二阶微分算子。
边缘提取以及边缘增强是不少图像处理软件都具有的基本功能,它的增强效果很明显,在用于识别的应用中,图像边缘也是非常重要的特征之一。
图像边缘保留了原始图像中相当重要的部分信息,而又使得总的数据量减小了很多,这正符合特征提取的要求。
在以后要谈到的霍夫变换(检测图像中的几何形状)中,边缘提取就是前提步骤。
这里我们只考虑灰度图像,用于图像识别的边缘提取比起仅仅用于视觉效果增强的边缘提取要复杂一些。
要给图像的边缘下一个定义还挺困难的,从人的直观感受来说,边缘对应于物体的边界。
图像上灰度变化剧烈的区域比较符合这个要求,我们一般会以这个特征来提取图像的边缘。
但在遇到包含纹理的图像上,这有点问题,比如说,图像中的人穿了黑白格子的衣服,我们往往不希望提取出来的边缘包括衣服上的方格。
但这个比较困难,涉及到纹理图像的处理等方法。
好了,既然边缘提取是要保留图像的灰度变化剧烈的区域,从数学上,最直观的方法就是微分(对于数字图像来说就是差分),在信号处理的角度来看,也可以说是用高通滤波器,即保留高频信号。
这是最关键的一步,在此之前有时需要对输入图像进行消除噪声的处理。
用于图像识别的边缘提取往往需要输出的边缘是二值图像,即只有黑白两个灰度的图像,其中一个灰度代表边缘,另一个代表背景。
此外,还需要把边缘细化成只有一个像素的宽度。
总的说来边缘提取的步骤如下:1,去噪声2,微分运算3,2值化处理4,细化第二步是关键,有不少书把第二步就直接称为边缘提取。
实现它的算法也有很多,一般的图像处理教科书上都会介绍好几种,如拉普拉兹算子,索贝尔算子,罗伯特算子等等。
这些都是模板运算,首先定义一个模板,模板的大小以3*3的较常见,也有2*2,5*5或更大尺寸的。
运算时,把模板中心对应到图像的每一个像素位置,然后按照模板对应的公式对中心像素和它周围的像素进行数学运算,算出的结果作为输出图像对应像素点的值。
需要说明的是,模板运算是图像的一种处理手段--邻域处理,有许多图像增强效果都可以采用模板运算实现,如平滑效果,中值滤波(一种消除噪声的方法),油画效果,图像的凹凸效果等等。
一阶: Roberts算子、Sobel算子、Prewitt算子、Kirsch 算子、Robinson算子
二阶: Laplacian算子、Canny算子、Marr-Hildreth(LoG 算子)
Roberts 算子
在(i+1/2,j+1/2)处差分
转化为模板即为
Roberts算子,又称罗伯茨算子,是一种最简单的算子,是一种利用局部差分算子寻找边缘的算子。
他采用对角线方向相邻两象素之差近似梯度幅值检测边缘。
检测垂直边缘的效果好于斜向边缘,定位精度高,对噪声敏感,无法抑制噪声的影响。
Roberts算子检测方法对具有陡峭的低噪声的图像处理效果较好,但是提取边缘的结果是边缘比较粗,因此边缘的定位不是很准确。