网站大量收购独家精品文档,联系QQ:2885784924

基于IBMSWT技术的图像差异检测-博客园.PDF

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于IBMSWT技术的图像差异检测-博客园.PDF

基于IBM SWT技术的图像差异检测 作者:魏强(乘风归去) 博客地址:/cfgq/ 欢迎转载,转载请注明出处, 本文首发于博客园 如有需要,请加QQ 群:174297097 或发邮件:weiqiang.john@ 引言 SWT(Standard Widget Toolkit,标准窗口小部件工具箱) ,是IBM 公司提供的Java 桌面应用的开 发包,SWT 中包含了处理图像的API ,即SWT Image API,Java 程序员可以利用此API 进行简 单的图像处理。本文使用SWT Image API 实现了图像处理中较为复杂的二值化、腐蚀、膨胀等 算法,并且使用图像差异检测的应用实例展示算法的应用,主要目的是让读者熟悉IBM SWT Image 技术。 图像本质 图像是由像素点组成,像素是最小的颜色单位,每个像素又是由一个到多个的字节组成,一个 字节是由0-255 的数字表示,可以说图像数据就是一个0-255 的字节数组,二维图像数据就是 一个二维像素数组。 对于RGB 色彩空间,像素的颜色是由R G B 三个分量决定,每个分量是一个字节(0-255 ), 也就是说对于一般图像某个字节数据就是某一像素的颜色分量的数值,本文介绍的算法主要是 读取图像数据的字节数组,按照算法规则修改数组数据(也就是R G B 颜色分量的数值),改 变像素颜色。 SWT 中使用org.eclipse.swt.graphics.Image 类代表图像对象,org.eclipse.swt.graphics.ImageData 代表图像中具体的图像数据,通过org.eclipse.swt.graphics.ImageLoader 的load 方法,可以加载 ImageData 对象。 ImageData 的data 属性代表图像数据的字节数组,height 属性代表图像的高度(像素的个数), width 属性代表图像的宽度(像素的个数),bytesPerLine 属性代表每行的字节数组,对于一般 的数字图像,可以认为bytesPerLine/width=每像素占的字节数,像素的每个字节代表颜色空间 的一个分量值。 图像处理算法的应用 本文的例子,是使用两张相似图像 (在图像显示的某些地方有不同点,大部分是相同的,类似 《大家来找茬》游戏中的对比图片),经过一系列的处理,生成可以清晰显示两张图像不同点 位置的图像,图1 显示的是刚开始的两张对比图像。 图 1. 对比图像 如果用肉眼分辨图像中的不同点,是靠运气和观察力的,这也是“大家来找茬”游戏的乐趣所 在。那么,如何用机器来识别呢?接下来,文章将根据如下列表的顺序,对两张图像进行处理  图像相减  灰度图像  二值化  图像膨胀  图像腐蚀  均值滤波 每个步骤都是在前一步骤的基础上进行,两张图像不同点的位置会随着一步一步的图像处理变 的越来越清晰。读者还可以查看本文的附件代码进行学习。 图像相减 图像相减的目的是生成两张图片不同点的大致轮廓,首先获得上述两张图像数据的字节数组 (即ImageData 的data 属性对象),由于两张图片大小相同,类型相同,将两个字节数组中的 相同位置的数值进行相减并求绝对值,放置到新开辟字节数组中的同一位置,新数组的长度与 原图像字节数组相同。然后,将新开辟的字节数组保存成图像,那么就完成了图像的相减,生 成了新的一个图像,大小、类型都与原图像相同,清单1 是将两个图像数据相减生成新的图像 数据的方法。 清单 1. 图像相减代码 public static ImageData absDiff(ImageData source, ImageData target) { byte[] sourceData = source.data; byte[] tagetData = target.data; if (sourceData.length == tagetData.length) { for (int i = 0; i sourceData.length; i++) { sourceData[i] -=

文档评论(0)

xiaozu + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档