基于谱聚类的图像分割

合集下载

基于聚类算法的图像分割研究

基于聚类算法的图像分割研究

基于聚类算法的图像分割研究随着数字图像处理的快速发展,图像分割算法已经成为了研究领域中的重要内容。

图像分割是对数字图像中的像素进行划分,将图像分成若干个有意义的部分,这些部分之间可以很明显的区分开来,而且每一部分具备不同的语义信息。

在自动化图像分析和计算机视觉应用中,图像分割算法是其他图像算法的基础和前提,图像分割质量的高低直接关系到后续算法的行业效果。

因此,在图像分割算法研究领域中,通用性比较强的聚类算法成为了主要研究方向之一。

聚类算法是基于数据相似性的将数据对象分组的一种数据分析和抽象方法。

这些对象可以是空间三维坐标、文本信息、符号等任何类型的事物。

聚类算法的思想是将每个事物分别看作一个数据对象,通过各种算法的处理,将具有相似特性的对象合并成一个大的节点,从而形成分类结构。

聚类算法分为层次聚类和非层次聚类两类。

将聚类算法用于图像分割就是将图像中的像素通过聚类算法进行聚类,使得每个簇内的像素具有相似的颜色、纹理和灰度等特性,而不同簇的像素特性不同。

聚类算法对于实际应用具有很大的价值,因为它是一种无监督学习模式,可以在没有标记的情况下对数据进行处理。

同时,聚类算法在图像分割中可以更好地将图像分割成有意义的部分,从而为图像分类和图像识别提供了支持。

在聚类算法中,KMeans算法是最常见的一种算法,也是应用最广泛的一种算法。

KMeans算法的基本思想是将数据中心点分成K个类别,其中K值是由用户事先指定的,然后通过不断的迭代运算来分割数据集。

KMeans算法的效率高,准确性较高,而且在图像分割中,它具有较好的应用效果。

KMeans算法的主要步骤分成三个步骤,分别是初始化K值、更新簇心和更新聚类分配。

图像分割基于KMeans算法的步骤主要是:首先将图像像素进行采样,将采样到的像素值作为数据集。

然后,定义K个初始聚类簇中心,通过迭代过程来更新聚类簇心和聚类分配。

对于每个像素,计算它们和聚类簇心的距离(通常是像素之间的欧几里得距离),将它们分配到最接近的簇中心。

基于聚类的图像分割算法研究

基于聚类的图像分割算法研究

基于聚类的图像分割算法研究一、本文概述随着信息技术的飞速发展和图像数据的日益增多,图像分割作为计算机视觉和图像处理领域的核心问题之一,其研究价值和实际应用需求日益凸显。

图像分割旨在将一幅图像划分为若干个具有相似性质(如颜色、纹理、形状等)的像素集合,以揭示图像中的不同对象或区域。

在众多图像分割算法中,基于聚类的图像分割算法因其能够有效地利用图像像素间的相似性进行区域划分,而受到广泛关注。

本文旨在深入研究和探讨基于聚类的图像分割算法的原理、方法、技术及其发展趋势。

文章首先概述了图像分割的基本概念和重要性,分析了传统图像分割方法存在的问题和挑战。

随后,重点介绍了基于聚类的图像分割算法的基本原理和常用方法,包括K-means聚类、模糊C-means聚类、谱聚类等,并对各种方法的优缺点进行了比较和分析。

在此基础上,本文进一步探讨了基于聚类的图像分割算法在实际应用中的问题和挑战,如噪声干扰、计算效率、分割精度等,并提出了相应的解决方案和改进策略。

本文还介绍了基于聚类的图像分割算法在医学图像分析、遥感图像处理、视频监控等领域的应用案例和实际效果。

本文总结了基于聚类的图像分割算法的研究现状和发展趋势,展望了未来研究方向和应用前景。

本文旨在为相关领域的研究人员和技术人员提供有价值的参考和启示,推动基于聚类的图像分割算法在理论和实践上的进一步发展。

二、聚类算法概述聚类分析是一种无监督的机器学习方法,其目标是将数据集中的对象划分为若干个组或类别,使得同一类别内的对象尽可能相似,而不同类别之间的对象尽可能不同。

在图像分割领域,聚类算法被广泛应用于从像素级别到区域级别的分割任务中。

聚类算法的核心思想在于定义一种度量标准来衡量数据点之间的相似性,并根据这种相似性将数据点划分为不同的群组。

常见的聚类算法包括K-means算法、层次聚类算法、DBSCAN算法、谱聚类算法等。

K-means算法是最经典的聚类算法之一,它通过迭代优化的方式将数据点划分为K个类别,使得每个数据点到其所属类别中心的距离之和最小。

基于聚类算法的图像分割技术研究

基于聚类算法的图像分割技术研究

基于聚类算法的图像分割技术研究随着人工智能技术的发展和普及,图像处理技术也逐渐成为越来越热门的话题,图像分割技术是其中不可或缺的一环。

基于聚类算法的图像分割技术是目前应用最广泛、效果最好的一种算法之一,本文就聚焦于这一技术进行探讨。

一、图像分割技术简介图像分割技术指将一幅图像分成若干个不相交的区域,每个区域内具有相同或类似的特征。

图像分割是图像处理的一项重要任务,不同于其他图像处理技术的是,分割技术能够直接针对数据特征进行处理,并且所得到的分割结果非常直观,符合人们的观察习惯。

图像分割技术应用领域广泛,如医学图像、工业图像、地质图像、遥感图像等都需要分割技术,因为分割结果是后续图像处理的前提和基础。

二、基于聚类算法的图像分割技术聚类算法是一种数据分析和过程控制的技术,其核心思想是将一组数据按照相似程度划分为不同的组。

而基于聚类算法的图像分割技术则是利用聚类算法将图像中的像素点分成若干个类别,从而实现图像分割的目的。

聚类算法常用的方法有k均值算法、层次聚类算法和密度聚类算法等。

在图像分割中,k均值算法应用较为广泛。

它的基本思想是按照欧几里得距离将图像像素点聚成k个簇,使得同一簇内的像素点之间距离较小,不同簇之间距离较大。

K-means算法的详细细节在此不做阐述,笔者将聚焦于其在图像分割中的应用。

图像分割算法一般可分为两大类:基于全局信息和基于局部信息的分割。

基于全局信息的分割方法将所有像素看作一个集合,聚类算法作用于所有的像素。

基于局部信息的分割方法则在选定一些具有代表性的区域用聚类算法分割,然后将所有像素点分到这些区域中。

两种方法分别有利弊,应根据实际场景而定。

三、基于聚类算法的图像分割技术的优缺点基于聚类算法的图像分割技术是目前应用最广泛、效果最好的一种算法之一。

其优点主要体现在以下几点:1. 聚类算法具有很好的可扩展性,可以分析大规模的数据集。

2. 聚类算法不需要任何先验知识或假设条件,而是直接从数据中学习规律,因此具有一定的自适应性。

谱聚类算法在图像分割中的应用研究

谱聚类算法在图像分割中的应用研究

谱聚类算法在图像分割中的应用研究图像分割是计算机视觉领域中的一个重要研究方向,它的目的是将图像中的像素分成若干个具有一定意义的区域,这样可以为后续的图像识别、目标检测等任务提供更加准确的信息。

目前,图像分割算法有很多,其中一种比较有效的算法是谱聚类算法。

一、谱聚类算法的原理谱聚类是一种基于谱理论的算法,其主要思想是将图像中的像素看成图论中的节点,然后利用相邻节点之间的相似度作为边,建立成一个无向图。

接着,对这个无向图进行拉普拉斯矩阵变换,将其转化为一个度量矩阵,然后对这个度量矩阵进行特征分解和聚类,此时就可以实现对图像的分割。

谱聚类的基本流程如下图所示。

二、谱聚类算法在图像分割中的应用谱聚类算法可以用于图像分割的原因在于它能够自动地发现图像中的聚类结构。

在谱聚类中,图像的像素被看作是图的节点,节点之间的相似度通过欧氏距离或其他相似度度量方法计算得出。

然后,通过构建拉普拉斯矩阵,将原始图像转化为一个新的空间,使得相互之间相似的像素点在新的空间中距离越近。

最后,应用聚类算法将新的空间中的节点进行分类。

谱聚类算法在图像分割中的应用具有以下优点:1.可扩展性好:谱聚类算法通常比传统的图像分割算法更具有可扩展性,可以应对大规模图像分割问题。

2.精度高:谱聚类算法在分割小区域时精度较高。

3.适用性强:谱聚类算法通常不需要预先设定聚类的数量,而是利用自适应性的聚类方法来自动地进行聚类,从而适用于不同的图像分割问题。

三、谱聚类算法在图像分割中的应用案例谱聚类算法在图像分割中的应用有很多,以下是几个经典的应用案例。

1、医学图像分割医学图像是用来辅助医生诊断疾病的重要工具,因此准确的医学图像分割具有重要的意义。

谱聚类算法在医学图像分割中的应用方法是:将医学图像中的像素看作是节点,通过计算相邻节点之间的相似度建立成一个无向图,然后通过拉普拉斯矩阵变换和特征值分解将这个无向图映射到低维空间中,最后利用聚类算法将映射到低维空间中的节点进行分类。

基于聚类的图像分割研究文献综述

基于聚类的图像分割研究文献综述

基于聚类的图像分割研究文献综述一.图像分割概述图像分割是一种重要的图像分析技术。

在对图像的研究和应用中,人们往往仅对图像中的某些部分感兴趣。

这些部分常称为目标或前景(其他部分称为背景)。

它们一般对应图像中特定的、具有独特性质的区域。

为了辨识和分析图像中的目标,需要将它们从图像中分离提取出来,在此基础上才有可能进一步对目标进行测量,对图像进行利用。

图像分割就是把图像分成各具特性的区域并提取出感兴趣目标的技术和过程。

现有的图像分割方法主要分以下几类:基于阈值的分割方法、基于区域的分割方法、基于边缘的分割方法以及基于特定理论的分割方法等。

近年来,研究人员不断改进原有的图像分割方法并把其它学科的一些新理论和新方法用于图像分割,提出了不少新的分割方法。

图象分割是图象处理、模式识别和人工智能等多个领域中一个十分重要且又十分困难的问题,是计算机视觉技术中首要的、重要的关键步骤。

图象分割应用在许多方面,例如在汽车车型自动识别系统中,从CCD摄像头获取的图象中除了汽车之外还有许多其他的物体和背景,为了进一步提取汽车特征,辨识车型,图象分割是必须的。

因此其应用从小到检查癌细胞、精密零件表面缺陷检测,大到处理卫星拍摄的地形地貌照片等。

在所有这些应用领域中,最终结果很大程度上依赖于图象分割的结果。

因此为了对物体进行特征的提取和识别,首先需要把待处理的物体(目标)从背景中划分出来,即图象分割。

但是,在一些复杂的问题中,例如金属材料内部结构特征的分割和识别,虽然图象分割方法已有上百种,但是现有的分割技术都不能得到令人满意的结果[2],原因在于计算机图象处理技术是对人类视觉的模拟,而人类的视觉系统是一种神奇的、高度自动化的生物图象处理系统[1]。

目前,人类对于视觉系统生物物理过程的认识还很肤浅,计算机图象处理系统要完全实现人类视觉系统,形成计算机视觉,还有一个很长的过程。

因此从原理、应用和应用效果的评估上深入研究图象分割技术,对于提高计算机的视觉能力和理解人类的视觉系统都具有十分重要的意义。

基于快速谱聚类的图像分割算法

基于快速谱聚类的图像分割算法

杂度fO n) f ( '其中 为图像像素数 , 像素特征维数 ) j ; ( 劝 . 而对权矩阵 进行特征值分解的计算复杂度更是高达 On)] ( [ 5 ,如此高昂的计算代价和存储需求严重限制了 谱 聚类在 图像分割中的应用. 传统谱聚类要求对相 2 ) 似度 图的参数 精确设置 , 常见 的相似度 图是全 联通 图 ,
谱聚类对样本的空间结构不做强的假设 ,且算法 不会 陷入局 部最优 【,是解决非 凸样本 集聚类 问题 的 4 ]
收稿 日期 :2 1一 l 3 0 1l一 . 0
基金项 目:国家 自 然科学基金资助项 目 ( 070 2 . 6 954 ) 作者简介:李纯(9 4) 18 一,男 ,硕士研究生,主要研究方向:模式识别 Emal i u 5 3@13cm. - i c n 4 1 6. :lh o
第 2期
李纯 , : 于快速谱聚类 的图像分割算法 等 基
‘7‘ 2
存储需求大的问题. e e y 在B r l 图像库 上的图像分 ke
割 实验证 明了算 法 的有效 性.
图像像素点间的权矩阵. 21 基于余弦 相似度 的权 矩阵 . 设给定的图像包含的像素数为 n ,每个像素由 d 个特征进行描述 ,则该图像可描述为 A∈ ,由给 R 定 的 样 本 集 A 构 造 赋 权 图 G ,E, ,这 里
第3 9卷第 2期
21 0 2年 2月




V 1 9 No 2 o . , . 3
Apr 2 2 . 01
Ap l d S in e a d T c n l g p i ce c n e h o o y e
d i 03 68i n10 —7X.0 110 o: . 9 .s. 96 1 2 1106 1 9 s 0

基于聚类分析的医学图像分割

基于聚类分析的医学图像分割

基于聚类分析的医学图像分割汇报人:日期:•引言•聚类分析基础•医学图像分割技术•基于聚类分析的医学图像分割算法•实验结果与分析•结论与展望01引言研究背景与意义聚类分析是一种无监督学习方法,通过相似性度量将数据分组,为医学图像分割提供了一种有效手段。

研究背景和意义在于为医学图像分割提供一种更加准确、快速和自动化的方法,提高医学图像处理的效率和准确性。

医学图像分割在辅助诊断和治疗中的重要性日益凸显,尤其在微创手术导航、组织结构识别等领域。

研究现状与问题当前聚类分析在医学图像分割中的应用主要集中在传统聚类算法如K-means、DBSCAN等。

存在的问题包括:1)对噪声和异常值的敏感性;2)对图像质量的依赖;3)无法处理复杂的纹理和形状信息。

研究现状与问题在于如何克服现有技术的不足,提高医学图像分割的准确性和鲁棒性。

研究内容:本文旨在研究基于深度学习的医学图像分割方法,通过卷积神经网络(CNN)对医学图像进行特征提取和聚类分析。

方法:1)构建卷积神经网络模型,对医学图像进行预处理和特征提取;2)利用聚类算法对提取的特征进行聚类分析,得到分割结果;3)通过实验验证方法的可行性和优越性。

研究内容与方法在于通过深度学习技术提高医学图像分割的准确性和鲁棒性,同时为相关领域的研究提供新的思路和方法。

研究内容与方法02聚类分析基础聚类分析是一种无监督学习方法,通过对数据的相似性进行分析,将数据集划分为若干个不同的簇或类别。

在医学图像分割中,聚类分析常用于将图像中的像素或区域根据其特征相似性进行分类,从而提取出感兴趣的区域或对象。

聚类分析概述基于密度的聚类算法基于密度的聚类算法是一种通过计算数据点之间的距离和密度来进行聚类的算法。

DBSCAN算法是一种常见的基于密度的聚类算法,它可以识别出任何形状的簇,并且对噪声具有较强的鲁棒性。

基于密度的聚类算法在医学图像分割中广泛应用于病灶检测和组织分割等任务。

基于层次的聚类算法基于划分的聚类算法基于划分的聚类算法是一种通过优化目标函数来对数据进行划分和调整的算法。

基于谱聚类算法的图像分割研究

基于谱聚类算法的图像分割研究

基于谱聚类算法的图像分割研究随着数字图片的大量产生,图像分割已成为计算机视觉领域中的重要问题。

其目的就是把一张图片划分为多个有意义的部分,以便于进一步的处理和分析。

图像分割可以应用于自然语言处理、图像识别、医学图像处理等领域。

目前,基于谱聚类算法的图像分割研究,正在得到越来越多领域的重视。

一、谱聚类算法简介谱聚类是一种基于图论的图像分割算法,它能够把图像划分为多个子集,每个子集中的像素具有相似的特征。

谱聚类算法的原理比较简单,主要分为以下几步:1. 构建相似度矩阵:首先,我们需要构建一张图像的相似度矩阵,该矩阵用于描述每个像素与其他像素之间的相似度。

一旦得到这个矩阵,我们就可以把原始图像看做一个由像素节点组成的图。

2. 生成拉普拉斯矩阵:接下来,我们需要生成图像的拉普拉斯矩阵。

拉普拉斯矩阵是描述图像内部像素之间关系的矩阵,它的值为每个像素点与其相邻像素点距离的差值之和。

这个矩阵的特点是对称正定,可以通过特征分解得到特征向量。

3. 特征向量分解:将拉普拉斯矩阵通过特征分解得到一组特征向量,特征向量被用于表示原始图像的子集。

根据图像的特征向量将其分为不同的子集。

谱聚类算法具有较强的可扩展性,处理大量像素时,其算法的时间复杂度并不高,可以快速地进行图像分割处理。

二、谱聚类算法的优点与传统的图像分割算法相比,谱聚类算法具有以下优点:1. 支持高维数据:谱聚类可以在高维空间中进行图像分割,并且在这种情况下表现优异。

2. 扩展性强:谱聚类对于一般的图像分割问题有很强的可扩展性,可以适应不同规模和形状的图像。

3. 相对简单:谱聚类算法易于实现,不需要大量的参数调整和前期的训练阶段。

4. 鲁棒性强:谱聚类算法的结果对噪声点不敏感,并且对于某些形状的图像分割处理效果尤其好。

三、基于谱聚类的图像分割实验为了验证谱聚类算法的效果,我们设计了一组实验:1. 实验数据我们选取了一张经典的Lena图像作为实验数据,该图像大小为256*256。

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

本科生毕业设计姓名:学号:学院:计算机科学与技术学院专业:计算机科学与技术设计题目:基于谱聚类的图像分割专题:图像分割的设计与实现指导教师:职称:副教授大学毕业设计任务书学院计算机专业年级学生姓名任务下达日期:毕业设计日期:毕业设计题目:毕业设计专题题目毕业设计主要内容和要求:院长签章:指导教师签字:中国矿业大学毕业设计指导教师评阅书指导教师评语(①基础理论及基本技能的掌握;②独立解决实际问题的能力;③研究内容的理论依据和技术方法;④取得的主要成果及创新点;⑤工作态度及工作量;⑥总体评价及建议成绩;⑦存在问题;⑧是否同意答辩等):成绩:指导教师签字:年月日中国矿业大学毕业设计评阅教师评阅书评阅教师评语(①选题的意义;②基础理论及基本技能的掌握;③综合运用所学知识解决实际问题的能力;③工作量的大小;④取得的主要成果及创新点;⑤写作的规范程度;⑥总体评价及建议成绩;⑦存在问题;⑧是否同意答辩等):成绩:评阅教师签字:年月日中国矿业大学毕业设计答辩及综合成绩需求分析一、利用前台,得到一张原始JPG图片;二、把这张图片传到后台,JAVA通过JRI调用R;三、利用R调用K-Means的改进算法,实现对这张图片的处理,由于一张图片的像素值是一个矩阵,可以得到一组关于像素值的数据;四、把这组像素值进行分类,对各类赋予不同的颜色进行标记,从而区分出需要的图片信息;五、把得到的新图片传到前台;六、前台对进行处理后的图片进行显示,从图像中得到需要的信息,从而实现图像的分割。

概要设计模块功能图:图片:在本系统中所能使用到的图片属性为颜色和大小,颜色对应不同的像素,大小对应图像的像素点形成矩阵的大小;前台:前台用来接收图片和显示图片;后台(JA V A):用来接收图片并且调用R来实现对图片的处理;后台(R):在被调用后,把图片信息转化成数据信息形成矩阵,从而实现对图片信息的处理。

经过上述的处理后,把新生成的图像信息返回,并在前端进行显示,从而实现图像分割。

把图像分割系统划分成二个子系统:接收图片并显示子系统,处理图片子系统。

首先从外界得到需要进行分割的图片,通过接收图片并显示子系统把图片进行输入到系统中;然后再把图片输入到处理图片子系统,输入此系统后,把图片信息转化为矩阵,然后利用JA V A调用R,利用R中K-MEANS算法对矩阵信息进行分类获得新的矩阵,最终把矩阵信息转化成图片,实现对图片的处理;最后把处理后得到的新图片输入到显示图片子系统,从而实现图像分割,获得所需要的信息。

详细设计程序流程图:实现代码;一.实现图片文件选择器:package pri.study.convert;import java.awt.EventQueue;import javax.swing.ImageIcon;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import java.awt.BorderLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.File;import javax.swing.JButton;import org.rosuda.REngine.REXPMismatchException;import org.rosuda.REngine.Rserve.RserveException;public class MyApp implements ActionListener {private JFrame frame;JButton selectPrePic = new JButton("选择要转换的图片");JLabel prePic = new JLabel("New label");JLabel label = new JLabel("转换前的图片:");JButton convertPic = new JButton("转换图片");JLabel label_1 = new JLabel("转换后的图片:");JLabel label_2 = new JLabel("提示:转换后的图片默认放在转换前图片所在目录下");JLabel curPic = new JLabel("转化浓厚的图片");JFileChooser jfc = new JFileChooser();// 文件选择器private int i=0;String prePicPath="";String curPicPath="";/*** Create the application.*/public MyApp() {initialize();}/*** Initialize the contents of the frame.*/private void initialize() {jfc.setCurrentDirectory(new File("d://"));// 文件选择器的初始目录定为d盘frame = new JFrame();frame.setBounds(200, 150, 880, 400);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);JPanel myPanel=new JPanel();myPanel.setLayout(null);frame.getContentPane().add(myPanel, BorderLayout.CENTER);selectPrePic.addActionListener(this);selectPrePic.setBounds(10, 10, 153, 23);convertPic.addActionListener(this);convertPic.setBounds(423, 9, 93, 23);prePic.setBounds(20, 90, 320, 250);curPic.setBounds(423, 90, 320, 250);label.setBounds(20, 42, 139, 15);label_1.setBounds(423, 42, 143, 15);label_2.setBounds(423, 65, 320, 15);myPanel.add(prePic);myPanel.add(label);myPanel.add(convertPic);myPanel.add(label_1);myPanel.add(label_2);myPanel.add(curPic);myPanel.add(selectPrePic);// ImageIcon ico=new ImageIcon("d:/myPlotPic.png");// JLabel lblPrepic = new JLabel("hebe",ico,JLabel.CENTER);// frame.getContentPane().add(lblPrepic, BorderLayout.CENTER);}public void actionPerformed(ActionEvent e) {// TODO Auto-generated method stub// if (e.getSource().equals(button1)) {// 判断触发方法的按钮是哪个// jfc.setFileSelectionMode(1);// 设定只能选择到文件夹// int state = jfc.showOpenDialog(null);// 此句是打开文件选择器界面的触发语句// if (state == 1) {// return;// } else {// File f = jfc.getSelectedFile();// f为选择到的目录// text1.setText(f.getAbsolutePath());// }// }// 绑定到选择文件,先择文件事件if (e.getSource().equals(selectPrePic)) {jfc.setFileSelectionMode(0);// 设定只能选择到文件int state = jfc.showOpenDialog(null);// 此句是打开文件选择器界面的触发语句if (state == 1) {return;// 撤销则返回} else {File f = jfc.getSelectedFile();// f为选择到的文件//System.out.print(f.getPath());//trim()是取出字符串前后的空格和特殊字符String temp01=f.getAbsolutePath().trim();String sub1=temp01.substring(0,3);String sub2=temp01.substring(2, temp01.length());prePicPath=sub1+sub2;System.out.print(prePicPath);String temp02=f.getParent();String sub01=temp01.substring(0,3);String sub02=temp01.substring(2, temp02.length());//curPicPath=sub01+sub02+"\\"+"convert0"+i+++".jpg";curPicPath=sub01+sub02+"convert0"+i+++".jpg";System.out.print("curPicPath--->"+curPicPath);//显示转换前的图片ImageIcon iconPrePic=new ImageIcon(f.getAbsolutePath());prePic.setIcon(iconPrePic);}}if (e.getSource().equals(convertPic)) {try {ConvertPicByRconve=ConvertPicByR.getInstance();conve.DoConvertPic(prePicPath, curPicPath);//显示转换后的图片ImageIcon iconPrePic=new ImageIcon(curPicPath);curPic.setIcon(iconPrePic);} catch (RserveException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} catch (REXPMismatchException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}// JOptionPane.showMessageDialog(null, "init a dialog for test!", "tips", 2); @author zzj}}/*** Launch the application.*/public static void main(String[] args) {EventQueue.invokeLater(new Runnable() {public void run() {try {MyApp window = new MyApp();window.frame.setVisible(true);} catch (Exception e) {e.printStackTrace();}}});}}二.实现JA V A调用R:package pri.study.convert;import java.awt.EventQueue;import javax.swing.ImageIcon;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import java.awt.BorderLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.File;import javax.swing.JButton;import org.rosuda.REngine.REXPMismatchException;import org.rosuda.REngine.Rserve.RserveException;public class MyApp implements ActionListener {private JFrame frame;JButton selectPrePic = new JButton("选择要转换的图片");JLabel prePic = new JLabel("New label");JLabel label = new JLabel("转换前的图片:");JButton convertPic = new JButton("转换图片");JLabel label_1 = new JLabel("转换后的图片:");JLabel label_2 = new JLabel("提示:转换后的图片默认放在转换前图片所在目录下");JLabel curPic = new JLabel("转化浓厚的图片");JFileChooser jfc = new JFileChooser();// 文件选择器private int i=0;String prePicPath="";String curPicPath="";/*** Create the application.*/public MyApp() {initialize();}/*** Initialize the contents of the frame.*/private void initialize() {jfc.setCurrentDirectory(new File("d://"));// 文件选择器的初始目录定为d盘frame = new JFrame();frame.setBounds(200, 150, 880, 400);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);JPanel myPanel=new JPanel();myPanel.setLayout(null);frame.getContentPane().add(myPanel, BorderLayout.CENTER);selectPrePic.addActionListener(this);selectPrePic.setBounds(10, 10, 153, 23);convertPic.addActionListener(this);convertPic.setBounds(423, 9, 93, 23);prePic.setBounds(20, 90, 320, 250);curPic.setBounds(423, 90, 320, 250);label.setBounds(20, 42, 139, 15);label_1.setBounds(423, 42, 143, 15);label_2.setBounds(423, 65, 320, 15);myPanel.add(prePic);myPanel.add(label);myPanel.add(convertPic);myPanel.add(label_1);myPanel.add(label_2);myPanel.add(curPic);myPanel.add(selectPrePic);// ImageIcon ico=new ImageIcon("d:/myPlotPic.png");// JLabel lblPrepic = new JLabel("hebe",ico,JLabel.CENTER);// frame.getContentPane().add(lblPrepic, BorderLayout.CENTER);}public void actionPerformed(ActionEvent e) {// TODO Auto-generated method stub// if (e.getSource().equals(button1)) {// 判断触发方法的按钮是哪个// jfc.setFileSelectionMode(1);// 设定只能选择到文件夹// int state = jfc.showOpenDialog(null);// 此句是打开文件选择器界面的触发语句// if (state == 1) {// return;// } else {// File f = jfc.getSelectedFile();// f为选择到的目录// text1.setText(f.getAbsolutePath());// }// }// 绑定到选择文件,先择文件事件if (e.getSource().equals(selectPrePic)) {jfc.setFileSelectionMode(0);// 设定只能选择到文件int state = jfc.showOpenDialog(null);// 此句是打开文件选择器界面的触发语句if (state == 1) {return;// 撤销则返回} else {File f = jfc.getSelectedFile();// f为选择到的文件//System.out.print(f.getPath());//trim()是取出字符串前后的空格和特殊字符String temp01=f.getAbsolutePath().trim();String sub1=temp01.substring(0,3);String sub2=temp01.substring(2, temp01.length());prePicPath=sub1+sub2;System.out.print(prePicPath);String temp02=f.getParent();String sub01=temp01.substring(0,3);String sub02=temp01.substring(2, temp02.length());//curPicPath=sub01+sub02+"\\"+"convert0"+i+++".jpg";curPicPath=sub01+sub02+"convert0"+i+++".jpg";System.out.print("curPicPath--->"+curPicPath);//显示转换前的图片ImageIcon iconPrePic=new ImageIcon(f.getAbsolutePath());prePic.setIcon(iconPrePic);}}if (e.getSource().equals(convertPic)) {try {ConvertPicByRconve=ConvertPicByR.getInstance();conve.DoConvertPic(prePicPath, curPicPath);//显示转换后的图片ImageIcon iconPrePic=new ImageIcon(curPicPath);curPic.setIcon(iconPrePic);} catch (RserveException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} catch (REXPMismatchException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}// JOptionPane.showMessageDialog(null, "init a dialog for test!", "tips", 2); @author zzj}}/*** Launch the application.*/public static void main(String[] args) {EventQueue.invokeLater(new Runnable() {public void run() {try {MyApp window = new MyApp();window.frame.setVisible(true);} catch (Exception e) {e.printStackTrace();}});}}三.在R中实现图像的处理:public static void DoConvertPic(String prePicPath,String curPicPath) throws RserveException{//R commandsc.eval("library(jpeg)");// Stringtemp="orgpic<-readJPEG(\""+prePicPath+"\")";// System.out.print(temp);c.eval("orgpic<-readJPEG(\""+prePicPath+"\")");c.eval("dim(orgpic)");// c.eval("orgpic[100,200,]");// c.eval("hist(orgpic[,,2])");// String temp="negative<-function(orgpic)";// System.out.print(temp);c.eval("negative<-function(orgpic){return(1-orgpic)}");// c.eval("{");// c.eval("return(1-orgpic)");// c.eval("}");c.eval("writeJPEG(negative(orgpic),target=\""+curPicPath+"\",quality=0.95)");c.eval("");}}摘要为了加强煤矿矿区环境保护,对矿区周边环境的水质监测数据进行有效处理,方便环境监测部门按照国家规范进行定期或不定期的经常性监测测定,建立健全污染源档案,为加强污染源管理提供监测数据,并根据监测数据做出环境质量评价。

相关文档
最新文档