没有合适的资源?快使用搜索试试~ 我知道了~
图像处理:Java框架的互操作和可扩展连接器
软件X 16(2021)100863原始软件出版物Imaging framework:一个用于与图像相关的Java框架的可互操作和可扩展的连接器ChristophPraschl a,Andreas Pointner a,David Baumgartner c,Gerald AdamZwettler a,ba高级信息系统与技术研究组,上奥地利应用科学大学研发部,Softwarepark 11,4232 Hagenberg i. M.,奥地利b软件园上奥地利应用科学大学信息、通信与媒体学院软件工程系11,4232哈根贝格岛M.,奥地利c挪威科技大学计算机科学系,Høgskoleringen 1,Trondheim,Norwayar t i cl e i nf o文章历史记录:接收7七月2021收到修订版2021年9月22日接受2021年保留字:Java图像处理计算机视觉互操作性和可扩展性a b st ra ct计算机视觉和图像处理任务的数量在过去几年中有所增加。虽然Python在大多数情况下是这个领域的首选,但在某些情况下,应该优先使用另一种编程语言,如Java。出于这个原因,可以使用多种基于Java的框架,例如OpenIMAJ,ND4J或多个OpenCV包装器。不幸的是,这些框架根本不能互操作。在这项工作中,开源的成像框架被引入来解决这个问题。该项目的特点是结合多个框架的概念,并提供了一个可互操作和可扩展的基础,以9个图像相关的项目与10个不同的图像表示在Java中。版权所有©2021作者。由爱思唯尔公司出版这是CC BY许可下的开放获取文章(http://creativecommons.org/licenses/by/4.0/)中找到。代码元数据当前代码版本1.2.0永久链接到用于此代码版本的代码/存储库https://github.com/ElsevierSoftwareX/SOFTX-D-21-00126法律代码许可证Mozilla公共许可证,v.2.0版本使用GIT的代码版本控制系统使用Java的软件代码语言、工具和服务编译要求、操作环境依赖性JDK 11或更高版本如果可用,链接到开发人员文档/手册https://fhooeaist.github.io/imaging/问题支持电子邮件contact@aist.science1. 动机和意义这项工作介绍了一个框架,鼓励Java框架的互操作性的上下文中的图像相关的任务。随着机器学习(ML)领域的稳步发展,基于卷积神经网络等方法的计算机视觉(CV)应用数量也在增加。此外,图像处理(IP)任务的重要性,如∗通讯作者。电子邮件地址:christoph. fh-hagenberg.at(Christoph Praschl),andreas.fh-hagenberg.at(Andreas Pointner),david. ntnu.no(DavidBaumgartner),gerald. fh-hagenberg.at(G.A.Zwettler)。https://doi.org/10.1016/j.softx.2021.100863在过去几年中,预处理或数据扩充显著增长。与此同时,在这方面使用的框架数量也在增加,现有的框架也在不断扩展特别是,诸如Tensorflow [1],OpenCV [2],PyTorch [3]和类似的框架都是基于编程语言Python和C++的,并且已经非常流行。特别是,Python近年来在这一领域的发展越来越快[4]。但这个领域并不局限于这些编程语言,其他语言的框架数量也在稳步增长,例如Java。出于这个原因,Python和Java之间的图像处理任务使用没有额外框架的普通实现进行了比较,以及基于框架的比较[5]。这些2352-7110/©2021作者。 由Elsevier B.V.出版。这是一篇开放获取的文章,使用CC BY许可证(http://creativecommons.org/licenses/by/4.0/)。可在ScienceDirect上获得目录列表SoftwareX期刊主页:www.elsevier.com/locate/softxChristoph Praschl,Andreas Pointner,David Baumgartner等.软件X 16(2021)1008632比较表明,如果不使用额外的框架,Python本身并不真正适合这个应用领域,这是由于Rui等人研究的基本控制结构(如循环)的高性能影响。这种性能影响也是Kwan Lam等人[7]为Python创建Numba Just-In-Time编译器的动机。在所讨论的应用领域中,大多数常见的Python框架都是基于C++编写的基础,由于使用了CUDA等本机库,因此也允许实现GPU加速方法[8] 或OpenCL [9]。但是C++也有一个折衷,因为用这种编程语言实现的程序和库必须参考目标平台构建,并且并不总是可用或适合某些应用程序。如果使用这样的框架,这对Python来说也是一个传递问题。与此不同的是,Java注重其平台独立性。前面提到的Java和Python的比较也表明,Java非常适合在不需要GPU支持、某些C++库不可用或目标应用程序Fig. 1. 成像项目的模块结构,以API模块作为核心组件,并在此基础上构建其他模块框架已经发展到9个框架和10个图像表示,它们可以互换使用,参见。图1.一、在撰写本文时,Imaging Framework支持以下框架之间的互操作性:基于Java。它还表明,使用一个本地与Python相比,作为OpenCV的C++库在Java中的开销更低,至少在应用卷积滤波器的用例中是这样。基于这种情况,您可以使用不同的纯Java框架-用于ML,CV或IP相关任务,如ImageJ [10],Nd 4j [11]或OpenIMAJ [12],或流行的C++库的本地包装器,如OpenCV,Tensorflow或Tesseract [13]。虽 然 许 多 Python 框 架 / 包 装 器 ( 如 OpenCV 、 Tensorflow 或PyTorch)都是基于1. OpenCV2. ImageJ3. OpenIMAJ4. ND4j5. [27]第二十七话2.1. 软件构架6. Microsoft认知服务7. Tesseract8. Java AWT [28]9. JavaFX [29]或者至少支持库numpy [14],Java等价物使用所有自己的基础和域类。像这样,提到的Java框架是不兼容的,不能以一种全面的方式组合。这就是Imaging Framework的动机:一个用于与图像相关的Java框架的可互操作和可扩展的连接器。为了实现这种互操作性,成像框架基于以API模块作为中心组件的模块结构Fig.1.在此主模块的基础上,附加内部功能作为基本图像处理或网格相关功能 通过Core和Mesh模块提供。除了这两个内部模块外,还有多个连接模块用于集成外部框架。这些扩展提供了API模块中定义的最重要接口的框架特定实现,并以这种方式建立可互换的对象,分别是图像和图像相关函数。该项目已经用于各种基于视觉的分析领域。一个示例是在室外场景中增强现实设备的取向的基于图像的确定的上下文中利用框架[15]。接下来,该项目用于人体的姿态估计[16],以及人体面具的变换[17]。除了这些用例之外,Imaging Framework还用于建筑平面图的3D重建[18],以及在线银行中的自动人员识别[19]。2. 软件描述Imaging Framework是一个免费的Java框架,在Mozilla公共许可证版本2.0下发布[20],并在GitHub上开放供贡献 [21]。它可以通过Maven Central [23]上的Apache Maven [22]获得一般框架文档 可以在 [24] 中找 到, 而Java 类文 档可以 在[25]中找 到。Imaging Framework的最初目的是将使用Java中的OpenCV的图像处理任务与Microsoft的Cognitive Services [ 26 ]用于面部识别的功能和Tesseract [ 13 ]用于光学字符识别的功能相结合从那时起,支持的人数成 像 框 架 是 围 绕 API 模 块 的 一 个 通 用 核 心 接 口 ( 称 为ImageWrapper)构建的,见图2。该接口包含与2D图像相关的最重要的信息:(I)宽度,(II)高度,(III)颜色模型和相关的通道数量,以及(IV)原始图像本身。为了避免内存泄漏,特别是对于本机分配的对象,ImageWrapper接口扩展了Java在感兴趣区域的上下文中,成像框架提供了另一个域类,称为SubImageWrapper,表示引用源ImageWrapper的空间受限视图。对这样的感兴趣区域的任何读或写访问都被传播到原始ImageWrapper。ImageWrapper接口的思想是提供特定于框架的实现,由于接口. 为了加强这种编程范例,接口的实现是受包保护的,只能通过相关的ImageFactory获得。出于这个原因,ImageFactory界面提供了多种功能来创建新的图像基于不同的参数。实际的ImageFactory实现又被封装保护。为了仍然能够对给定的通用图像类型使用ImageFactory这种封装允许框架的用户远离实现细节,因为只有针对接口的实现是必需的和可访问的。由于架构的严格分离,图像相关的框架可以连接到图像框架,这样,只需三个步骤就可以实现与其他支持框架的互操作性。为此,需要实现ImageWrapper接口,分别是必须创建AbstractImageWrapper在第一步中。为此,您必须根据图像表示实现以下五个方法:(I)getH-eight(),(II)getWidth(),(III)getValue ( ) , ( IV ) setValue ( ) 和 ( V )getSupportedType()。在ImageWrapper旁边,您必须提供一个ImageFactory实现,Christoph Praschl,Andreas Pointner,David Baumgartner等.软件X 16(2021)1008633图二. 映像项目的基类和接口围绕ImageWrapper接口构建。 蓝色实体代表Imaging项目中与图像相关的核心类,而绿色实体则是创建这些类的工厂。此外,黄色实体是与图像交互的功能和消费者。灰色实体表示重要的Java基础接口。(For关于本图图例中对颜色的引用的解释,读者可参考本图图例的网络版本。(见文章)在第二步中创建您的代表的图像。最后,您必须将工厂注册到JavaImaging Framework还为Java的Function和BiConsumer接口提供了与图像相关的实现一方面,ImageFunction接口是函数式编程风格中图像操作任务的基础,使用给定图像创建新图像,另一方面,GenericImageConsumer可用于基于附加对象操作给定图像。虽然第一变体可以是用于实现像高斯模糊这样的滤波器,其中在后续步骤中需要源以及结果图像,最后一个可以例如用于将几何图形绘制为给定图像上的圆。除了与图像相关的类之外,成像框架还提供了用于框架的不同方面的基本几何域架构,参见。图3 .第三章。这些几何类是围绕中心AbstractJava构建的得分类。此基类由JavaPoint2D和JavaPoint3D扩展,用于表示任何两个或多个三维点。基于这些空间信息,使用不同的抽象集合类来表示例如使用AbstractJavaPointCloud的未排序的点云,或者以称为AbstractJavaPolygon的线或多边形形式的排序的点序列。除了前两个抽象类之外,还有两点之间的直线的抽象表示,称为AbstractJavaLine。几何域中的四个抽象类通过不同的二维或三维实现来扩展。这些类遵循丰富且不可修改的域类的编程范例这意味着实现提供了多个功能,并且在构造之后不能被操纵,但是需要在值改变时创建新的对象作为富类范例的例子,二维线实现允许计算其长度或与另一条线的交点,并且由于其不可修改的特性,将始终由相同的两个点组成如果其中一个关联点需要更改,则必须创建包含新点和剩余旧点的新直线对象。2.2. 软件功能除了Meta信息之外,ImageWrapper接口还为图像相关任务提供常见功能,如获取和设置给定位置处的像素这些功能是通过Imaging Framework在不同框架之间实现图像可复制性的基础,并用于创建深度复制机制以及像素操作功能。伊茨。此复制功能通过两种方法实现(I) 调 用 ImageWrapper 接 口 的 Copy ( ) 和 ( II ) copyTo()。这也是GenericImageFunction的基础,它扩展了成像框架的互操作性,如果需要,允许使用类型B的临时图像来应用类型A的 包装函数产生一个C类型的图像,如果需要的话,它被转换为D类型,见图。四、虽然GenericImageFunction在可用性和不同框架的互操作性方面具有很大的优势,但它也带来了图像的交换,Christoph Praschl,Andreas Pointner,David Baumgartner等.软件X 16(2021)1008634×× ×图三. 几何域体系结构的成像项目用来表示不同的几何形式。 该架构是围绕中心AbstractJavaPoint类(蓝色)和其他构建在其上的抽象类(绿色)构建的。抽象有多种二维和三维实现基类,用于成像框架的不同位置。 (For对本图图例中所指颜色的解释,读者可参考本文的网络版pixel-wise铸造。因此,在最坏的情况下,既没有匹配的输入,也没有匹配的输出类型,运行时开销为O(2Wh)参照图像的宽度w和高度h。在极端情况下,使用另一个框架的许多函数,推荐的过程包括(I)将图像转换一次,应用函数并最终将结果转换回预期的目标或(II)在GenericImageFunction内包装多个连续的函数调用,参见。清单2.基于所描述的基本原理,核心模块提供图像处理功能,如不同的高通和低通滤波器,以及算术运算符,例如:添加,子-牵引或倍增图像。在这些算子中,还包含一些基本功能,如插值方法、适应度函数、分割方法或例如绘制消费者。这些实现是核心模块的一部分。此模块的原因是提供一些基本功能,在应用程序中需要大多数GUI相关任务和仅一些基本图像处理功能的情况下,其他依赖性将导致不必要的开销。3. 说明性实例在第一个示例[31]中,示出了使用成像框架的两个典型基本步骤清单1.为此,在第一步中,ImageFactoryFactory用于获得给定类型的实际ImageFactory,即short[]。此数组是图像框架中最简单的图像表示并以通道阵列的形式将第一个阵列维度用于图像使用getImage()函数可以创建这样一个图像,大小为100 × 100像素,灰度通道类型为颜色模型。如此创建的图像被用作图像消费者的输入在第二步中使用DrawCircle,它允许装饰使用accept()方法,基于表示为JavaPoint2D的位置的带有圆的给定图像如何画圆的方式,例如通过不同的设置方法来控制颜色。清单1:创建一个100x100px的新灰度图像的简单示例,使用DrawCircle消费者在(50,50)位置绘制一个白色圆圈。1234567891011第二个示例说明了基于GenericImageFunction的Imaging项目的互操作性,参见。2.为此,在第一步中创建随机图像。此过程与前一示例的第一步类似,但使用了getRandomImage()函数而不是getIm- age()。该方法主要用于测试,并允许在给定范围内创建随机初始化的图像在所呈现的情况下,具有在[0; 255]范围内的8位无符号灰度值。注意Project的@ annotation/*(1)Creeateanewshort-arraybasedimge*/try(varimage=ImageFactoryFactory. getImageFactory(short[].类). getImage(100,100,ChannelType. GREYSCALE))){/*(2)对该图像进行Dracccle*/vardraw=newDrawCircleshort[][]>();draw. setRadius(3);draw. setColor(newdoublele[]{255});draw. 访问点(image,nwJavaPoint2D(50,50));}Christoph Praschl,Andreas Pointner,David Baumgartner等.软件X 16(2021)1008635Lombok [32],用于避免由于try- with-resources-blocks而导致的样板代码,如第一个示例所示。它允许确保包装对象的内存释放在范围的尽头。在第二步中,使用Canny边缘检测器和随后的膨胀来创建实际函数,两者都是使用OpenCV框架的AistCV [33]Java构建实现的此函数在第三步中使用GenericImageFunction包装。当创建通用图像-对象,包装函数定义了使用OpenCV在示例的第四步(也是最后一步)中,应用了包装函数,是使用OpenCV在用OpenIMAJ的FImage类表示的图像上实现的这样创建的输入图像的扩张边缘表示由GenericImageFunction对象转换为预期的double[]表示清单2:成像框架的互操作性示例-使用Canny边缘检测和OpenCV中实现的图像膨胀,应用于使用OpenIMAJ创建的图像,并生成表示为双数组的图像。1213141516171819202122232425262728293031323334353637383940414. 影响目前,成像框架还支持以三维短阵列或双阵列表示的例如Java AWT 为此,它允许完全使用上述框架可互操作,并且可以很容易地扩展到其他应用程序。基于这一特点,Imaging Framework代表了缩小图像相关Java框架之间差距的一个步骤,这一差距源于大多数提到的框架提供部分重叠的功能,但专注于某些应用领域,没有任何共同的基础。ImagingFramework允许从某些框架中挑选出所需的功能,并将这些功能组合起来,以简单而全面的方式创建更高级的功能。实 际 上 , Imaging Framework 允 许 使 用 AWT 、 Swing 、JavaFX甚至ImageJ创建GUI应用程序,并使用其他图像处理框架(如OpenCV)添加与图像相关的方法。这是由于成像环境内的所提及的框架的图像表示的支持而实现的。像这样,任何命名的GUI框架都可以用于前端相关的任务,任何支持的图像处理框架都可以用于图像相关的后端任务。除此之外,Imaging Framework还支持将计算机视觉任务与经典图像处理方法相结合。例如,ND4J侧重于利用率但是,对于神经网络等深度学习模型,它并没有提供先进的图像处理方法。为了克服这个限制,可以使用OpenCV或OpenIMAJ等框架。这些框架之间的差距反过来又被所提出的成像框架所封闭。由于ND4J的支持,Imaging Framework不仅缩小了Java和计算机视觉任务之间的差距,而且缩小了GPU加速和基于图像的Java应用程序之间的差距由于ND4J支持CUDA并且是连接框架之一,因此它还根据支持的平台增加了互操作性,并且可以根据许多图像相关任务的性能产生巨大除了ND4J之外,还有基于Java的OpenCV包装器,如JavaCV [34],它带有GPU支持,可以轻松添加到成像环境中。此外,由于提供的接口和服务基础架构,成像框架允许通过附加框架轻松扩展,仅需要几个步骤,如第2.1节所述。像这样,通过使用ImageWrapper和ImageFactory接口的单独实现来集成相关联的图像表示,5. 结论和前景在这项工作中,成像框架,一个可互操作和可扩展的连接器图像相关的Java框架。它的开发是为了缩小与图像处理和计算机视觉任务相关的多Java框架之间的差距。该项目的重点是提供一个概念,结合多个框架,而不需要任何知识的差异方面使用的图像表示,并提供一个跨框架边界的互操作机制。由于近年来在图像处理,特别是计算机视觉的背景下,图像相关的任务越来越多,我们的框架达到了广泛的社区。尽管Python在大多数情况下是在这一应用领域,有些情况下,开发人员和研究人员可以从Java中执行图像处理任务的优势中获益。据我们所知,在Java生态系统中没有类似的项目。/*(1)C_r_e_w_O_p_n_M_i_g_e_*/Random_rand=new_Random(768457);@10_bok.Cleanupvariput=ImageFactoryFactory. getImageFactory(FImage.(class). getRandommmage(100,100,ChannelType.GREYSCALE,randd,0,255,false);/*(2)使用Cannyedgededetectorandamimagegegedilation在elambdfunctio上调用多个操作CV函数 */ImageFunctionf=i->{varimage=i. intn=intn();intn=nums();//应用Canny边缘检测器Imgproc。Canny(image,res,15,125);//preparedilationvarelement=Imgproc.getStructuringElement(Imgproc.CV_SHAPE_RECT,newSize(3,3),nwPoint(1,1));//使用dilationImgproc。dilate(res,res,element);returnImagegeFactoryFactory. getImageFactory(Mat.(class). getImage(i. getHeight(),i. getWidth(),我的名字是。BINARY,res);};/*(3)将函数输入通用函数库*/varfunction=新GenericImgeFunction(f,MAT。class,double[].class);@lombok. CleanupChristoph Praschl,Andreas Pointner,David Baumgartner等.软件X 16(2021)1008636图四、在 应 用 包 装 函 数 之前和之后,如果需要,可以使用基于复制的图像转换的通用图像函数序列。成 像 项 目 的 未 来 发 展 致 力 于 增 加 支 持 的 框 架 数 量 , 如Tensorflow和JavaCV等。除此之外,还计划增加核心功能的数量,并根据功能,错误和测试自动化进一步提高代码质量。信用作者身份贡献Christoph Praschl:概念化,方法论,软件,写作AndreasPointner:概念化, 方法, 软件,写作– review 大卫鲍姆加特纳:概念化,方法,软件,写作GeraldAdam Zwettler:概念化,监督,写作竞合利益作者声明,他们没有已知的竞争性财务利益或个人关系,可能会影响本文报告的工作资金这项研究没有从公共、商业或非营利部门的资助机构获得任何具体的资助。 开展这项工作是为了利用奥地利研究促进机构FFG资助的研究项目 Guide ( FFG 项目编号 859431 )、 Drive4Knowledge( FFG 项 目 编 号 862975 ) 、 PASS ( FFG 项 目 编 号 872928 ) 和TrueSize(FFG项目编号872105)的协同作用。引用[1] Abadi M,Barham P,Chen J,Chen Z,Davis A,Dean J等人,Tensorflow:大规模机器学习系统。第12届USENIX操作系统设计与实现研讨会。2016. p. 265比83[2] Bradski G,Kaehler A.学习OpenCV:使用OpenCV库进行计算机视觉。““;2008年。[3] Paszke A, Gross S, Massa F , Lerer A , Bradbury J, Chanan G, et al.Pytorch : An imperative style , high-performance deep learning library.2019年,arXiv预印本arXiv:1912.01703。[4] 放大图片作者:J. Python中的机器学习:数据科学、机器学习和人工智能的主要发展和技术趋势。信息2020;11:193.http://dx.doi.org/10.3390/info11040193.[5] 放 大 图 片 作 者 : J. FHOOEAIST/coffee-burns-snake : 1.0.0. 2021 年 ,http://dx.doi.org/10.5281/zenodo.4980088。[6] Pereira R,Couto M,Ribeiro F,Rua R,Cunha J,Fernandes JaP,et al.Energy efficiency across programming languages:How do energy,time,and memory relate?第10届ACM SIGPLAN软件语言工程国际会议论文集。New York , NY ,USA :Association for Computing Machinery; 2017 , p.256-67. http://dx.doi.org/10.1145/3136014.3136031.[7]放大图片作者:Lam SK,Pitrou A,Seibert S. Numba:基于LLVM的pythonJIT编译器。在:在HPC中的LLVM编译器基础设施的第二次研讨会的会议记录。New York,NY,USA:Association for Computing Machinery; 2015,p. 1-6. http://dx.doi.org/10.1145/2833157.2833162网站。[8]Sanders J,Kandrot E.以CUDA为例:通用GPU编程入门. Addison-WesleyProfessional; 2010.[9]石杰,五原D,石G。OpenCL:异构计算系统的并行编程标准。Comput SciEng2010;12(3):66.[10]Rueden CT,Schindelin J,Hiner MC,DeZonia BE,Walter AE,Arena ET等 人 , ImageJ2 : ImageJ for the next generation of scientific image data.BMC Bioinform 2017;18(1). http://dx.doi.org/10.1186/s12859-017-1934-z网站。[11]EDD 队 ND4J : 用 于 JVM 的 快 速 、 科 学 和 数 值 计 算 。 2016 年 ,URLhttps://github.com/eclipse/deeplearning4j。[12]Hare JS,Samangooei S,Dupplaw DP. OpenIMAJ和ImageTerrier:用于可扩展多媒体分析和图像索引的Java库和工具。第19届ACM多媒体国际会议论文 集 。 NewYork, NY, USA: ACM;2011, p.691-4.http://dx.doi.org/10.1145/2072298.2072421.[13]史密斯河Tesseract OCR引擎的概述。第九届文件分析和识别国际会议。第二卷。IEEE; 2007,p. 629 -33[14]奥列芬特NumPy指南卷1.一、Trelgol Publishing USA; 2006.[15] Praschl C,Krauss O,Zwettler GA. 为头戴式显示器启用室外MR功能:案 例 研 究 。 Int J Simul Process Model 2020;15 ( 6 ) : 512-23.http://dx.doi.org/10.1504/IJSPM.2020.112463网站。[16] [10] Jenkins D,Zucali T,Zwettler GA.静止单目摄像机获取的视频帧中旋转人体方向估计的混合方法。在:计算机科学研究笔记。Západočeskáuniverzita; 2020 , p. 39-47. http://dx.doi.org/10.24132/csrn.2020.3001.5 网站。[17]Zwettler GA,Praschl C,Baumgartner D,Zucali T,Turk D,HanreichM,et al. Three-step alignment approach for fitting a normalized mask of aperson rotating in A-pose or T-pose essential for 3D reconstruction based on2D images and CGI derived reference target pose. 在 : VISIGRAPP ( 5 :VISAPP)中。2021,第281-292页。http://dx.doi.org/10.5220/0010194102810292网站。[18] 张文,张文军.二维建筑平面图中的线聚类和轮廓提取。第17届计算机视觉、成像和计算机图形理论与应用国际联合会议论文集。Západočeskáuniverzita; 2021 , p. 11-20. http://dx.doi.org/10.24132/csrn.2021.3101.2 网站。[19]张文辉,张文辉.基于模型的图像处理方法在网上银行中的自动身份识别和认证。会议:第30届欧洲建模与仿真研讨会。2018年p. 36比46[20]Mozilla Mozilla公共许可证,版本2.0。2013年,URL https://www.mozilla。org/en-US/MPL/2.0/,[2021年6月17日访问]。[21]放 大 图 片 作 者 : J.FHOOEAIST/ 成 像 : 1.2.0 。2021 ,http://dx.doi.org/10.5281/ZENODO.4541503,URLhttps://zenodo.org/record/4541503。[22]杨文斌,王晓刚,王晓刚.Apache Maven北京:人民出版社; 2010.[23]Sonatype,Inc.Maven中央存储库搜索2021,网址https://search.maven.org/search? q=g:%22science.aist.imaging%22,[访问17二零二一年六月[24]放大图片作者:J.影像-影像。2021,URLhttps://fhooeaist.github.io/imaging/index.html,[2021年6月17日访问]。[25]放 大 图 片 作 者 : J. 概 述 ( 映 像 1.2.0 API ) 。2021 , URLhttps://javadoc.io/doc/science.aist.imaging/imaging/latest/index 。 html ,[2021年6月17日查阅]。[26]德尔索尔河介绍微软认知服务。在:微软计算机视觉API蒸馏。Springer;2018,p.一比四[27]Butler S,Gamalielsson J,Lundell B,Brax C,Mattsson A,GustavssonT,etal. Maintaining interoperability in open source software:A case studyoftheapache PDFBox project. J Syst Softw 2020;159:110452.[28]祖科夫斯基Java AWT参考。[29]Chin S,Vos J,Weaver J. Javafx基础。In:使用JavaFX的现代Java客户端的权 威 指 南 。Springer; 2019,p.33比80Christoph Praschl,Andreas Pointner,David Baumgartner等.软件X 16(2021)1008637[30]Oracle. ServiceLoader(java SE 9 JDK 9)。2017,https://docs.oracle.com/javase/9/docs/api/java/util/ServiceLoader.html,[2021年6月21日访问]。[31]放大图片作者:J. FHOOEAIST/成像纸:1.0.0。2021年,http://dx.doi.org/10.5281/zenodo.5005652。[32]ZwitserlootR,Spilker R.龙目岛计划2016年。[33]放大图片作者:J.FHOOEAIST/aistcv:4.3.0。2021,http://dx.doi.org/10.5281/ZENODO.4506232,URLhttps://zenodo.org/record/4506232。[34]奥 德 特 山 JavaCV : OpenCV 、 FFmpeg 等 的 Java 接 口 。 2018 , URL :https://github.com/bytedeco/javacv , [Accessed on 5 March 2020] 存 档在http://www.webcitation.org/6hZyxW85u。
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Java集合ArrayList实现字符串管理及效果展示
- 实现2D3D相机拾取射线的关键技术
- LiveLy-公寓管理门户:创新体验与技术实现
- 易语言打造的快捷禁止程序运行小工具
- Microgateway核心:实现配置和插件的主端口转发
- 掌握Java基本操作:增删查改入门代码详解
- Apache Tomcat 7.0.109 Windows版下载指南
- Qt实现文件系统浏览器界面设计与功能开发
- ReactJS新手实验:搭建与运行教程
- 探索生成艺术:几个月创意Processing实验
- Django框架下Cisco IOx平台实战开发案例源码解析
- 在Linux环境下配置Java版VTK开发环境
- 29街网上城市公司网站系统v1.0:企业建站全面解决方案
- WordPress CMB2插件的Suggest字段类型使用教程
- TCP协议实现的Java桌面聊天客户端应用
- ANR-WatchDog: 检测Android应用无响应并报告异常
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功