一种简单易行的灰度图像边缘检测方法_王小明

合集下载

一种简单的灰度图像边缘检测算法

一种简单的灰度图像边缘检测算法
干扰 , 达 到高精 度和抗 噪性 这 两者 之 间的统一 . 本 文
收稿 日期 : 2 0 1 2 - 0 5 - 1 5
定义二维数组 P i x e l s [ ] [ ] , 用于存放从原始图
基金项 目: 国家 自然科学基金( 1 0 7 7 1 0 9 1 ) 作者简 介: 孙 亮( 1 9 8 7 一 ) , 男, 湖北天 门人 , 硕士生 , 主要研究方 向为智能优化算法及应用. E — ma i l : l i a n g s l l @1 2 6 . c o m
幅 图像 的大部分 信息 , 它 反 映 了 图像 中一 个物 体
区别 于其 他 物 体最 基 本 的特征 [ 1 ] . 所谓 边 缘 是 指其
周围像素灰度值有 明显变化 ( 阶跃变化或屋顶变化) 的那 些像 素 的集合 . 边 缘广 泛 存 在 于 目标 与 背 景之
间、 目标 与 目标之 间 、 区域 与 区域 、 基 元 与基元 之 间. 边 缘 检测 是 基 于 边界 的图像 分 割 方 法 , 是 采用 某 种算 法来 提取 出 图像 中对 象 与 背 景 问 的交 界 线 . 边 缘检 测是 实 际中许 多 图像 处理 应用 的基 础 , 目前 , 数 字 图像边 缘检 测 技术 广 泛 应 用 于 图像分 割 、 运 动 检测、 目标 跟踪 、 人 脸 识 别 等 领域 [ 2 ] , 因此研 究 图像 边 缘检 测 与提取方 法 具有 重要 的理论 意 义和现 实 意
第3 2 卷 第 1 期 2 0 1 3年 2月
文章编号 : 1 0 0 1 - 4 3 7 3 ( 2 0 1 3 ) 0 1 - 0 1 1 1 — 0 5


一种简单的灰度图像边缘检测算法

一种简单的灰度图像边缘检测算法

一种简单的灰度图像边缘检测算法孙亮;李敬文【摘要】提出了一种新的基于平行方向上像素点灰度值平均值求差的边缘检测算法.根据像素点及其八邻域的灰度值,在尽量保证图像信息完整的基础上,选择合适的阈值提取出尽可能合适数量的边缘点,并利用边缘的连续性原理对结果中的噪声点进行筛选,以达到边缘提取的目的,提高图像边缘检测效果.实验表明:此算法对灰度图像是一种简单、有效的边缘检测算法.%A new scheme to detect image edge using difference of average gray level of pixels located in parallel lines is brought forward. Then according to the gray level of a pixel and neighbor pixels, after an appropriate threshold value is chosen, the right amount of edge points is extracted on the premise of ensuring the integrity of image information as better as possible. In order to achieve extraction, continuity of edge is used to filter the noise points. It can improve image detection effect in the result lastly.【期刊名称】《兰州交通大学学报》【年(卷),期】2013(032)001【总页数】5页(P111-115)【关键词】边缘检测;灰度值平均值求差;阈值选取【作者】孙亮;李敬文【作者单位】兰州交通大学电子与信息工程学院,甘肃兰州730070【正文语种】中文【中图分类】TP301.6边缘是图像的最重要的特征之一,往往携带着一幅图像的大部分信息,它反映了图像中一个物体区别于其他物体最基本的特征[1].所谓边缘是指其周围像素灰度值有明显变化(阶跃变化或屋顶变化)的那些像素的集合.边缘广泛存在于目标与背景之间、目标与目标之间、区域与区域、基元与基元之间.边缘检测是基于边界的图像分割方法,是采用某种算法来提取出图像中对象与背景间的交界线.边缘检测是实际中许多图像处理应用的基础,目前,数字图像边缘检测技术广泛应用于图像分割、运动检测、目标跟踪、人脸识别等领域[2],因此研究图像边缘检测与提取方法具有重要的理论意义和现实意义.传统的图像边缘检测是利用图像一阶导数的极值或二阶导数的过零点信息来提供判断边缘点的依据[3].利用一阶微分的算子有Roberts、Sobel、Prewitt、Kirsch,利用二阶微分的算子有Laplace、LOG等.近些年人们将模糊理论、统计分析、小波变换、数学形态学,神经网络、遗传算法、曲面拟合等与边缘检测联系起来,提出了许多新的边缘检测算法.边缘检测存在着检测精度和边缘定位精度以及抗噪声等方面的矛盾[4],Canny 在1986年提出了边缘检测的三个标准[5]:好的检测结果,好的边缘定位和单边缘响应.研究的难点就在于如何保证较高的检测精确度,同时又要尽量减低噪声对检测结果的干扰,达到高精度和抗噪性这两者之间的统一.本文根据像素点及其八领域像素点的灰度值,提出了一种基于在邻域内平行方向上像素点灰度值平均值求差的边缘检测算法.1.1 标记疑似边缘点灰度图像(每像素所占位数为8)和彩色图像(每像素所占位数为24)是数字图像处理中最常用到的类型,本文这里提出的边缘检测仅针对灰度图像.由于对边缘点的判断要用到输入图像像素点的灰度值,而算法中又涉及到对像素点灰度值的改变,所以必须重新申请输出图像的缓冲区,而不能直接在输入图像中对像素点的灰度值进行修改.考虑像素点及处在其八邻域的相邻像素点,即上、下、左、右、左上、右上、右下、左下的8个相邻像素点.做如下处理:将所有待检测的图像都看作图,所有像素点就对应于图中的各个顶点,像素点及其八邻域的相邻像素点可以看作每个顶点都与周围的邻点存在八条关联边,每条关联边的权值这里定义成该边关联的这两个像素点的灰度值之差,如图1所示.这样就将一幅图像与一带权无向图进行了映射.定义二维数组Pixels[][],用于存放从原始图片中提取到的所有像素点的信息,数组的行和列分别为图像高度h和宽度w.先定义一个结构体PIXELTUPLE.其中:gray为该像素点的灰度值;flag是边缘点标记;0代表非边缘点;1代表边缘点,初始化时数组中的所有元素的flag字段置为0.在边缘点位置的某一方向或某几个方向上,灰度值的变化往往很明显,这也是我们判断边缘点的依据.上述像素点及其八邻域的相邻像素点实际上确定了4个方向,即水平、垂直和两条对角线方向,可以看作4条直线交于中心像素点,即线1,线2、线3和线4,在八邻域内为四条直线段,如图1.首先在这四个方向中找出像素点灰度值变化最大的方向.计算每个方向对应的两条关联边权值之和,如e1+e8,e2+e7,e3+e6,e4+e5,比较这4个和,权值之和最大的将其记录下来.这样就能在4个方向中找出像素点灰度值变化最大的方向,记录下这个方向.接着观察像素点在灰度值变化最大的方向相垂直的方向上的灰度值变化.这里先找出与灰度值变化最大的方向在数学上最接近的两条平行线,例如如果e4+e5最大,则与其相邻的两条平行线就是线1和线2,如图2所示.计算落在灰度值变化最大的方向(这个方向肯定包括中心像素点)上的3个像素点的灰度值的平均值,然后分别与其最接近的两条平行线上的几个像素点(在八邻域内可能为2个,也可能为3个)的平均值作差,这里计算3个平均值需要用到数组元素下标来定位像素点.比较两个差值davg1,davg2,记录其中较大的差值并用变量mdavg保存.davg1,davg2,mdavg的关系用式子表示为根据mdavg与事先设定的阈值T作比较,如果大于则为疑似边缘点,否则为非边缘点.这里把阈值设定为变量,以便根据不同的图像能选择合适的阈值,以得到最好的检测效果.当像素点位于图像四个边界上时,由于这些点在某些方向上已不存在邻点,像素点的八领域可能不全,为了简便起见,直接将其判定为非边缘点.综上所述边缘点的判断可表示为式(2):经过上述检测的边缘点只能定性为疑似边缘点,因为噪声点和真实的边缘点周围灰度值都具有较明显的变化.由于图像中噪声信息的不确定性,决定了检测算法中的抗噪性能成为衡量算法好坏的一个重要指标.1.2 去除噪声点降低噪声的方法主要采用滤波.由于经典的边缘检测算法主要是基于图像强度的一阶和二阶导数,但导数的计算对噪声很敏感,如果不对输入图像中的噪声做妥善处理,将使我们检测得到的图像边缘的应用价值大打折扣[6].所以在对输入图像做边缘检测之前,有一个图像预处理的步骤.图像预处理后,由于在边缘检测中噪声仍然可能被引入,这里我们设法去除一部分噪声点.如果一个点被检测为边缘点,根据边缘的连续性,该点的周围理应还存在其他边缘点,以保持整个边缘的完整性.去除噪声点的原理是:对边缘图进行扫描,如果某一点为边缘点,而与其相邻的8个点都是非边缘点,则认为该点不是边缘点而是噪声点,也即单个孤立的边缘点为噪声点[7].把噪声点从边缘图上去除,尽量降低检测结果受噪声干扰的程度.对被判断为疑似边缘点的像素点进行筛选,从中找出孤立点,即其他疑似边缘点中没有任何一个点与该点相邻,并将该孤立点标识为噪声点,筛选后剩余的点均视为边缘点.对于每一个待筛选的疑似边缘点,判断是否是噪声点可如式(3)所表示.对噪声点将Pixels[][]的flag字段重新置为0.1.3 算法步骤1)读取图像,读取图像BMP文件结构的位图信息头获取图像的高度h、宽度w和每像素所占位数,利用位图数据按行列依次初始化数组Pixels,初始化时所有的Pixels[i][j].flag置为0;2)申请输出图像缓冲区,输出图像与输入图像设置为同一类型,输出图像的宽、高和每行像素所占字节数、每像素所占位数设置与输入图像相同.然后赋i:=1,j:=1;3)对像素点Pixels[i][j],按权值定义给e1到e8赋值.计算分别在线k(k=1,2,3,4)上的两条关联边的权值和,比较这四个和,最大的赋给maxw,并将这个权值和最大对应的方向赋给tag;根据tag的值确定最接近的两条平行线,计算落在这两条平行线上的像素点灰度值的平均值avg1,avg2,然后计算落在方向tag上的3个像素点的平均值avg,davg 1=|avg-avg 1|,davg 2=|avg-avg2|,取mdavg=max{davg1,davg 2};4)根据mdavg与设定的阈值T作比较.如果则Pixels[i][j].flag置为1,否则转入下一步;5)j++.如果j<w-1,返回步骤3);如果j=w-1,则i++:如果i<h-1,置j=1返回步骤3),如果i=h-1则转入下一步;6)按行列依次判断i行j列像素点的flag字段即Pixels[i][j].flag是否为1.如果否,则输出图像在i行、j列的像素点灰度值置为0;如果是,则接着判断该八邻域内8个相邻像素点的flag字段是否都为0:如果是,输出图像在i行、j列的像素点灰度值置为0;否则,输出图像在i行、j列的像素点灰度值置为255;7)输出边缘检测结果并保存.1.4 算法的时间复杂度和空间复杂度由于要对存储矩阵中的每一个像素点进行操作,算法的时间复杂度为O(hw),其中:h为图像的高度;w为图像的宽度.算法的空间复杂度为O(h* lineByte)+O(hw),其中:h为图像的高度;lineByte为每行像素所占字节数,因为申请输出图像缓冲区所需的辅助空间和输入图像所占空间一样,而同时定义了一个结构体数组Pixels[h][w].以下结合灰度图像测试实例在VC++6.0上,对算法进行测试和分析.这里没有与传统经典算法一一比较,只选了同样是模板的Sobel算子,结合Sobel算子对图像边缘检测的效果进行比较.实验中各算法边缘点灰度值为255,非边缘点灰度值为0,这样越明显的边缘在输出图中显示得越明亮.图3a和图3b是Lena原图和flower原图,图4a和图5a是利用Sobel算子进行边缘检测的结果,而图4b和图5b分别是当阈值T=5和T=10时用本文提出的边缘检测算法提取的较好的边缘效果.图5c和图5d是当T=5和T=15时对flower图像提取的边缘,用作与图5b进行对比.结合图4a和图4b以及图5a和图5b进行对比,可以看出Sobel边缘检测算子计算速度快,边缘连续性较好,但细节完整效果粗略,有一些模糊的边缘以及一些细节处,它未能有效地提取出边缘,而与Sobel算子相比本文提出的边缘检测算法在选择合适的阈值的前提下得到的图像边缘在边缘的定位精度、完整程度和连续性上并不比Sobel算子差,但得到的边缘较粗,找出的边缘点应该是一对一对的,检测到的边缘应该是双像素宽.从选择不同的阈值生成的不同的边缘图片(图5b、图5c和图5d),我们可以得出只要我们找到最合适的阈值,最好的边缘能够生成.图5b就是选择合适的阈值T =10对flower图生成的最好边缘.选择合适的阈值是关键:阈值过小可能导致某些非边缘点周围细微的灰度变化被捕捉到,将非边缘点判断成边缘点,造成误检,如图5c阈值T=5,导致检测结果中包含过多的无用信息;而阈值过大,可能导致某些边缘点周围的灰度变化没被发现,造成漏检,如图5d阈值T=15,检测出来的结果会丢失大量的图像信息.为了验证算法的抗噪性能,给Lena原图加入0.02的椒盐噪声(图6a),从图6b还是能够大致看出图像的边缘轮廓,可以看出算法有一定的抗椒盐噪声性能,如果噪声进一步提高,检测结果也受到噪声很大的影响,边缘相当模糊,则在边缘检测之前必须先对图像进行平滑滤波,再进行检测.通过大量的实验分析与比较,选择合适的阈值能使基于平行方向上像素点灰度值平均值求差的边缘检测算法检测的边缘轮廓比较清晰,连续性尚可,但抗噪声能力稍差,尤其是抗高斯噪声.传统的Sobel卷积模板只有垂直和水平两个方向,而且对所有像素点使用同一模板,对垂直和水平方向的边缘比较敏感,而对对角线方向的边缘响应较弱,在图像中边缘主要为对角线方向时,边缘检测效果一般.而本文提出的检测算法灰度值变化最大的方向是通过对每个像素点计算得出的,不仅仅只对水平和垂直两个方向的边缘敏感.本文根据像素点及其八领域的相邻像素点,提出了一种基于平行方向上像素点灰度值平均值求差的边缘检测模板,然后运用它对每个像素点进行检测,最后再以边缘的连续性原理去除一部分噪声点.算法采用一些量的比较、加减等一些简单的运算,对灰度图像是一个简单、有效的边缘检测算法.本文提出的边缘检测在边缘明显和低噪声的情况下能得到好的边缘效果.该算法是基于模板的,将来可以将其扩充为、等模板,这样虽然加大了运算量,但应该能得到更精确的检测效果.虽然算法是基于灰度图像的,若要将其应用于彩色图像,可以尝试着:1)将彩色图像转化为灰度图像,然后应用;2)将图像看作若干通道数据的合成,在不同通道上完成了边缘检测,可适用于彩色图像.【相关文献】[1]高丽,令晓明.HSI空间基于形态学的彩色有噪图像边缘检测[J].兰州交通大学学报,2010,29(6):96-98.[2]曾俊.图像边缘检测技术及其应用研究[D].武汉:华中科技大学,2011.[3]谢凤英,赵丹培.Visual C++数字图像处理[M].北京:电子工业出版社,2008.[4] Canny J.A computational approach to edge detection[J].IEEE Transactions on Pattern Analysis and Machine Intelligence,1986,VOL PAMI-8(6):679-698.[5]王康泰,戴文战.一种基于Sobel算子和灰色关联度的图像边缘检测方法[J].计算机应用,2006,26(5):1035 -1036,1047.[7]陈宇云.灰度图像的边缘检测研究[D].成都:电子科技大学,2009.[8]李红松,侯朝桢.一种新的模糊边缘检测算法[J].计算机工程,2003,29(9):1-2.。

边缘检测

边缘检测

边缘检测算子图像配准的方法7.4.1 基于特征的图像配准基于特征的图像配准首先提取图像信息的特征,然后以这些特征为模型进行配准。

特征提取的结果是一含有特征的表和对图像的描述,每个特征由一组属性表示,对属性的进一步描述包括边缘的定向和弧度、区域的大小等。

局部特征之间存在着相互关系,如几何关系、辐射度量关系、拓扑关系等。

可以用这些局部特征之间的关系描述全局特征。

通常基于局部特征配准大多都是基于点、线或边缘的,而全局特征的配准则是利用局部特征之间的关系进行配准的方法。

由于图像的特征点比图像的像素点要少很多,因此大大减少了配准过程的计算量,但特征提取方法的计算代价通常较大,不便于实时应用。

特征点的配准度量值对位置的变化比较敏感,可以大大提高配准的精确程度。

对于纹理较少的图像区域提取的特征的密度通常比较稀少,局部特征的提取就比较困难。

特征点的提取过程可以减少噪声的影响,对灰度变化、图像形变和遮挡等都有较好的适应能力。

因此,在图像配准领域得到了广泛应用。

基于特征的图像配准方法有两个重要环节:特征提取和特征配准。

7.4.2 基于互信息的图像配准医学图像配准技术从基于特征的配准方法发展到基于统计的配准方法有其突破性的意义。

与基于特征的配准方法相比,基于统计的配准方法的突出优点为鲁棒性好、配准精度高、人工干预少。

基于统计的配准方法通常是指最大互信息的图像配准方法。

基于互信息的图像配准是用两幅图像的联合概率分布与完全独立时的概率分布的广义距离来估计互信息,并作为多模态医学图像配准的测度。

当两幅基于共同的解剖结构的图像达到最佳配准时,它们的对应像素的灰度互信息应为最大。

由于基于互信息的配准对噪声比较敏感,首先,通过滤波和分割等方法对图像进行预处理。

然后进行采样、变换、插值、优化从而达到配准的目的。

基于互信息的配准技术属于基于像素相似性的方法。

它基于图像中所有的像素进行配准,基于互信息的图像配准引入了信息论中的概念,如熵、边缘熵、联合熵和互信息等,可使配准精度达到亚像素级的高精度。

灰度图像的边缘检测

灰度图像的边缘检测

M=imread(str);采用Roberts算子BW=edge(rgb2gray(M),'roberts');imshow(BW);Sobel算子:bw=edge(rgb2gray(M),'sobel');imshow(bw);边缘检测程序i=imread('1.jpg'); 读入图像1i1=rgb2gray(i); 把rgb图像转换成灰度图像bw1=edge(i1,'log',0.07); 做阈值为0.07的高斯—拉普拉斯(Log)算法figure(3),imshow(i); 显示原图figure(4),imshow(bw1); 显示高斯—拉普拉斯(Log)边缘检测后的图I = imread('cameraman.tif'); % 读入图像imshow(I);title('原图')BW1 = edge(I,'canny'); % 调用canny函数figure,imshow(BW1); % 显示分割后的图像,即梯度图像title('Canny')边缘检测及拼接I=imread('myphoto.jpg'); % 假设要处理的图像是myphoto.jpgheights=size(I,1); % 图像的高widths=size(I,2); % 图像的宽m=8; % 假设纵向分成8幅图n=10; % 假设横向分成10幅图% 考虑到rows和cols不一定能被m和n整除,所以对行数和列数均分后要取整rows=round(linspace(0,heights,m+1)); % 各子图像的起始和终止行标cols=round(linspace(0,widths,n+1)); % 各子图像的起始和终止列标blocks=cell(m,n); % 用一个单元数组容纳各个子图像for k1=1:mfor k2=1:nblocks{k1,k2}=I(rows(k1)+1:rows(k1+1),cols(k2)+1:cols(k2+1),:);subimage=blocks{k1,k2};% 以下是对subimage进行边缘检测% 加入边缘检测的代码% 以上是对subimage进行边缘检测blocks{k1,k2}=subimage;endendprocessed=I; % processed为处理后的图像,用原图像对其初始化% 以下为拼接图像for k1=1:mfor k2=1:nprocessed(rows(k1)+1:rows(k1+1),cols(k2)+1:cols(k2+1),:)=blocks{k1,k2};endendfigure,imshow(processed)% 以上的程序已测试过,对灰度图像和真彩图像都可以运行在用matlab做图像拼接,怎么把两幅图片重叠的部分取出1种情况:横向重叠找到重叠的那一行就行了,然后去除多余部分for ii=1:mif a(ii,:)==b(ii,:)result=a的上半部分+b的下半部分;endend2种情况:纵向重叠找到重叠的那一列就行了,然后去除多余部分。

灰度检测算法

灰度检测算法

灰度检测算法
灰度检测算法,简称灰度算法,是一种常用的图像处理算法,用于将彩色图像转换成灰度图像。

灰度图像只包含灰度值而不包含彩色信息,通常用于图像分析、图像处理、目标检测等领域。

下面是一个简单的灰度检测算法示例:
1. 读取彩色图像。

2. 将彩色图像转换成灰度图像。

可以使用以下公式将彩色像素点的RGB值转换成灰度值:
灰度值 = 0.299 * 红色通道值 + 0.587 * 绿色通道值 + 0.114 * 蓝色通道值
红色通道值、绿色通道值和蓝色通道值的取值范围为0-255。

3. 对每个灰度图像像素点进行灰度阈值检测。

如果灰度值小于某个设定的阈值,则该像素点被认为是黑色;如果灰度值大于等于阈值,则该像素点被认为是白色。

4. 输出处理后的灰度图像。

这是一个简单的灰度检测算法示例,可以根据具体需求进行优化和改进。

在实际应用中,还可以添加其他步骤,如图像预处理、边缘检测等,以提高算法的准确性和效果。

需要注意的是,本算法仅为示例,实际使用时,应根据具体情况进行改进和优化,并进行合理的测试和验证。

一种基于灰度自适应红外图像边缘检测方法

一种基于灰度自适应红外图像边缘检测方法

第35卷,增刊V bl .35Suppl em ent 红外与激光工程Infj m d 加d LaSer Engi nee 血g2006年10月oc t .2006一种基于灰度自适应红外图像边缘检测方法王永义,杨卫平(国防科技大学A 瓜国家重点实验室,湖南长沙410073)摘要:针对天空背景下红外成像灰度特点,本文介绍了一种简单可行自适应边缘检测方法。

首先对红外图像进行自适应灰度增强预处理,接着用自适应最优阈值分割得到原图的二值图像,最后依据形态腐蚀方法获取目标边缘,实验表明,该方法除噪能力强,定位精度高,具有连续的边缘检测能力。

关键词:自适应灰度增强;自适应阈值分割;形态腐蚀;边缘检测中圈分类号:TP391文献标识码l A 文章编号:1007—2276(2006)增D 一0291-04A n adapt i V e edge det ect i on m et hod ba s eon gr ay of I R i m a ge W r A N G Y bn g —yi Y A N G W |ei -ping(1研I abo 髓t or yf br 加r K N a 廿伽I al uni V eB 姆of D cf cn ∞Tecl l I l ol ogy ,C h 柚gSl I a4100r 73。

aI i na)A bs t 瑚屺t :A fe a si bl e ad apt i V e edg e det ect i on m em od i s i n 臼oduced .Fi r sny ,吐l e I R i m age hasa prepr ocess i l l g of ada 砸ve enha ncement ;t I l en 撒er ada 砸V e opt i I I l i za t i on t hres ho l d segm e 舭,we caI l get a bm a r y i m a ge ;The l ast s t 印i s eros i on operat i on .The r e sul t s of exp edl I l ent a_bout m e ed ge of 洫aget a 唱et s h ow t l lat t hi s m et l l od has a good ef !f 酏t i n noi s e suppr es si on ,pr l ,ci s i on ed ge and cont i nuous edge .K ey w or ds :A dapt i V e gr ay enhancement ;A da pt i V e t t l r eshol d s egm 朋t at ion ;M or phol ogi ca l er os i on ;E dg e det e ct i on O 引言红外图像反映了目标及其周围的温度分布情况,通常情况下,由于目标高速运动时与空气发生摩擦,目标的温度将高于环境温度,在红外图像中的表现就是目标区域的灰度总是高于背景灰度。

图像边缘检测原理及方法

图像边缘检测原理及方法
[3]
1、差分边缘检测 在处理数字图像的离散域时,可用图像的一阶差分直接代替图像函数的导 数。 二维离散图像函数在 x 方向的一阶差分定义为: f ( x 1, y ) f ( x, y ) , 在y 方 向的一阶差分定义为: f ( x, y 1) f ( x, y ) [4]。 差分边缘检测通过求图像灰度迅速变化处的一阶导数算子的极值来检测奇 异点。某一点的值则代表该点的“边缘强度”,通过对这些值设定阈值进一步得到 边缘图像。同时,差分边缘检测要求差分方向与边缘方向垂直,此时需对图像不 同方向进行差分运算。边缘检测一般分为垂直边缘、水平边缘、对角线边缘, 各 [5] 自方向模版如图 2-1 所示 。
二、图像边缘检测方法
边缘检测算子是利用图像边缘的突变性质来检测边缘的。 主要分为两种类型 :一种是以一阶导数为基础的边缘检测算子,通过计算图像的梯度值来检测图 像边缘,如:差分边缘检测、Roberts 算子、Sobel 算子、Prewitt 算子;一种是 以二阶导数为基础的边缘检测算子,通过寻求二阶导数中的过零点来检测边缘, 如:Laplacian 算子、LOG 算子、Canny 算子。
2 f ( x, y )
2 f ( x, y ) 2 f ( x, y ) x 2 y 2
(2-10)
使用差分方程对x 和y 方向上的二阶偏导数近似如下。
2 f Gx ( f (i, j 1) f (i, j )) f (i, j 1) f (i, j ) x 2 x x x x f (i, j 2) 2 f (i, j 1) f (i, j )
s x { f ( x 1, y 1) 2 f ( x 1, y ) f ( x 1, y 1)} { f ( x 1, y 1) 2 f ( x 1, y ) f ( x 1, y 1)} s y { f ( x 1, y 1) 2 f ( x, y 1) f ( x 1, y 1)} { f ( x 1, y 1) 2 f ( x, y 1) f ( x 1, y 1)}

图像的边缘检测(实验报告)

图像的边缘检测(实验报告)

数字信号处理实验图像的边缘检测图像的边缘检测一,原理本实验主要是对图像的边缘进行提取,通过对边缘的分析来分析图像的特征。

首先,了解一些术语的定义:边缘点:图像中具有坐标[i,j]且处在强度显著变化的位置上的点。

边缘段:对应于边缘点坐标[i,j]及其方位 ,边缘的方位可能是梯度角。

边缘检测器:从图像中提取边缘(边缘点和边缘段)集合的算法。

轮廓:边缘列表,或者是一条表示边缘列表的拟合曲线。

边缘连接:从无序边缘表形成有序边缘表的过程,习惯上,边缘表的表示采用顺时针方向来排序。

边缘跟踪:一个用来确定轮廓的图像(指滤波后的图像)搜索过程。

边缘就是图像中包含的对象的边界所对应的位置。

物体的边缘以图像局部特性的不连续性的形式出现的,例如,灰度值的突变,颜色的突变,纹理结构的突变等。

从本质上说,边缘就意味着一个区域的终结和另外一个区域的开始。

图像边缘信息在图像分析和人的视觉中十分重要,是图像识别中提取图像特征的一个重要属性。

边缘检测(edge detection)在图像处理和对象识别领域中都是一个重要的基本问题。

由于边缘的灰度不连续性,可以使用求导数的方法检测到。

最早的边缘检测方法都是基于像素的数值导数的运算。

本实验主要是对图像依次进行Sobel算子,Prewitt算子,Roberts算子,Laplace算子和Canny算子运算,比较处理结果。

边缘检测有三个共性准则,1,好的检测结果,或者说对边缘的误测率尽可能低,就是在图像边缘出现的地方检测结果中不应该没有;另一方面不要出现虚假的边缘。

2,对边缘的定位要准确,也就是我们标记出的边缘位置要和图像上真正边缘的中心位置充分接近。

3,对同一边缘要有尽可能低的响应次数,也就是检测响应最好是单像素的。

二,对图像进行各种算子运算本实验中主要是对图像依次进行Sobel算子,Prewitt算子,Roberts算子,Laplace算子和Canny 算子运算。

由于MATLAB对彩色图像不能进行分析。

如何测定图像的灰度信息

如何测定图像的灰度信息

如何测定(cèdìng)图像的灰度信息ImageJ是一款小巧(xiǎoqiǎo)开放的图像分析软件,可以从其官方网站上免费下载。

下面就对如何利用ImageJ进行图像测量作一简单(jiǎndān)介绍:1、从文件菜单(cài dān)打开你要测量的图像。

2、从工具菜单选择(xuǎnzé)选择矩形工具(rectangular)、椭圆工具(ellipitcal)、多边形工具(polygon)或自定义形状(freehand)等工具。

3、选择(xu ǎnz é)矩形(j ǔx íng)工具时,移动鼠标至需要测量的位置(w èi zhi)1,按下左键不放,拖动至测量位置2松开鼠标。

在分析(analyze )菜单下,选择测量命令(measure )或按ctrl+M 完成测量,长度单位是像素(xi àn ɡ s ù),常用的参数是面积、周长、直径、积分光密度等(下同(xi àt óng))。

rectangularpolygonal freehandelliptical位置1位置24、如果(rúguǒ)选择的是椭圆(tuǒyuán)工具(gōngjù)时,在位置1按下鼠标移动至合适(héshì)的位置(wèi zhi)松开鼠标即可,按上面的步骤测量,操作见下图。

位置5、如果(rúguǒ)选择的是多边形工具时,在位置(wèi zhi)1按下鼠标沿轨迹(guǐjì)移动至要改变方向的位置2,点击(diǎn jī)鼠标,再移至位置3,点击(diǎn jī)鼠标,……,至终点位置1,单击鼠标完成选定,按步骤3方法进行测量。

6、如果(rúguǒ)选择的是手写工具则,在位置1点鼠标不松开,然后按希望的轨迹移动,然后回到目标位置1与初始(chū shǐ)点闭合松开鼠标即可,然后按3方法进行测量。

图像处理中的边缘检测技术

图像处理中的边缘检测技术

边缘检测是图像处理中的一项重要技术,它用于确定图像中物体的边缘。

边缘是图像中灰度级的突变区域,表示物体或物体之间的边界。

边缘检测在计算机视觉、图像识别和模式识别等领域有广泛应用。

边缘检测技术可以帮助我们提取图像中的目标物体,辨认物体形状,提供定位信息等。

边缘检测也是其他图像处理技术的基础,如图像分割、图像匹配等。

因此,边缘检测技术对于图像处理来说是至关重要的。

在图像处理中,常用的边缘检测方法有一阶导数方法、二阶导数方法和基于灰度级统计的方法。

其中,一阶导数方法基于图像灰度的一阶导数计算边缘,二阶导数方法基于图像灰度的二阶导数计算边缘,而基于灰度级统计的方法通过统计图像像素灰度级的概率分布来确定边缘。

一阶导数方法中最常用的是Sobel算子和Prewitt算子。

它们是基于图像梯度的边缘检测算子,通过计算图像灰度级在水平和垂直方向上的梯度来确定边缘。

这些算子可以提取图像中的目标物体边缘,但也容易受到图像噪声的干扰。

为了解决噪声问题,二阶导数方法应运而生。

拉普拉斯算子是最常用的二阶导数边缘检测算子,它通过计算图像灰度级的二阶导数来确定边缘。

拉普拉斯算子可以在不同尺度上平滑图像,提高边缘检测的稳定性。

但是,由于二阶导数会导致边缘的二次响应,拉普拉斯算子容易产生多个响应点,使得边缘变得模糊。

基于灰度级统计的方法则是通过对图像像素灰度级的统计学分析,提取图像中灰度级突变明显的区域作为边缘。

其中,Canny算子是最具代表性的方法。

Canny算子通过概率统计和阈值操作,可以提取出目标物体的边缘,并且对噪声具有一定的抑制能力。

除了以上常用的边缘检测方法,还有一些基于机器学习和深度学习的边缘检测技术正在不断发展。

这些技术使用大量的标注数据进行模型训练,可以更准确地检测图像中的边缘。

总结起来,边缘检测技术是图像处理中的重要技术之一。

一阶导数方法、二阶导数方法和基于灰度级统计的方法是常用的边缘检测方法。

随着机器学习和深度学习的发展,边缘检测技术将变得更加精确和高效,为图像处理提供更多应用的可能性。

灰度图像处理中的边缘检测和分割算法

灰度图像处理中的边缘检测和分割算法

灰度图像处理中的边缘检测和分割算法数字图像处理是一门关注将数字信号转化为可视化图像的学科。

它已被应用于许多领域,如医疗成像、计算机视觉、人工智能和机器人学。

其中,灰度图像处理是数字图像处理领域中最基础也最广泛应用的部分。

其中,边缘检测和分割算法被广泛应用于图像处理中。

本文将着重介绍这两个关键技术。

边缘检测边缘检测是数字图像处理中一项非常基础的技术,是许多图像处理技术的先决条件。

边缘可以被描述为一幅图像中物体间的边缘或表面。

它是图像处理中最基础和重要的信息之一,能描述一幅图像所包含物体的轮廓、形状和纹理,同时还可以提供图像的轮廓和物体表面等其它信息。

因此,边缘检测在许多应用中非常有用,例如自动驾驶汽车、安防系统和医学图像处理等领域。

边缘检测的方法有很多,但其核心思路都是寻找图像中灰度值的不连续性来实现。

在图像中,边缘通常是图像中灰度值变化快速的位置。

因此,我们可以利用这种不连续性,通过各种算法来寻找图像的边缘。

其中,一些常见的边缘检测算法包括Sobel、Canny、Roberts 等。

这些算法中,Sobel 和 Canny 算法是较为常用的方法。

这两种方法都通过对灰度图像进行一些数学操作,来识别出图像中的边缘。

Sobel 算法在图像处理中非常常见,它可以通过计算图像中的梯度来寻找灰度值变化最快的位置,从而确定边缘的位置。

而 Canny 算法则更加精细和优化,它使用了高斯模糊和非最大值抑制等技术来提高边缘检测的准确率。

分割算法在图像处理中,分割是一个非常重要的任务,它是从一幅图像中提取物体的过程。

分割算法的目标是将一幅图像分成若干个区域,使得图像中每个区域内的像素灰度值差异尽可能小,而区域间尽可能大。

这相当于将图像中的每个像素分成不同的类别,使得同类别的像素在图像中尽可能连续。

常见的分割算法包括 k-means、Mean Shift、GMM 等。

其中,k-means 算法是最常见的算法之一。

该算法通过不断迭代聚类中心,将图像像素分为 k 类。

灰度图像的sobel边缘检测算法

灰度图像的sobel边缘检测算法

灰度图像的sobel边缘检测算法之前上⼀篇⽂章写了如何将图⽚进⾏灰度化处理,这篇⽂章参考CB的⽂章简单的介绍⼀下如何进⾏sobel边缘化处理。

边缘:周围像素灰度急剧变化的那些像素的集合,它是图像最基本的特征公式:这⾥Gx和Gy分别代表横向及纵向边缘检测的图像灰度值,该点灰度值⼤⼩为G,式⼦⾥A代表经过灰度处理的原始图像,最终计算出来的结果和设定的阈值进⾏⽐较如果⼤于阈值显⽰⼀个颜⾊,否则就显⽰其他颜⾊即可。

采⽤流⽔线的⽅法: 1、移位,A是⼀个3X3的矩阵,需要不断的刷新,我⽤的是9个寄存器,每⼀个时钟就刷新⼀次。

2、计算Gx 和Gy,矩阵相乘展开以后就是⼏个数据相乘,因为矩阵因⼦⾥⾯有负数,所以需要 ⽐较⼤⼩,把正值给保留下来。

3、求平⽅和 4、利⽤altera⾃带的IP核,实现开根号处理。

5、跟阈值进⾏⽐较矩阵:3X3矩阵采⽤的是altera⾃带的ip核,移位ip核taps是指有⼏层,如果把data_in算进去的话,taps两层即可,distance是指距离,每⼀层的长度是多少,distance也对应sobel处理的图⽚长度,移位ip核运⾏原理类似与弹珠游戏,新的数据把旧的数据向前推。

时钟延时: 因为流⽔线数据处理有延时,所以最终vga显⽰使能也需要将移动相应的时钟来保持同步/*-----------------------------------------------------------------------Date : 2017-XX-XXDescription : Design for sobel.-----------------------------------------------------------------------*/module sobel(//global clockinput clk , //system clockinput rst_n , //sync reset//sobel interfaceoutput [10:0] sobel_data ,//matrix interfaceinput [ 7:0] matrix_p11 , matrix_p12 , matrix_p13 ,input [ 7:0] matrix_p21 , matrix_p22 , matrix_p23 ,input [ 7:0] matrix_p31 , matrix_p32 , matrix_p33 ,//eninput mean_en ,output display_val//--------------------------------//Funtion : 变量声明reg [9:0] gx_temp1 ;reg [9:0] gx_temp2 ;reg [9:0] gx_data ;reg [9:0] gy_temp1 ;reg [9:0] gy_temp2 ;reg [9:0] gy_data;reg [20:0] gxy_square ;reg [ 4:0] delay_en ;//--------------------------------//Funtion : 计算Gx Gyalways @(posedge clk or negedge rst_n)beginif(!rst_n)begingx_temp1 <= 1'd0;gx_temp2 <= 1'd0;gx_data <= 1'd0;endelsebegingx_temp1 <= matrix_p31 + (matrix_p32 << 1) + matrix_p33;gx_temp2 <= matrix_p11 + (matrix_p12 << 1) + matrix_p13;gx_data <= (gx_temp1 >= gx_temp2) ? gx_temp1 - gx_temp2 : gx_temp2 - gx_temp1; endendalways @(posedge clk or negedge rst_n)beginif(!rst_n)begingy_temp1 <= 1'd0;gy_temp2 <= 1'd0;gy_data <= 1'd0;endelsebegingy_temp1 <= matrix_p11 + (matrix_p21 << 1) + matrix_p31;gy_temp2 <= matrix_p13 + (matrix_p23 << 1) + matrix_p33;gy_data <= (gy_temp1 >= gy_temp2) ? gy_temp1 - gy_temp2 : gy_temp2 - gy_temp1; endend//--------------------------------//Funtion : gx^2 + gy^2always @(posedge clk or negedge rst_n)beginif(!rst_n)gxy_square <= 1'd0;elsegxy_square <= gx_data * gx_data + gy_data * gy_data;end//--------------------------------//Funtion : sqrtsqrt_sobel sqrt_inst(.radical(gxy_square),.q(sobel_data)//remainder);//--------------------------------//Funtion : delay_enalways @(posedge clk or negedge rst_n)beginif(!rst_n)delay_en <= 1'd0;elsedelay_en <= {delay_en[3:0] , mean_en};assign display_val = delay_en[4]; endmodule。

实验二、灰度图像边缘检测

实验二、灰度图像边缘检测

实验二、灰度图像边缘检测一、实验目的1.掌握各种边缘检测算子的概念及原理。

2.掌握各种边缘检测算子的算法。

3.掌握各种边缘检测算子matlab实现的编制方法。

4.启发学生依据边缘特征进行图像分析与识别,提高学生图像处理与分析能力和实际动手能力。

二、实验原理基于算子模板的卷积过程,比如有一张8x8的图片,像素矩阵如下:又有一个3x3整个模板卷积过程就是用模板覆盖在像素矩阵上,重新计算像素值并移动的过程。

如下图即为模板盖住左上角的示例。

计算方式为模板单元格的值与被模板覆盖的图像子矩阵的值分别相乘并和并把结果放在模板中央单元格所对应的图像矩阵单元格中。

上图模板中央对应单元格的值应为:12*0+23*(-1)+52*0+12*(-1)+0*4+0*(-1)+56*0+45*(-1)+47*0=-80。

各算子模板如下:1. Roberts 算子10010110⎡⎤⎡⎤⎢⎥⎢⎥--⎣⎦⎣⎦ 2. 拉普拉斯边缘算子010111141181010111⎡⎤⎡⎤⎢⎥⎢⎥-⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦ 3. Kirsch 边缘算子33535555555330530530350333533333333304590135----⎡⎤⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥-----⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥-----------⎣⎦⎣⎦⎣⎦⎣⎦︒︒︒︒ 533333333333503503303305533553555355180225270315-----------⎡⎤⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥-----⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥----⎣⎦⎣⎦⎣⎦⎣⎦︒︒︒︒4. 高斯-拉普拉斯算子-2-4-4-4-2-4080-4-48248-4-4080-4-2-4-4-4-2⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦5. Prewitt 边缘算子101111101000101111----⎡⎤⎡⎤⎢⎥⎢⎥-⎢⎥⎢⎥⎢⎥⎢⎥-⎣⎦⎣⎦6. Sobel 算子三、实验仪器和设备PC机1台,原始灰度图像文件,matlab编程软件四、预习要求1.复习matlab编程软件的使用方法;2.复习数字图像处理的一些相关知识;3.复习数字图像边缘检测的基本原理;4.学习在matlab中如何进行图像的边缘检测。

一种基于灰度形态学的小波域边缘检测算法

一种基于灰度形态学的小波域边缘检测算法

一种基于灰度形态学的小波域边缘检测算法
王树梅;王志成;蔡健
【期刊名称】《计算机技术与发展》
【年(卷),期】2009(019)001
【摘要】根据灰度数学形态学良好的边缘检测特点以及小波的多分辨特性提出了一种效果更为良好的边缘检测算法.首先将待检测图像进行小波多尺度分解,得到了低频信息、中频信息和对角信息;然后对低频部分同时做膨胀和腐蚀边缘检测,并对得到的结果求其平均值;最后将得到的结果代替低频部分联合中频部分和对角细节部分做小波逆变换,得到边缘信息较强的图像,再做二值化操作即得到最后的边缘轮廓.最后选择一合适的模版对其进行细化.实验结果证明,这种检测结果比目前已经存在的检测算法效果好,而且使用简便.
【总页数】4页(P32-35)
【作者】王树梅;王志成;蔡健
【作者单位】徐州师范大学,江苏,徐州221116;同济大学,CAD研究中心,上海201804;同济大学,CAD研究中心,上海201804;徐州师范大学,江苏,徐州221116【正文语种】中文
【中图分类】TP301.6
【相关文献】
1.一种基于小波域边缘特征的数字图像水印 [J], 戴酉;王笑梅
2.基于小波域图像融合的边缘检测算法研究 [J], 李靖
3.一种基于小波域的双色红外弱小目标检测算法 [J], 史晓刚;白晓东;李丽娟;韩宇萌
4.一种基于边缘邻域关系的图像边缘检测算法 [J], 李瑞
5.基于MMSE的自适应灰度形态学钢轨边缘检测算法 [J], 郭栋鸿;谭丽;温润因版权原因,仅展示原文概要,查看原文内容请购买。

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

一种简单易行的灰度图像边缘检测方法
王**
(广东工业大学计算机学院,软件工程专硕,学号2111505***) 摘要:基于对图形图像处理的理解,提出一种简单易行的边缘检测方法。

在此方法中我们通过比较相邻
像素点的灰度值来决定为某个像素设置相应的颜色,该方法中我们将检测出的边缘像素点设成黑色或白色。

其思想是,尝试像艺术家速写那样勾勒线条。

实验表明:该方法对灰度图像是一种简单,易行的边缘检测方法。

关键词:边缘检测;灰度值;阈值选取
引言
边缘是图像的最重要的特征之一,往往携带着一幅图像的大部分信息,它反映了图像中一个物体区别于其他物体最基本的特征[1]。

所谓边缘是指其周围像素灰度值有明显变化(阶跃变化或屋顶变化)的那些像素的集合。

边缘广泛存在于目标与背景之间、目标与目标之间、区域与区域、基元与基元之间。

边缘检测是基于边界的图像分割方法,是采用某种算法来提取出图像中对象与背景间的交界线。

边缘检测是实际中许多图像处理应用的基础,目前,数字图像边缘检测技术广泛应用于图像分割、运动检测、目标跟踪、人脸识别等领域[2],因此研究图像边缘检测与提取方法具有重要的理论意义和现实意义。

传统的图像边缘检测是利用图像一阶导数的极值或二阶导数的过零点信息来提供判断边缘点的依据。

利用一阶微分的算子有Roberts、Sobel、Prewitt、Kirsch,利用二阶微分的算子有Laplace、LOG等[3]。

近些年人们将模糊理论、统计分析、小波变换、数学形态学,神经网络、遗传算法、曲面拟合等与边缘检测联系起来,提出了许多新的边缘检测算法[4]。

以上的这些算法各有优点,但是对于初学者来说不易理解,难于操作。

我们可以从人物的线条画中识别出人脸或其他特征,这真是视觉系统的一项重要的特性。

现实的世界中,并没有明显的线条定义世界的特征。

例如鼻子和眼睛周围没有明晰的线条,但任何一个小孩都能画出一张脸,一个勾代表鼻子,两个圈代表眼睛——而且我们都能认出那是一张脸。

通常,在有亮度差别的地方,我们就能看到一条线[5]。

在灰度图像中,灰度值间接的表明了某一像素的亮度。

对此我们提出了一种简单的基于灰度值比较的灰度图像边缘检测方法。

1 基于灰度值比较的边缘检测算法的分析与设计
1.1 算法简单概述
遍历所有像素点,把每个像素点的灰度与它下面的和右边的像素进行比较。

如果该像素点与下面和右边都有适当的灰度差,那么我们就把该像素点置成白色,否则,把它置为黑色。

1.2 获取像素点的灰度值
对于RGB转灰度,有一个很著名的公式:
Gray = R∗0.299 + G∗0.587 + B∗0.114
而实际应用时,我们希望尽量避免低速的浮点运算,所以需要整数算法。

因此可以将它们缩放1000倍来实现整数运算:
Gray =(R∗299 + G∗587 + B∗114 + 500)/1000
上面的整数算法已经很快了,但是有一点仍制约速度,就是最后的除法。

移位比除法更快,所以我们最后选用整数移位算法,如式(1)所示:
Gray =(R∗38 + G∗75 + B∗15)>> 7 (1)
1.3 判断像素点是否为边缘点
使用1.2的方法,我们可以获得当前像素点的灰度值now,下方像素点的灰度值down,右方像素点的灰度值right 如果当前像素点的灰度值与下方像素点,右方像素点的差值都大于一个阈值T,则该点为边缘点。

综上所述边缘点的判断可以表示为式(2),式(3):
if (|now−down|>T)and (|now−rigℎt|>T)推出
⇒ is edge (2)
if (|now−down|≤T)and (|now−rigℎt|≤T)推出
⇒ isn′t edge (3)
其中T为阈值,实验发现,用10做阈值效果最佳。

我们稍后会在1.5中展示不同阈值的实验结果。

1.4 设置像素点的颜色
通过1.3的计算,我们便可以很容易的判断一个像素是否为边缘点。

如果该像素是边缘点,设置其颜色为白色,如果不是边缘点则设置其像素颜色为黑色。

1.5 阈值T的选择
通过实验对比,我们发现当T为10时,边缘检测效果最佳。

图a,图b和图c分别是阈值为T=5, T=10, T=20时边缘检测的结果。

图a T = 5 图b T = 10
图c T = 202 实验及分析
以下结合灰度图像测试实例在Python 2.2.1上,对算法进行测试和分析。

这里没有与其他的传统经典算法进行比较。

该实验只说明了算法的可行性。

图d1和 图e1分别是Lena 原图和Flower 原图,图d2,e2分别是当阈值T 为10时使用本文边缘检测算法提取到较好的边缘效果。

图d1 Lena
图d2 T = 10
图e1 Flower
图e2 T = 10 观察以上结果可以看到,图d2,图e2分别都可以看到清晰的轮廓边缘,根据实验结果分析可知,对于灰度图片,该算法具有一定的边缘检测能力。

3 结束语
本文根据相邻像素点的灰度的差值,提出了一种简单易行的基于判断灰度差值是否大于指定阈值,来确定该像素点是否为边缘点的边缘检测方法。

该方法遍历图像中的每个像素点,
当其灰度值与右边及下面的灰度值相差大于阈值的时候,可以判断该点为边缘点。

通过改变该点的颜色为白色,绘制出该图像的边缘检测图。

通过对实验结果进行观察与分析,我们发现实验结果图片呈现出很清晰的边缘轮廓,从而得知该方法具有一定的可行性。

边缘检测和线条绘制还有更好的算法。

这里我们只是将各个像素设成黑色或白色,没有真正考虑“线”的概念。

我们可以使用图片模糊这样的技术来平滑图像,使各个点连起来更像一条线。

我们也可以在修改像素时考虑它附近的像素,仅在附近像素也要置成黑色时才把它置黑;也就是绘制一条线而不只是画点,这也是其他传统经典算法所做的工作。

参考文献:
[1] 孙亮, 李敬文.一种简单的灰度图像边缘检测算法[J].兰州交通大学学报, 2013, 32(1):111-115.
[2] 曾俊. 图像边缘检测技术及其应用研究[D]. 武汉:华中科技大学, 2011.
[3] 甘金来. 图像边缘检测算法的比较与研究[D]. 成都:电子科技大学, 2005.
[4] 陈宇云. 灰度图像的边缘检测研究[D]. 成都:电子科技大学, 2009.
[5] Mark J. Python计算机与编程实践多媒体方法 [M]. 北京:机械工业出版社 , 2012, 93-94.
代码附录:
def lineDetect(filename,threshold):
orig = makePicture(filename)
makeBw = makePicture(filename)
for x in range(0,getWidth(orig)-1):
for y in range(0,getHeight(orig)-1):
here=getPixel(makeBw,x,y)
down=getPixel(orig,x,y+1)
right=getPixel(orig,x+1,y)
hereG=(getRed(here)*38+getGreen(here)*75+getBlue(here)*15)>>7 downG=(getRed(down)*38+getGreen(down)*75+getBlue(down)*15)>>7 rightG=(getRed(right)*38+getGreen(right)*75+getBlue(right)*15)>>7 if abs(hereG-downG)>threshold and abs(hereG-rightG)>threshold: setColor(here,white)
if abs(hereG-downG)<=threshold and abs(hereG-rightG)<=threshold: setColor(here,black)
show(makeBw)
return makeBW。

相关文档
最新文档