毕业设计论文图像Canny边缘检测的程序设计.doc

上传人:sccc 文档编号:4871904 上传时间:2023-05-20 格式:DOC 页数:34 大小:539.66KB
返回 下载 相关 举报
毕业设计论文图像Canny边缘检测的程序设计.doc_第1页
第1页 / 共34页
毕业设计论文图像Canny边缘检测的程序设计.doc_第2页
第2页 / 共34页
毕业设计论文图像Canny边缘检测的程序设计.doc_第3页
第3页 / 共34页
毕业设计论文图像Canny边缘检测的程序设计.doc_第4页
第4页 / 共34页
毕业设计论文图像Canny边缘检测的程序设计.doc_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《毕业设计论文图像Canny边缘检测的程序设计.doc》由会员分享,可在线阅读,更多相关《毕业设计论文图像Canny边缘检测的程序设计.doc(34页珍藏版)》请在三一办公上搜索。

1、 图像Canny边缘检测的程序设计II毕业设计摘 要边缘检测是数字图像处理中的重要内容,边缘是图像最基本的特性。在图像边缘检测中,微分算子可以提取出图像的细节信息,景物边缘是细节信息中最具有描述景物特征的部分,也是图像分析中的一个不可或缺的部分。本文详细地分析了目前常用的几种算法,即:Roberts交叉微分算子、Sobel微分算子、Priwitt微分算子和Laplacian微分算子以及Canny算子,用C语言编程实现各算子的边缘检测,并根据边缘检测的有效性和定位的可靠性,得出Canny算子具备有最优边缘检测所需的特性。 关键词:图像处理,微分算子,Canny算子,边缘检测 Abstract E

2、dge detection is the important contents of digital image processing ,and the edge is the most basic characteristics of the image.In the image edge detection ,differential operator can be used to extract the details of the images,featuresedge is the most detailed information describing the characteri

3、stics of the features of the image analysis, and is also an integral part of the image.This article gives the detailed analysis of several algorithms which is commonly used at present,such as Roberts cross-differential operator、Sobel differential operator、Priwitt differential operator、Laplacian diff

4、erential operator and Canny operator,and we complete with the C language procedure to come ture edge detection.According to the effectiveness of the image detection and the reliability of the orientation,we can deduced that the Canny operator have the characteristics which the image edge has. Keywor

5、ds: Image processing, Canny operator, differential operator, edge detection目 录摘要IAbstractII第一章绪 论11.1 引言11.2 数字图像技术的概述21.3 边缘检测31.4 论文各章节的安排4第二章 微分算子边缘检测52.1 Roberts算子52.2 Sobel算子52.3 Priwitt算子62.4 Laplacian算子6第三章 Canny边缘检测83.1 Canny指标83.2 Canny算子的实现9第四章 程序设计与实验124.1各微分算子的程序设计124.2 实验结果及比较14第五章 结论与展

6、望175.1 结论175.2 展望17致谢18参考文献19附录(源程序)20 第一章绪 论1.1 引言 边缘检测是图像处理中的重要内容。边缘是图像的最基本特征。所谓图像的边缘是指图像局部区域亮度变化显著的部分,该区域的灰度剖面一般可以看作是一个阶跃,即从一个灰度值在很小的缓冲区域内急剧变化到另一个灰度相差较大的灰度值。图像的边缘部分集中了图像的大部分信息,图像边缘的确定与提取对整个图像场景的识别与理解是非常重要的,同时也是图像分割所依赖的重要特征,边缘检测主要是图像的灰度变化的度量、检测和定位。边缘与图像中物体的边界有关,但又是不同的。边缘反映的是图像灰度的不连续。边缘在边界检测、图像分割、模

7、式识别、机器视觉等等中有很重要的作用。边缘是边界检测的基础,也是外形检测的基础。边缘广泛存在于物体与背景之间、物体与物体之间以及基元与基元之间,因此它也是图像分割所依赖的重要特。边缘检测对于物体的识别也是很重要的。主要有以下几个理由:首先,人眼通过追踪未知物体的轮廓(轮廓是由一段的边缘片段组成的)而扫视一个未知的物体。第二,经验告诉我们:如果我们能成功地得到图像的边缘,那么图像分析就会大大简化,图像识别就会容易得多。第三,很多图像并没有具体的物体,对这些图像的理解取决于他们的纹理性质,而提取这些纹理性质与边缘检测有极其密切的关系。然而自从1959年文献上最早提出边缘检测,从那以后每年都会出现很

8、多关于边缘检测的文章。经过了四十多年的发展,已有许多种不同的边缘检测方。边缘检测的方法主要有以下几种:第一种检测梯度的最大值。由于边缘发生在图像灰度值变化比较大的地方,对应连续情形就是说是函数梯度较大的地方,所以研究比较好的求导算子就成为一种思路。而Roberts算子 Prewitt算子和Sobel算子就是比较简单而常用的例子。还有一种比较直观的方法就是利用当前像素邻域中的一直像素值拟合一个曲面,然后求当前像素外梯度。从统计角度来说,我们可以通过回归分析得到一个曲面,然后也可以做类似的处理。第二种是检测二阶导数的零交叉点。这是因为边缘处的梯度取得到最大值,也是灰度图像的拐点边缘。从分析学上我们

9、知道,拐点处函数的二阶导数是0。第三种是统计方法。比如说利用假设检验来检测边缘,D.H Marimont在其文中利用对二阶零点的统计分析得到了图像中各个像素是边缘的概率,并进而得到 边缘检测的方案。第四种是小波多尺度边缘检测。九十年代,随着小波分析的迅速发展,小波开始用于边缘检测。作为研究非平稳信号的利器,小波在边缘检测方面具有得天独厚的优。那么多的方法,哪种比较好呢?要看一种方法好不好依赖于具体的应用领域。但是这些不同的领域之间还是存在着一些共同要求。在1986年Canny总结提出了以往理论和实践的成果,提出了边缘检测Canny三准则:好的检测结果,好的定位还有对单一边缘低重复响应,并给出了

10、他们的数学表达式。本文就是运用Canny算子,与其它的算子比较,得出Canny边缘检测的好方法。1.2 数字图像技术的概述我们知道,人类所获得信息的70%以上来自于视觉,换句话说,人类将用自己的双眼所观察到的世界进行缜密的分析与思考之后,推动了科技的进步,也推动了整个世界的发展。下是因为图像所带给人们的直观信息的特点,使得图像处理技术随着计算机技术 多媒体技术的飞速发展取得了长足的进步。因为图像可以反映人类第一感觉下的思维魅力,正因为如此,图像技术快速地向各个研究领域渗透。可见其重要性。图像是对客观存在物体的一种相似性的生动模仿与描述,是物体的一种不完全的 不精确的描述,但是在某种意义下是适当

11、的表示。数字图像处理又称计算机图像处理,它是指将图像信号转换成数字信号,并利用计算机对其进行处理的过程。而图像处理有俩种,一是将一幅效果不好的图像进行处理,获得视觉效果好的图像。二是对一幅图像中的若干个目标物进行识别分类后给出其特性测度。 图像是人类获取和交换信息的主要来源,因此,图像处理的应用领域必然涉及到人类生活和工作的方方面面。随着人类活动的范围的不断扩大。(1)航天和航空技术方面的应用数字图像处理技术在航天和航空技术方面的应用,现在世界各国都在利用陆地卫星所获取的图像进行资源调查(如森林调查、海洋泥沙和渔业调查、水资源调查等),灾害检测(如病虫害检测、水火检测、环境污染检测等),资源勘

12、察(如石油勘查、矿产量探测、大型工程地理位置勘探分析等),农业规划(如土壤营养、水份和农作物生长、产量的估算等),城市规划(如地质结构、水源及环境分析等)。我国也陆续开展了以上诸方面的一些实际应用,并获得了良好的效果。在气象预报和对太空其它星球研究方面,数字图像处理技术也发挥了相当大的作用。(2)生物医学工程方面的应用数字图像处理在生物医学工程方面的应用十分广泛,而且很有成效。除了上面介绍的CT技术之外,还有一类是对医用显微图像的处理分析,如红细胞、白细胞分类,染色体分析,癌细胞识别等。此外,在X光肺部图像增晰、超声波图像处理、心电图分析、立体定向放射治疗等医学诊断方面都广泛地应用图像处理技。

13、(3)通信工程方面的应用当前通信的主要发展方向是声音、文字、图像和数据结合的多媒体通信。具体地讲是将电话、电视和计算机以三网合一的方式在数字通信网上传输。其中以图像通信最为复杂和困难,因图像的数据量十分巨大,如传送彩色电视信号的速率达100Mbit/s以上。要将这样高速率的数据实时传送出去,必须采用编码技术来压缩信息的比特量。在一定意义上讲,编码压缩是这些技术成败的关键。除了已应用较广泛的熵编码、DPCM编码、变换编码外,目前国内外正在大力开发研究新的编码方法,如分行编码、自适应网络编码、小波变换图像压缩编码。 (4)工业和工程方面的应用在工业和工程领域中图像处理技术有着广泛的应用,如自动装配

14、线中检测零件的质量、并对零件进行分类,印刷电路板疵病检查,弹性力学照片的应力分析,流体力学图片的阻力和升力分析,邮政信件的自动分拣,在一些有毒、放射性环境内识别工件及物体的形状和排列状态,先进的设计和制造技术中采用工业视觉等等。其中值得一提的是研制具备视觉、听觉和触觉功能的智能机器人,将会给工农业生产带来新的激励,目前已在工业生产中的喷漆、焊接、装配中得到有效的利用。 (5)军事公安方面的应用在军事方面图像处理和识别主要用于导弹的精确末制导,各种侦察照片的判读,具有图像传输、存储和显示的军事自动化指挥系统,飞机、坦克和军舰模拟训练系统等;公安业务图片的判读分析,指纹识别,人脸鉴别,不完整图片的

15、复原,以及交通监控、事故分析等。目前已投入运行的高速公路不停车自动收费系统中的车辆和车牌的自动识别都是图像处理技术成功应用的例子。 (6)文化艺术方面的应用目前这类应用有电视画面的数字编辑,动画的制作,电子图像游戏,纺织工艺品设计,服装设计与制作,发型设计,文物资料照片的复制和修复,运动员动作分析和评分等等,现在已逐渐形成一门新的艺术-计算机美。1.3 边缘检测边缘是图像的最重要的特征。边缘是指周围像素灰度有阶跃变化或屋顶变化的那些像素的集合。Poggio在文中说:“或许对应着图像中物体的边界或许并没有对应着图像中物体的边界,但是边缘具有十分令人满意的性质它能大大地减少所要处理的信息但是又保留

16、了图像中物体的形状信息”。边缘检测是图像识别的基础和前提,直接决定了图像识别结果的正确性。由于边缘检测还不成熟,直接影响了图像识别的应用,一直是图像识别领域的一个研究热点。经过多年的研究,边缘检测已经渗透到各个应用领域。在医学上,边缘检测用于肾小球的提取,在工业和工程方面的应用在工业和工程领域中,用于纤维制品的检测,在。喷漆、焊接、装配中也得到了有效的利用。在文化艺术上,用于纺织工艺品设计,服装设计与制作,发型设计,文物资料照片的复制和修复,运动员动作分析和评分等等。总之,边缘检测已经应用于各个领域。是 我们不可忽视的一项研究热点。1.4 论文各章节的安排第一章叙述了边缘检测的几种方法,图像处

17、理技术在各个领域的应用以及边缘检测技术在各个领域中的应用。第二章介绍了数字图像处理中边缘检测的主要几种简单的微分算子,以及各微分微分算子的实现算法。第三章重点介绍Canny指标能及算子的实现。第四章是程序测试部分,用C语言实现并得出测试结果。根据结果比较各微分算子的处理效果。第五章为总结和展望,介绍了本论文实现的功能,阐述本课题的现实意义,以及对未来各算子的展望。第二章 微分算子边缘检测在本章将对目前出现的边缘检测做一个比较全面的介绍。2.1 Roberts算子对于大多数的景物来说,求出其细节轮廓是一个非常重要的部分,而 往往遇到的绝大部分景物和细节是不规则的,所以需要在二维图像的两个方面上来

18、考虑锐化微分的计算。换句话说,需要设计各向同性的微分算子。微分算子作用模板的示意图如2.1所示:图2.1模版示意图这是一个的模板,用标识的是当前待处理像素,则交叉微分算子定义如下: (2.1)按照图像处理的模板描述形式,上式可以表示为 = = (2.2) 2.2 Sobel算子前面介绍的Roberts算子可以获得景物细节的轮廓,因为其作用模板小,所以相对计算量也小。但是由于模板的尺寸是偶数,所以待处理像素不能放在模板的中心位置,这样处理的结果就会有半个像素的错位。Sobel算子是一种奇数大小为的模板下的全方向微分算子。Sobel算子定义如下: (2.3) (2.4)= (2.5)如果用图像处理

19、的模版来表示,则有: = = (2.6)2.3 Priwitt算子Priwitt算子的思路与Sobel算子的思路类似,是在一个奇数大小的模板中定义其微分运算。Priwitt算子定义如下: (2.7) (2.8) = (2.9)如果用图像处理的模板来表示,则有 (2.10) 2.4 Laplacian算子 以上的都是一阶微分算子,而拉普拉斯是二阶的。二阶微分算子有着比一阶微分算子更加敏感特性,尤其是对斜坡渐变的细节。最简单的各向同性微分算子是拉普拉斯微分算子,一个二维图像(x,y)的拉普拉斯微分算子定义如下: (2.11) = (2.12) 将(2)式代入(1)式得 (2.13) 将上式写成图像

20、处理模板的形式有: (2.14) 第三章 Canny边缘检测3.1 Canny指标基于微分算子的边缘提取存在的一个比较麻烦的的问题就是如何选择合适的阈值,可以使边缘从细节当中提取出来。阈值的选择不同,所提取出的边界信息就不同。在两个不同的阈值下,采用同样的微分算子均可以提取出图像的边缘,但是两者有比较大的区别。这样,在边缘提取中就存在着对提取好坏的评。针对这一问题,根据边缘检测的有效性和定位的可靠性,Canny研究 了最优边缘检测器所需的特性,给出了评价边缘检测性能优劣的三个指标:(1)好的信噪比,即将非边缘点判为边缘点的概率要低,将边缘点判为非边缘点的概率要低;(2)好的定位性能,即检测出的

21、边缘点要尽可能在实际边缘的中心;(3)对单一边缘仅有惟一响应,即单个边缘产生多个响应的概率要低,并且虚假响应边界应得到最大的抑制。用一句话说,就是希望在提高对景物边缘的敏感性的同时,可以抑制噪声的方法才是好的边缘提取方法。值得庆幸的是,且个线性算子可以在抵抗噪声与边缘检测之间获得一个最佳的折中,这个算子就是高斯函数的一阶导数。高斯函数与原图的卷积达到了抵抗噪声的作用,而求导数,则是检测景物边缘的手段。对于阶跃形的边缘,Canny推导出的最优边缘检测器的形状与高斯函数和一阶导数类似,因此Canny边缘检测器就是由高斯函数的一阶导数构成的。我们知道,高斯函数是圆对称的,因此Canny算子在边缘方向

22、上是对称的,在垂直于边缘的方向上是反对称的。这就意味着该算子对最急剧的变化方向上的边缘特别敏感,但在沿边缘方向上是不敏感的。设二维高斯函数为 (3.1)其中,是高斯函数的分布参数,可用以控制对图像的平滑程度。最优阶跃边缘检测算子是以卷积G*为基础的,边缘强度为,而边缘方向为。从高斯函数的定义可知,该函数是无限拖尾的,在实际中,一般情况下是将原始模板截断到有限尺寸N。实验表明,当时,能够获得较好的边缘检测结果。3.2 Canny算子的实现下面是Canny算子的具体实现。 利用高斯函数的可分性,将G的两个滤波卷积模板分解为两个一维的行列滤波器: (3.2) 其中 (3.3) (3.4) (3.5)

23、 (3.6) (3.7) (3.8) 将式(3.2.2)(3.2.3)分别与图像 (3.9) 则反应了图像上点处的边缘强度,是图像的点处的法向矢量(下交于边缘方向的方向)。根据Canny的定义,中心边缘点为算子与图像(x,y)的卷积在边缘梯度方向上的区域中的最大值。这样,就可以在每一点的梯度方向上判断此点强度是否为其领域的最大值来确定该点是否为边缘点。当一个像素满足以下三个条件时,则被认为是图像的边缘点。(1)该点的边缘强度大于沿该点梯度方向的两个相邻像素点的边缘强度;(2)与该点梯度方向上相邻两点的方向差小于45度;(3)以该点为中心的领域中的边缘强度极大值小于某个阈值。此外,如果(1)和(

24、2)同时被满足,那么在梯度方向上的两相邻像素就从候选边缘点中取消,条件(3)相当于区域梯度最大值组成的阈值图像与边缘点进行匹配,这一过程消除了许多虚假的边缘点。图像边缘检测的基本步骤:(1) 滤波,边缘检测主要基于导数计算,但受噪声的影响。但滤波器在降低噪声的同时也导致了边缘强度的损失。(2) 增强,增强算法将邻域咴度有显著变化的点突出显示。一般通过计算梯度幅值完成。(3) 检测,但在有些图像中梯度幅值较大的并不是边缘点。最简单的边缘检测是梯度幅值阈值的判定。(4) 定位,精确确定边缘的位置。 综上所述,Canny算子的具体算法步骤如下:(1)用高斯滤波器对图像进行滤波,去除图像中的噪声;(2

25、)用高斯算子的一阶微分对图像进行滤波,得到每个图像的梯度强度和方向;(3)对梯度进行“非极大抑制”梯度的方向可以被定义为如下图所示:4321x1234图 3.1梯度方向图标识为1,2,3,4的属于四个区之一,各个区用不同的邻近像素来进行比较,以决定局部极大值。例如,如果中心像素x的梯度方向属于第4区,则把x的梯度值与它左上和右下相邻像素的梯度值比较,看x的梯度值是否是极大值。如果不是,就把像素x的灰度设为0。这个过程称为“非极大抑制”。(4)对梯度取两次阈值,即取阈值,两者关系为。我们把梯度值小于的像素的灰度设为0,得到图像1。然后把梯度值小于的像素的灰度设为0,得到图像2。由于图像2的阈值较

26、高,去除大部分噪声,但同时也损失了有用的边边缘缘信息。而图像1的阈值较低,保留了较 多的信息。我们以图像2为基础,以图像1为补充来连接图像的边缘。(5)链接边缘的具体步骤如下:1对图像2进行扫描,当遇到一个非零灰度的像素P时,跟踪以P为开始点的轮廓线,直到轮廓线的终点Q。2考察图像1中与图像2中Q点位置对应的点的8邻近区域。如果在点的8邻近区域中有非零像素存在,则将其包括到图像2中,作为R点。从R开始重复第一步,直到我们在图像1和图像2中都无法继续为止。3当完成对包含P的轮廓线的连接之后,将这条轮廓线标记为已仿问。回到第步,寻找下一条轮廓线,重复第(1)步第(2)步第(3)步,直到图像2中找不

27、到打新轮廓线为止。至此完成Canny算子的边缘检测。 第四章 程序设计与实验4.1各微分算子的程序设计本文是用C语言编程来实现图像的处理,整体流程图如4.1(a)图所示,各微分算子的实现流程图如4.1(b)所示:开始打开文件选择锐化算子处理图象存储图片结束开始确定算子加载文件入内存判断算子类型一阶算子二阶算子Canny算子矩阵相乘矩阵相乘求平方根滤波增强检测定位处理完毕 未打开 图4.1(a)整体流程图图4.1(b)各微分算子流程图 Roberts 算子和Laplacian算子程序流程图如图4.2所示:开始选择处理图像待处理图像与模板矩阵相乘结束图4.2Roberts 算子和Laplacian

28、算子程序流程图Sobel算子和 Priwwit算子程序流程图如图4.3所示:开始选择处理图像x方向矩阵与待处理图像相乘结束y方向矩阵与待处理图像相乘求平方根图4.3Sobel算子和 Priwwit算子程序流程图Canny算子程序流程图如图4.4所示:开始选择处理图像高斯滤波去噪边缘提取求梯度阈值判定结束图4.4Canny算子程序流程图程序见附录。4.2 实验结果及比较以下是原图与处理后的图片,其中图4.5为Lena原始图片,图4.6为Roberts算子处理后的图片,图4.7为Sobel算子处理后的图片,图4.8为 Priwwit算子处理后的图片, 图4.9为 Laplacian算子处理后的图片

29、, 图4.10为Canny 算子处理后的图片。 图4.5 原始图片 图4.6 Roberts算子处理后的图片 图4.7 Sobel算子处理后的图片 图4.8 Priwwit算子处理后的图片 图4.9 Laplacian算子处理后的结果 图4.10 Canny算子处理后的图片从上面处理过的图像可以看出,经Roberts算子进行处理过的图像可以看出该微分算子可以提取出的细节轮廓。而用Sobel滤波器处理的结果,在视觉上相对Roberts算子的细节相对明显些。除了边缘外,还包括画面中因光照变化或者是硬件设备带来的各种影响。Priwitt算子处理的图像与Sobel算子处理的效果几乎一样,用肉眼很难分辨

30、出来。只是可以在一定程度上增加抗干扰性。用Laplacian算子处理过的图像效果明显比前面提取出的细节多,表明二阶微分算子在对图像细节的敏感性。一阶微分算子检测出来的轮廓比较粗略,但是检测出的轮廓比较清晰。各有各的优点。而Canny算子处理的图像不仅达到了准确的提取边缘信息的目的,提高了抗干扰能力外,还能使边缘更为连续清晰。第五章 结论与展望5.1 结论本文首先对数字图像处理与边缘检测做了一次概述,并比较详细地描述了比较常用的几种微分算子。并用C语言实现了几种常见的微分算子,得出Canny算子是最优的边缘检测算子。用Canny边缘检测器来灰复未检测的边缘方法,该方法包括对图像作进一步验证连接短

31、边缘轮廓,将开放的轮廓转变成闭合的轮廓等步骤,是图像数据中必不可少的。5.2 展望 我希望在今后的将来有更多的人去探导、研究边缘检测的算子,为使我们看到更好的图片效果而努力,为了改善全人类的发展而努力。图像是人类获取和交换信息的主要来源,因此,图像处理的应用领域涉及到人类的生活和工作等的方方面面。随着人类活动的不断扩大,图像的应用领域随之不断扩大。因此边缘检测技术也需要不断地进步。我看到将来,边缘检测技术已应用到人们生活的各方各面,在人类生活中,文化艺术、军事技术、生物医学技术、工业生产和工程技术、航天和航空技术等等重要领域都有着不可或缺的部分。与全人类生活形影不离。参考文献1 章毓晋. 图像

32、处理和分析 M.北京:清华大学出版社,1999.2 赵荣椿等. 数字图像处理导论 M.西安:西北工业大学出版社,1995.3 阮秋琦. 数字图像处理学 M.北京:电子工业出版社,2001. 4 程正兴. 小波分析算法与应用 M.西安交通大学出版社,1997.5 罗述谦,周果宏.医学图像处理与分析 M.北京:国防工业出版社,2003.6 章国宝,叶桦,陈维南.基于正交小波变换的多尺度边缘提取 J.中国图像图形报,1998(3).7 陈武凡等.彩色图像边缘检测新算法广义模糊算子法 J.中国科学A辑,1995(2).8 朱虹. 数字图像处理基础 M.北京:科学出版社,2005.附录各微分算子主要源程

33、序: void deal (unsigned char *red_data,unsigned char *green_data,unsigned char *blue_data,unsigned long width,unsigned long height,char d_type)unsigned long i=0,j=0,k=0,q_width=0,q_height=0; unsigned char *gray_buf;char c=0,flag=Y;float *r_buf,*quad_data,x=0;float quad_data3=/laplacian 算子 0, -1, 0, -

34、1, 4, -1, 0, -1, 0 , quad_data4=/改进的laplacian算子1 -1, -1, -1, -1, 9, -1, -1, -1, -1 , quad_data5=/改进的lapacian算子2 1, -2, 1, -2, 4, -2, 1, -2, 1 , quad_data6=/Sobel算子X -1, -2, -1, 0, 0, 0, 1, 2, 1 , quad_data7=/Sobel算子Y -1, 0, 1, -2, 0, 2, -1, 0, 1 , quad_data8=/Priwitt算子X -1, -1, -1, 0, 0, 0, 1, 1, 1,

35、 , quad_data9=/Priwitt算子Y -1, 0, 1, -1, 0, 1, -1, 0, 1 , quad_data10=/Roberts X -1 ,0, 0 ,1 , quad_data11=/Roberts Y 0 ,-1, 1 , 0 , q_width=3; q_height=3; flag=Y; if(gray_buf=calloc(width*height+10,1)=NULL) exit(0); if(r_buf=calloc(width*height+10,4)=NULL) exit(0); for(i=0;iwidth*height;i+) j=(red_d

36、atai+green_datai+blue_datai)/3; if(j256) gray_bufi=(unsigned char)j; else gray_bufi=255; r_bufi=(float)gray_bufi; quad_data=quad_data1; if(strcmp(d_type,Lsharp)=0) quad_data=quad_data1; if(strcmp(d_type,Vsharp)=0) quad_data=quad_data2; if(strcmp(d_type,Laplacian)=0) quad_data=quad_data3; if(strcmp(d

37、_type,Sobel)=0) flag=N;Sobel(quad_data6,quad_data7,gray_buf,width,height); if(strcmp(d_type,Priwitt)=0) flag=N;Sobel(quad_data8,quad_data9,gray_buf,width,height); if(strcmp(d_type,Roberts)=0) flag=N;Robert(quad_data10,quad_data11,gray_buf,width,height); if(strcmp(d_type,LOG)=0) quad_data=quad_data12

38、;q_width=5;q_height=5; if(strcmp(d_type,Canny)=0) flag=N;Canny (gray_buf,width,height); if(flag=Y) mul_add(quad_data,q_width,q_height,gray_buf,width,height); for(i=0;iwidth*height;i+) red_datai=gray_bufi; green_datai=gray_bufi; blue_datai=gray_bufi; free(r_buf); free(gray_buf); /从内存转至临时文件 void stori

39、ng(unsigned char *red_data,unsigned char *green_data,unsigned char *blue_data,unsigned long width,unsigned long height) FILE *fpr,*fpg,*fpb; unsigned long data_size=0; data_size=width*height; if(fpr=fopen(red.tmp,wb)=NULL) exit(0); if(fpg=fopen(green.tmp,wb)=NULL) exit(0); if(fpb=fopen(blue.tmp,wb)=NULL) exit(0); fseek(fpr,0,SEEK_SET); fseek(fpg,0,SEEK_SET); fseek(fpb,0,SEEK_SET); fwrite(&width,4,1,fpb); fwrite(&width,4,1,fpg);

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号