科学网

 找回密码
  注册

tag 标签: 边缘检测

相关帖子

版块 作者 回复/查看 最后发表

没有相关内容

相关日志

图像识别在锂离子电池检测中的应用
热度 1 bshen 2019-9-10 12:02
硕士学位毕业论文 硕士研究生: 徐文浩 指导教师:沈斌 教授 答辩时间:2018.06 徐文浩_图像识别在锂离子电池检测中的应用.pdf
个人分类: 硕士研究生毕业论文|2365 次阅读|1 个评论
Sobel算子的数学基础
热度 4 zmpenguestc 2018-10-6 13:47
图像处理及机器视觉应用中的 Sobel 算子,是以它的提出者 Irwin Sobel 名字命名的。该算子没有在任何期刊或会议上正式发表过,当时 仅在Stanford大学人工智能项目组的一个非正式的博士生讨论组会上与 Ga ry Feldman (当时的一个在读研究生,也是 Sobel 的朋友)共同提出。 Irwin Sobel 还曾专门撰文申明,建议把 Sobel 算子的命名改成“ Sobel-Feldman ”算子 。 图1 Sobel 算子(滤波模板) 对于这个看似简单却沿用了几十年的算子,包括国际上最流行的冈萨雷斯《数字图像处理》教材在内,很多教科书并没有对算子的原理和数学基础做具体描述。 Sobel算子考虑了水平、垂直和2个对角共计4个方向对的梯度加权求和,是一个3 × 3各向异性的梯度算子。另外,大部分教科书停留在对算子的直观解释上,一般描述为隔行或隔列的差分运算,然后做中心像素位置的2倍加权。实际上,并不是现行教科书上描述的简单的隔行/列的差分运算,中心像素位置也并未参与运算( N 8 (p)邻域,非3 × 3邻域 )。 Sobel 算子具有严格的数学基础,主要关键点在于: 1) 笛卡尔网格( Cartesian grid ); 2) 前向差分( Forward-difference ); 3) 距离反比的 4 方向对梯度加权; 4) 城市距离( City-block distance )。 图2 像素N 8 (p)邻域及 Cartesian 网格 定义一个给定邻域方向梯度矢量 g 的幅度为 | g | = 像素灰度差分 / 相邻像素的距离 Sobel 采用的像素距离是一种城市距离( city-block ),而并非通常的欧式距离。因此,对角方向相邻像素之间的距离值为 2 。 图2 三种邻域像素距离定义 矢量 ' g ' 的方向可以通过中心像素“ z5 ” 相关邻域的单位矢量给出,这里的邻域是对称出现的,即四个方向对: (z1, z9) , (z2, z8) , (z3, z7) , (z6, z4)。 沿着 4 个方向对上求其梯度矢量和,可以给出当前像素( z5 )的平均梯度估计,则有 G = (z3-z7)/4 * + (z1-z9)/4 * + (z2-z8)/2 * + (z6-z4)/2 * 式中 , 4 个单位向量 , , , 控制差分的方向,系数 1/4, 1/2 为距离反比权重。 上式展开后,有 G = 注意,上述公式里并没有求平方根。如果要求数字上的精确度,上式需要除以 4 得到平均梯度值。然而,一些典型的运算都是针对数值较小的整数的定点运算,除法会丢失低阶的重要字节 , 更方便的是把向量乘于 4 ,而不是除于 4 ,以保留低阶字节。因此,计算出的估计值比平均梯度在数值上扩大了 16 倍。 这样,计算公式变为: G ' = 4* G = = 按x-y方向,可分别写成: G'x = (z3 + 2*z6 + z9) - (z1 + 2*z4 + z7) G'y = (z1 + 2*z2 + z3) - (z7 + 2*z8 + z9) 以上式子,就与我们教科书上的表达式完全一致了,也很容易得出如图 1 所示的两方向 Sobel 算子模板。在邻域像素距离模型上,如果改用欧式距离,就不难得到Frei和Chen(1991)提出的边缘检测器了 。 另外,教科书上的一些经典滤波器,其实也都有它的计算模型,而不是人为的随意构建,如 高斯(Gaussian)滤波器, 拉普拉斯(Laplacian)滤波器, LoG 滤波器等。 写这篇文章,是因为 4 年前写了一篇博文:作者 40 年后谈 Sobel 算子的由来和定义 。博文下有匿名博主留言说没有看懂原理描述,本文可作为先前博文的补充和对匿名留言的回复。 同时,作为一个授课教师,也应该对这些算子或滤波器的数学基础和模型原理有更深入的理解,不能给学生打马虎眼。 参考阅读 Sobel I, Feldman G., A 3x3 isotropic gradient operator for image processing , A talk at the Stanford Artificial Project in 1968, 271-272. https://www.researchgate.net/publication/239398674_An_Isotropic_3_3_Image_Gradient_Operator . http://rastergrid.com/blog/2011/01/frei-chen-edge-detector/ . 彭真明,作者40年后谈Sobel算子的由来和定义 , http://blog.sciencenet.cn/blog-425437-776050.html . 长按/扫一扫二维码,敬请关注“闻道研学” !
个人分类: 闻图思学|42602 次阅读|8 个评论
二维褶积的编程实现
lcySI 2017-11-20 16:09
一、二维褶积 无论是一维还是二维褶积,通俗说都是“ 先反转再滑动 ”。二维褶积可以表示为 式中,x为输入数组(大小为m*n),h为滤波算子(大小为p*q),y为输出数组(大小为(m+p-1)*(n+q-1))。 二、编程实现 二维褶积的fortran程序见附件。 这里以边缘检测为例,进行二维褶积的说明。图1为原始层位数据(振幅表示的是双程旅行时) 图1 拉普拉斯算子(一种边缘检测算子)为 将原始层位数据与拉普拉斯算子进行二维褶积,可以得到如图2所示的边缘检测结果 图2 三、参考文献 1. Matt Hall. Smoothing surfaces and attributes . The Leading Edge, 2014. 2. 程乾生. 数字信号处理 . 北京大学出版社, 2010. conv2D.rar
个人分类: 物探|2623 次阅读|0 个评论
科普:LoG边缘检测算子
热度 11 zmpenguestc 2014-5-2 21:41
LoG边缘检测算子是David Courtnay Marr和Ellen Hildreth(1980)共同提出的 ,因此,也称为Marr Hildreth 边缘检测算法或Marr Hildreth算子。该算法首先对图像做高斯滤波,然后再求其拉普拉斯(Laplacian)二阶导数。即图像与 Laplacian of the Gaussian function 进行滤波运算。最后,可以 通过检测滤波结果的零交叉(Zero crossings)获得图像或物体的边缘。因而 ,也被业界简称为 Laplacian-of-Gaussian ( LoG ) 算子。 由于高斯函数(图1a)的二阶导数的3D图 (图1c) 倒置后,其形状有点像墨西哥草帽(图 2 ),因此,在业界也被称为墨西哥草帽小波( Mexican hat wavelet )。 图 1 (a) 高斯函数 (b) 高斯函数的一阶导数 (c) 高斯函数的二阶导数 图 2 墨西哥草帽( Mexican hat) 该算法的特点是由于先进行了高斯滤波,因而可以一定程度上克服噪声的影响。它的局限性在于以下两个方面: (1)可能产生假边缘(false edges); (2)对一些曲线边缘(curved edges)的定位误差较大。 尽管该算法存在以上不足,但对未来图像特征研究起到了积极作用。尤其对图像先进行高斯滤波(噪声平滑)再进行图像梯度计算的思想的引入,被后来性能优良的 Canny 边缘检测算法 ( Canny edge detector ) 所采用。同时,这种思想也被后来很多的图像特征检测技术所采纳,如 Harris 角点,尺度不变特征变换( SIFT )等。 LoG算子的提出者,David Marr(1945-1980)是出生于英国的一位著名的神经系统方面的科学家(Neuroscientist)和心理学家(Psychologist)。他综合心理学、人工智能、神经生理学等成果研究了一系列新的视觉处理模型。他的研究对未来计算神经科学发展产生了极大影响,且导致了本学科中关于兴趣机制研究的复苏。 遗憾的是,这位科学家英年早逝, 年仅35岁。 Marr与Hildreth合作的 论文于1979年完成修改稿,并接受录用,1980年论文见刊的当年,Marr因白血病(Leukemia)去世( 当年他获得 麻省理工学院 终生正教授的职位)。 该论文 目前已被相关领域的学者引用6000余次。计算机视觉领域的最负盛名的奖项之一, Marr奖 就是以他的名字命名的。每两年召开一次的计算机视觉领域的顶级会议(ICCV)上,都要评选优秀论文的作者作为该奖项的获得者。 该算法的另一位贡献者(图 3 ), Ellen C. Hildreth , 本科、硕士、博士均毕业于 MIT 计算机科学系。目前为 韦尔斯利女子学院 ( Wellesley College )计算系教授,同时也是 MIT “ 人脑、记忆与机器智能中心( Center for Brains, Minds and Machines )”的科学家。 图 3 Ellen C.Hildreth 参考阅读: http://en.wikipedia.org/wiki/Marr-Hildreth_algorithm http://en.wikipedia.org/wiki/David_Marr_(neuroscientist) http://www.wellesley.edu/cs/faculty/hildreth http://zh.wikipedia.org/wiki/ 大卫·马尔 Marr D, Hildreth E. Theory of edge detection . Proc. of the Royal Society of London. Series B. Biological Sciences, 1980,207(1167): 187-217.
个人分类: 闻图思学|53242 次阅读|16 个评论
[CODE]快速边缘检测及代码
qianli8848 2012-5-29 08:55
[CODE]快速边缘检测及代码
2011年CVPR,MIT的 Jason Chang 发表了一篇文章:Efficient MCMC Sampling with Implicit Shape Representations 主要用于边缘检测。速度是普通方法的50,000倍(In contrastto previous methods, BFPS easily and efficiently handlestopological changes, large perturbations, and multipleregions, while exhibiting a 50,000 times speed up.) 代码可以到作者主页下载。
个人分类: CODE|4321 次阅读|0 个评论
边缘检测技术在地震储层预测中的研究进展(本文供交流探讨)
许辉群 2011-2-15 10:39
0 引言 地震信息的处理与分析是介于地球科学、信息科学与数理科学之间的边缘科学。运用多学科的综合研究将会取得新的成果,杨文采 院士曾提出“地球物理数据分析是一个支在三脚架上的人造水晶,这个脚架的三条脚分别是地球科学、数理科学、信息科学”,明确要求从事地球物理数据处理分析的科研人员一定要紧盯这三条腿。边缘检测技术就是集这三种科学于一体的综合研究技术,特别是在一些常规方法利用地震资料进行砂泥岩边界、砂体识别以及裂缝储层识别效果不明显的情况下,利用边缘检测技术可以解决这些问题。因此边缘检测技术在地震储层预测中的应用就是紧跟勘探需求而发展的一门综合技术,并且这一技术也印证了学会“三条腿”走路。 边缘检测技术是通过计算机对图像进行去噪、增强、复原、分割、提取特征等处理的方法和技术,可以利用数字图像处理的差分、小波变换等技术在地震储层预测中进行研究 。该技术采用三位一体的研究模式,首先要寻求符合地质规律的数学算法和信息技术,使地球物理资料以图像的形式表达,其次运用图像处理方法对其进行处理和分析,提高对地质问题的认识能力。本文将边缘检测技术在储层中裂缝、砂岩边界识别作为一个实例进行列举,以此为广大物探工作者推广一新思路,即边缘检测技术在储层预测中的应用研究。 1 应用概述 目前,国内外科学家在储层预测研究中,利用边缘检测技术在应用中取得了很好的应用效果,前期主要是集中对断裂的研究,近年来,在砂体边界识别及裂缝储层预测中也取得了一些应用效果。 1.1 砂体边界识别 在地震资料解释中,利用边缘检测技术主要是识别一些较小级别的断裂,特别是地震资料分辨率较低的情况下,一些小断层在剖面上规模较小,一般不把它们解释为断层。在这种情况下,引入边缘检测算法,该方法可以识别出图像或数据中某一级别的边缘,能够很好地对特定尺度的地质特征进行成像,从而能识别储层小断裂 。随着勘探难度的增加,特别是在油藏开发阶段,砂体的边界对油藏的评价极其重要。该技术在断裂识别以及砂体边界的识别上,就是寻找图像中变换比较剧烈的像素位置,这些像素可以简单的表示图像中有用的信息即断层以及河道边界信息。在储层表征中,河道砂及小断裂的正确刻画对于油气勘探和开发都具有重要的意义。因此,利用河道边界和储层小断裂在地震数据中边缘特征,应用边缘检测技术能够直观地描述数据中的边缘特征。 图 1 砂体分布(引自文献 11 ) Fig. 1 distribution range of sandstone ( reference ) 与相干体技术相比,边缘检测技术具有其独特的优势,最大优点在于其多尺度性。由于河道以及断层周围的沉积特征用像素来描述就是不同像素的集合体,而边缘检测技术针此类对象的处理,有其独特优势。利用图像处理中边缘检测理论,对地震数据进行处理,不仅可以识别三维数据体中断层 ,还可以对河道和储层小断裂的成像 。另外,砂体的连通性方面,利用边缘检测技术对河道砂体连通性的可靠描述对注采井网的合理部署及采收率的提高有重要意义,那么目标层序砂体的平面分布图(图1)对于井网部署有指导意义。 1.2 裂缝预测 裂缝不仅是决定低渗透储层产能的关键因素,也影响裂缝油气藏的形成与分布。裂缝性储层识别与评价是勘探的难点。从数字图像的角度来看裂缝是一幅图像的突变带,因此将图像处理技术应用移植到地震储层中将会给裂缝储层预测带来新的思路。国外学者R.Solis等人运用到边缘检测技术对RMS地震属性进行处理,然后结合电阻率成像测井资料、岩性资料、钻井速度资料以及瞬时压力资料预测裂缝 。另外,Saleh AI-Dossary等人运用边缘检测对相干体和负曲率两种属性进行对比实验研究裂缝 以及Naji A.Qasim等人在研究裂缝倾角时也运用到了边缘检测算法 。 图2 小波多边缘检测裂缝发育带(引自文献7) Fig. 2 distribution range of fracture by multi-wavelet ( reference ) 国内学者在边缘检测方面的研究更为具体,提出了明确的算法和研究对象。其中贺振华先生选定振幅数据这一对象,运用数字图像处理方法对振幅值进行检测预测裂缝 ,黄捍东等人选定小波多尺度边缘检测理论,结合地震波场对裂缝的多尺度特性,提出了碳酸岩裂缝预测的多尺度边缘检测方法,该方法的主要思想是利用小波变换模的局部极值,检测出三维地震记录裂缝点特征位置,并通过调整模值在图像中的灰度,识别裂缝发育区的范围 。基于小波多尺度边缘检测这一原理,对某一油田碳酸盐岩泥岩裂缝进行检测,取得了很好应用效果,从该图(图2)可以看出,红色代表裂缝发育带,为裂缝储层平面展布提供了依据。 2 地震数据预处理方法 根据前人研究实例可以看出,边缘检测方法之前必须对地震数据进行处理,否则检测效果不理想。此类关于石油勘探文献比信息领域文献少,但在信息科学中应用也比较成熟。地震数据预处理就是为储层预测服务的,利用地震数据进行图像处理,首先对地震数据图像进行数据转换,得到地震剖面图像。而地震资料采集携带的噪音必定影响地震资料的品质,因此,要对地震资料进行预处理,就是应用各种数字图像处理技术来改善图像质量,使处理过的图像清晰、对比度增强、目标区域突出和噪声得以消除。但在预处理算法中,要保持边缘不改变,又要抑制无关细节和噪声,目前在这方面的研究算法很多,自适应误差扩散算法算法、中值滤波等等。这些方法的目的是平滑脉冲噪声方法,同时又要保护图像尖锐的边缘。只有在图像预处理方法上过关,才能在后续的地震储层预测中取得较好的应用效果。 2.1 滤波方法 地震信息不仅携带地下丰富信息,一类是研究对象(裂缝、小断裂以及砂岩边界等),还有一类是与研究对象无关的信息(如噪音)。在这些信息中有些信息是研究对象,而还有些信息对没有实际应用价值,因此对地震信息的滤波显得十分必要。在此方面陈凤等人利用“二维沿层滤波”技术提高地震剖面图像的信噪比。其关键技术是利用光流分析技术,计算出多振幅地震剖面对应点的偏移量,然后应用图像积累技术对多幅地震剖面进行积累,实现对三维地震数据体提高信噪比的处理。该方法充分利用了三维地震信息,不但可以提高整个数据体的信噪比,而且可以减少信号能量的损失,并保持原来信号能量关系,使地震剖面的质量得到明显提高,为地震解释奠定良好基础 。该方法的实现,也必将为边缘检测技术在地震勘探中应用奠定基础,特别是针对地震数据的数字图像处理中,所采取的方法必须要保持储层的边界,相应的处理方法也应该满足需要。 2.2 边界处理方法 地震信息量十分丰富,目标(断裂、裂缝、砂岩边界等)信息和其他信息融合在一起。针对此情况,必须对地震数据进行保边界处理,一些学者提出了一种基于边缘检测的动态误差分散算法。该方法沿着每个像素的误差分散方向进行边缘检测,再根据边缘检测结果动态地选择该像素各个方向的误差分散系数,此方法可以有效减小误差分散过程中的误差积累。实验表明,此方法可以改善由误差分散系数固定而引起的图像轮廓细节损失 。另外,还有学者针对传统误差扩散法在中频区域存在的结构纹理,提出了一种基于视觉差的误差扩散算法( PEB Error Diffusion )。 PEB-ED 借鉴了 DBS 中考察人类视觉误差的思想,对误差扩散结果进行二次处理,减少由固定的误差扩散滤波器所产生的结构性纹理,提高图像的整体视觉效果 。在众多的滤波算法中,王绪松等人提出了一种自适应反馈视觉感知差的误差扩散算法 ( PEF ErrorDiffusion 算法)。该方法首先提出视觉感知差的概念,然后根据原图像区域的灰度特征, 自适应地计算反馈系数, 将视觉感知差反馈给原连续调图像, 以补偿误差扩散所引起的不同区域的灰度损失。实验结果表明, PEF Error Diffusion 算法能够明显增强图像的整体对比度, 减弱点增益现象的不良影响, 并准确再现更多的图像细节, 因而表现出比传统算法更好的主观视觉效果 ,该方法的运用,将在地震储层细节的描述上提供很好的保证。另外加权中值滤波对地震属性进行滤波处理,这样可以减少噪声带来的影响 。 3 边缘检测算法分析 3.1 常见算子分析 从掌握的文献来看,边缘检测算法在地震储层中的应用对比分析极为少见,但信息科学领域,此类文献相当多。例如 Sobel 算子对图像进行差分和滤波运算,因此对噪声具有一定的抑制能力。另外从前人的研究中可知,该类算子对灰度渐变和具有噪声的图像处理的效果较好;其次是 Laplacian 边缘检测算子较好,因为 Laplacian 算子是二阶微分算子的代表,该算子对图像中的阶跃型边缘点定位准确且具有旋转不变性即无方向性,但该算子容易丢失一部分边缘方向信息,造成一些不连续的检测边缘 。上面仅对一些算子对图像处理效果进行分析,下面结合实际数学模型仅对差分算子进行可行性分析,差分模型 :假设一个信号为x( t ),而信号x( t )的微分运算是指x( t )对 t 求导数,即: ( 1 ) 图 3 模型一信号 x(t) 的图像 图 4 模型一信号 x(t) 求导后的图像 Fig.3 the graphic of model one’s singnal Fig.4 the graphic of model one’s singnal derivation 从图3模型一信号x( t )的图像到图4的变化过程即为边缘检测的实现过程。经典边缘检测属性就是利用微分的这一特性对图像的边界点进行检测,由模型可见,该方法检测效果有效,在实际应用中可以推广。 3.2 多尺度小波变换 裂缝检测与图像分析中边缘检测有许多相似之处,基于小波多尺度边缘检测理论,结合地震波场对裂缝的多尺度性,利用小波变换模的局部极值,对这些极值设定阈值加以限制,检测三维地震记录裂缝点特征位置,然后根据钻井、测井资料得到的裂缝分级和该区裂缝分布的总体特征,调整模值在图像中的灰度,最后自动识别裂缝发育区的范围 。 3.3 实用性分析 针对储集层砂体识别及裂缝分析,一般的方法是基于道间奇异性的检测,在检测出裂缝发育带的同时也会检测出噪声。无论是简单算子的边缘检测还是多尺度小波边缘检测方法,在针对目标进行检测时,必须进行保边界的滤波,然后才能利用边缘检测方法进行处理。否则,边缘检测的结果就有很大的不确定性,即噪音的干扰。 4 认识与展望 地震信息处理与分析是一门交叉学科,边缘检测技术好坏依赖地震数据、地质目标以及数学方法共同决定。在方法的选择上,一般要经过多种方法的对比分析以及各种保界算法进行特殊处理才能达到目的。但无论是经典边缘检测算法还是其他复杂的边缘检测方法,每一种方法得到的效果是不同的。因此,边缘检测技术在地震资料中应用问题不仅仅是简单的图像处理问题,而是一项综合运用各种技术手段的过程。特别是针对储层中的小断裂、裂缝以及砂体边界识别与成像,首先要对地震数据进行保边界滤波处理,然后根据研究对象尺度级别选定合适数学算法进行处理,最后对处理后的结果的量纲的认识与理解,并将其与地质目标进行匹配。 针对边缘检测这一技术能够有效解决储层中小断裂、裂缝以及砂体边界识别等问题,建议地球物理工作者首先要针对具体目标建立合适的数学模型对算法加以验证,例如,以差分为代表的经典边缘检测方法,可以通过数学模型得知,差分对信号可以突出其变化点,此点即为边缘;其次,加强软件编制,移植和借鉴其他学科的技术和研究成果应用到石油地球物理勘探中;最后,边缘检测技术在石油勘探与开发中的应用应该结合地质、物探、钻测井资料进行综合分析。特别是在储层标定方面,要结合研究区已知钻测测井以及地质资料进行分析,从而达到无井区的分析。
个人分类: 论文交流|3926 次阅读|0 个评论
基于canny边缘检测算法的IDL源码示例
dongyanqing 2010-12-1 22:19
电脑中无意everything出这个pro来,简单修改完善了下共享出来。 PRO kill_canny_app, event shmunmap, 'rose_shmmap' END PRO CannyApp_event, event centered = 0 case widget_info(event.id, /uname) of HIGHv: goto, FilterIt LOWv: goto, FilterIt SIGMAv: goto, FilterIt BtnQuit: goto, ExitFilterApp endcase FilterIt: sliderH_ID = widget_info(event.top, find_by_uname = HIGHv) widget_control, sliderH_ID, get_value = HighValue ; -- in percentage sliderL_ID = widget_info(event.top, find_by_uname = LOWv) widget_control, sliderL_ID, get_value = LowValue ; -- in percentage sliderS_ID = widget_info(event.top, find_by_uname = SIGMAv) widget_control, sliderS_ID, get_value = SigmaValue ; -- in percentage HighValue = HighValue * 0.01 LowValue = LowValue * 0.01 SigmaValue = SigmaValue * 0.01 wDraw2_ID = widget_info(event.top, find_by_uname = RoseEdges) widget_control, wDraw2_ID, get_value = ID_grWindow2 rose_image = shmvar('rose_shmmap') ;_____Plot the edges of the image:_____ wset, ID_grWindow2 rose_xsize = (size(rose_image, /dimensions)) rose_ysize = (size(rose_image, /dimensions)) red_rose = reform(rose_image , rose_xsize, rose_ysize) green_rose = reform(rose_image , rose_xsize, rose_ysize) blue_rose = reform(rose_image , rose_xsize, rose_ysize) red_edge = CANNY(red_rose, HIGH = HighValue, LOW = LowValue, SIGMA = SigmaValue) green_edge = CANNY(green_rose, HIGH = HighValue, LOW = LowValue, SIGMA = SigmaValue) blue_edge = CANNY(blue_rose, HIGH = HighValue, LOW = LowValue, SIGMA = SigmaValue) RGB_edge = bindgen(3, 227, 149) RGB_edge = red_edge * 255 RGB_edge = green_edge * 255 RGB_edge = blue_edge * 255 TV, RGB_edge ,CHANNEL=1 TV, RGB_edge ,CHANNEL=2 TV, RGB_edge ,CHANNEL=3 goto, AllDone ExitFilterApp: shmunmap, 'rose_shmmap' widget_control, event.top, /destroy return AllDone: END PRO CannyApp COMPILE_OPT IDL2 ;_____Create the unfiltered image:_____ rose_path = C:\Program Files\ITT\IDL\IDL80\examples\data\rose.jpg if file_test(rose_path) ne 1 then begin tmp = dialog_message('file not exist'+String(13b)+$ rose_path,/error) return endif rose_image = read_image(rose_path) ;______________________________________ ;_____Set up shared memory (so event handler can have image):_____ shmmap, 'rose_shmmap', /BYTE, size(rose_image, /dimensions) shm_var = shmvar('rose_shmmap') shm_var = rose_image ;_________________________________________________________________ ;_____Create the edge-detected image:_____ rose_xsize = (size(rose_image, /dimensions)) rose_ysize = (size(rose_image, /dimensions)) red_rose = reform(rose_image , rose_xsize, rose_ysize) green_rose = reform(rose_image , rose_xsize, rose_ysize) blue_rose = reform(rose_image , rose_xsize, rose_ysize) red_edge = CANNY(red_rose) green_edge = CANNY(green_rose) blue_edge = CANNY(blue_rose) RGB_edge = bindgen(3, 227, 149) RGB_edge = red_edge * 255 RGB_edge = green_edge * 255 RGB_edge = blue_edge * 255 ;____________________________________ ;_____Build the widgets:_____ wTLB=WIDGET_BASE(/ROW) wControls = widget_base(wTLB, /column) wLeft = WIDGET_BASE(wTLB,/COLUMN) wRight = WIDGET_BASE(wTLB,/COLUMN) wBase1 = WIDGET_BASE(wLeft,/COLUMN) wBase2 = WIDGET_BASE(wRight,/COLUMN) wText1a = WIDGET_LABEL(wBase1,VALUE=Original Rose) wDraw1 = WIDGET_DRAW(wBase1,XSIZE = rose_xsize, YSIZE = rose_ysize) wText2 = WIDGET_LABEL(wBase2,VALUE=Rose's edges) wDraw2 = WIDGET_DRAW(wBase2,XSIZE = rose_xsize, YSIZE = rose_ysize, uname = RoseEdges) ;_____Controllers:_____ wSliderH = widget_slider(wBase1, title = High Value (% of maximum pixel value):, maximum = 100, $ minimum = 0, value = 80, uname = HIGHv) wSliderL = widget_slider(wBase1, title = Low Value (% of High Value):, maximum = 100, $ minimum = 0, value = 40, uname = LOWv) wSliderS = widget_slider(wBase1, title = Sigma %, maximum = 100, $ minimum = 0, value = 60, uname = SIGMAv) wButtonQuit = widget_button(wBase1, value = Quit Edge App, uname = BtnQuit) ;____________________________ WIDGET_CONTROL,wTLB,/REALIZE ;____________________Draw the images:____________________ widget_control, wDraw1, GET_VALUE = window1ID widget_control, wDraw2, GET_VALUE = window2ID ;_____Plot the original image:_____ wset, window1ID reconstructed_rose = bindgen(227, 149, 3) reconstructed_rose = red_rose reconstructed_rose = green_rose reconstructed_rose = blue_rose TV,rose_image ,CHANNEL=1 TV,rose_image ,CHANNEL=2 TV,rose_image ,CHANNEL=3 ;_____Plot the edges of the image:_____ wset, window2ID TV, RGB_edge ,CHANNEL=1 TV, RGB_edge ,CHANNEL=2 TV, RGB_edge ,CHANNEL=3 ;________________________________________________________ XMANAGER,'CannyApp',wTLB, cleanup = kill_canny_app END ;---
个人分类: IDL技术|9831 次阅读|0 个评论
常用图像边缘检测算子的分析
subailong 2010-5-2 22:08
具体内容见研究报告 图像边缘检测研究报告
个人分类: 未分类|4525 次阅读|0 个评论

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-20 20:45

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部