图像滤镜(GPUImage/GPU加速)、美化/图像处理技术 拼接及Skia- Android_skia图像马赛克添加和去除-程序员宅基地

技术标签: 图片 gpu  java  Android 图片拼接  Android 图片处理  Android  图片美颜  

图像滤镜处理的两种方式:RGB点乘运算;GPU的矩阵运算(效率更高).

> 图像像素处理
getPixel getPixels setPixel setPixels

Android Bitmap 加载与像素操作- https://blog.csdn.net/jia20003/article/details/46723903

基本滤镜效果的实现:如果我们用ColorMatrix调整RGB三种颜色的比重,就可以实现诸如单色、黑白的效果。
Lomo滤镜效果的实现:改变图像数值+遮罩.

> 图像处理技术:

[Android] 图像各种处理系列文章合集- http://blog.csdn.net/eastmount/article/details/40689397

  https://github.com/CyberAgent/android-gpuimage

Android实战经验之图像处理及特效处理的集锦(总结版)- https://www.oschina.net/question/231733_44154

Android图像处理整理- http://blog.csdn.net/luzhenyuxfcy/article/details/49427781

一个视频通信的基础架构可能涉及到采集(音视频采集)、前处理(例如噪声处理、人脸识别等)、音视频编解码、流媒体协议、系统架构(如数据库、文件系统)、CDN、播放控制(如音视频同步)和交互技术等。MediaCodec,MediaMuxer,MediaFormat等
Android视频编辑器(三)给本地视频加水印和美颜滤镜- http://blog.csdn.net/qqchenjian318/article/details/78274901
实时美颜滤镜(ColorMatrix)- https://github.com/Guikunzhi/BeautifyFaceDemo  https://github.com/BradLarson/GPUImage

图像滤镜处理算法:灰度、黑白、底片、浮雕 - http://www.icodelogic.com/?p=575
滤镜原理:
ios通过颜色矩阵(ColorMatrix)和坐标变换矩阵(Matrix)可以完美的做出上面的所说的效果。
视频滤镜,都是对视频中的图像帧进行操作来改变光影和色彩。

Android对于图片的处理,最常使用到的数据结构是位图——Bitmap,它包含了一张图片所有的数据。整个图片都是由点阵和颜色值组成的,所谓点阵就是一个包含像素的矩阵,每一个元素对应着图片的一个像素。而颜色值——ARGB,分别对应着透明度、红、绿、蓝这四个通道分量,他们共同决定了每个像素点显示的颜色。上图显示的就是色光三原色。

滤镜在色彩处理中,通常使用以下三个角度来描述一个图像:
色调——物体传播的颜色;
饱和度——颜色的纯度,从0(灰)到100%(饱和)来进行描述;
亮度——颜色的相对明暗程度;

在Android 的 ColorMatrix 颜色矩阵中也封装了一些 API 来快速调整上面这三个颜色参数,而不用每次都去计算矩阵的值。

美颜的实现的步骤是:https://www.2cto.com/kf/201604/498289.html
1.用具有保边效果的滤波算法对图像进行模糊处理
2.用肤色检测算法保护非皮肤区域
3.将模糊后的图像和原图进行图像融合
4.对融合后的图像进行锐化处理

硬件加速提高了Android系统显示和刷新的速度,但它也不是万能的,它有三个缺陷:
1.兼容性(部分绘制函数不支持或不完全硬件加速,参见文章尾)
2.内存消耗(OpenGL API调用就会占用8MB,而实际上会占用更多内存)
3.电量消耗(GPU耗电)


  开源图像库Skia: Skia 是完整的2D图像库,Google 一个底层的图形、图像、动画、 SVG 、文本/RGB(8byte – 32byte)编码(jpeg, png) 和解码功能等多方面的图形库,是 android 中图形系统的引擎。
Android图片解码流程:
1) APP:BitmapDecode.Java
2) API:BitmapFactory.java(static image)、Movie.java(dynamic image)
3) JNI:BitmapFactory.cpp(static image)、Movie.cpp(dynamic image)
4) C Native Service(Skia):SkImageDecoder.cpp(static image)、SkMovie.cpp(dynamic image)
  skia 源码解析 http://www.eoeandroid.com/thread-27841-1-1.html .libskia
  使用系统自带libjpeg时问题 http://stackoverflow.com/questions/5208817/failing-to-link-against-libjpeg-so-in-jni-ndk-shared-library .libjpeg是个跨平台的开源库.

Skia主要使用的第三方库:Zlib、Jpeglib、Pnglib、giflib、fpdfemb(处理pdf文档)。
Skia编译及调用 Android?
Skia调用OpenGL或OpenGL ES
包括遮罩、浮雕、模糊、滤镜、渐变色、离散、透明等,并且实现了PATH的各种特效;


图片绘制,PorterDuffXfermode,这是CoorChice,几幅图的实现Github:https://github.com/chenBingX/CoorChiceLibOne/blob/448cf36e0b33fb667cb4fd5a8d8db2651bf0647e/app/src/main/java/com/chenbing/coorchicelibone/Views/PorterDuffXDemoActivity.java


 以前Android是使用skia生成2D图形的,后来(4.1 Jellybean )为了提高性能,改为使用 opengl (因为可以可以gpu),但以前的skia软架构依旧保留.
 Android apk 里面的画图分为2D和3D两种:2D是由Skia 来实现的,也就是我们在框架图上看到的SGL,SGL也会调用部分opengl 的内容来实现简单的3D效果;3D部分是由OpenGL|ES实现的,OpenGL|ES是Opengl的嵌入式版本.
 opengl,因为它默认启用硬件渲染;android的skia不提供gpu模式
 surfaceHolder.lockCanvas() surfaceHolder.unlockCanvasAndPost() ; 

------------------------

>美颜和滤镜
  一般的思路是磨破+美白,即用类似双边滤波这样的边缘保持滤波器对肤色区域做平滑处理,然后做肤色的色调调节.
  根据rgb值识别皮肤部分,进行肤色调整,用具有保持边缘效果的滤波算法对图像进行模糊处理,用一些算法将模糊后的图像与原图进行融合,增加皮肤质感,此时的图片会有一些朦胧感,锐化可以强化边缘,让图像更加清晰。
  自动瘦脸与眼睛放大可以算作图像局部扭曲算法的一个应用,其参考文献可以追溯至1993年的一篇博士论文- http://www.gson.org/thesis/warping-thesis.pdf
  在1979年Lee发表的论文《Lee Filter Digital Image Enhancement and Noise Filtering by Use of Local Statistics》中,提出了基于局部信息去除加性噪音、乘性噪音及加性乘性混合噪音的方法,经过仔细的学习和编码,发现其去除加性噪音的方法效果非常好,具有现在一些EPF算法类似的边缘保留功能,并且其运算并不复杂,可以应用到类似于磨皮这种项目中。http://imagej.net/Integral_Image_Filters. 皮肤识别有很多算法.

  美白算法: 借用色彩平衡算法;使用logarithmic Curve;使用图层混合.

  对人脸进行美白、磨皮、瘦脸和大眼等美化功能;磨皮算法 实时滤镜
Smooth:皮肤平滑度,越高皮肤除;
Skin Color:皮肤.色,low为做红.处理;
Sharp:瘦脸&大眼程度,值越高表示程度越大。

------------------------

Bugs:
com.bumptech.glide.request.target.SquaringDrawable cannot be cast to android.graphics.drawable.BitmapDrawable:
Android 关于Glide的拓展(高斯模糊、加载监听、圆角图片)- http://blog.csdn.net/onceing/article/details/73277079


Android中GPU硬件加速控制及其在2D图形绘制上的局限- http://blog.csdn.net/iispring/article/details/49835061
Android 如何使用GPU硬件加速- http://blog.csdn.net/mandagod/article/details/48436123
This is a sobel filter on Android using OpenCL to accelerate.OPenCV
在Android上还实现了很多种并行化的算法,比如SHA-1、HDR、K-means、NL-means、SRAD等- https://github.com/WhiteIsClosing/Android-OpenCL-Sobel-Filter


Android平台美颜相机/Camera实时滤镜/视频编解码/影像后期/人脸技术探索-http://blog.csdn.net/martin20150405/article/details/54766660,
http://blog.csdn.net/Martin20150405/article/category/6274984
VR(全景视频播放器)App,相机App
 美丽的滤镜背后都是数学和艺术在支撑。相片磨皮
 基于GPU的图像处理和实时滤镜,鼎鼎大名的GPUImage
 GPUImage的项目结构其实很简单,android版本就更是简陋,结构如下:
 1.一堆滤镜(shader以及配套设置参数的代码)
 2.FilterGroup(利用FBO进行同一副图像的多次处理)
 3.EGL管理类(主要用来做离屏渲染)
虽然GPUImage的主要价值在那堆滤镜上,但是我们主要来分析后面两个,这是GPUImage的框架,而滤镜就像插件一样,想插就插:D,我们也可以依葫芦画瓢定制自己的滤镜。
  既然是图像处理,那么滤镜的操作就主要是:卷积、像素映射、坐标映射,反映到具体效果上,就是模糊锐化,覆盖层(贴纸等),RGB曲线调整,旋转缩放扭曲之类的。

> 快手、美拍、Instagram、OPPO/ViVO 等

> 滤镜功能

照片美妆---天天P图疯狂变脸特效算法研究- http://blog.csdn.net/trent1985/article/details/71446860
图像算法---磨皮算法研究汇总- http://blog.csdn.net/trent1985/article/details/50496969
人像美妆---妆容迁移算法研究(Makeup transfer)- http://blog.csdn.net/trent1985/article/details/70226779

图像处理(二十一)基于数据驱动的人脸卡通动画生成-Siggraph Asia 2014- http://blog.csdn.net/hjimce/article/details/47083321


  GPUImage是采用链式方法来处理画面,通过addTarget方法添加对象到链中,处理完一个target,就会吧上一个环节处理好的图像数据传递到下一个target处理,成为GPUImage处理链。
  GPU工作原理:CPU指定显示器工作,显示控制器根据CPU的控制到指定的地方去取数据和指令,目前的数据一般是从显存里取,如果显存里存不下,则从内存里取,内存也放不下,则从硬盘里取。
  滤镜处理的原理:就是把静态图片或者视频的每一帧进行图形变化后在显示到屏幕上,其本质就是像素点的坐标和颜色的变化。

  OpenGL ES程序处理图片的步骤:
1.初始化OpenGL ES 环境,编译、链接顶点着色器和片元着色器。
2.缓存顶点、纹理坐标数据,传送图像数据到GPU
3.绘制图元到特定的帧缓存;
4.在帧缓存去除绘制的图像。

  YUV是被欧洲电视系统索采用的一种颜色编码方法。采用YUV色彩空间的重要性是它的亮度信号Y和色度信号U、V是分离的。如果只有Y信号分量而没有U、V分量,那么这样表示的图像就是黑白灰度图像,彩色电视采用YUV空间正式为了用亮度信号Y解决彩色电视机与黑白电视机的兼容问题,使黑白电视机也能接收彩色电视信号。
  YUV主要用于优化彩色视频信号的传输,使其向后相容老式黑白电视。与RGB视频信号传输相比,它最大的优点在于只需占用极少的频宽。

滤镜功能-->

Android实现图像处理滤镜功能特效实现(资源下载)- http://download.csdn.net/detail/jasonez/8788931

[图片处理] 99种滤镜效果 ImageFilterForAndroid-master- http://download.csdn.net/download/cleopard/8454813
ImageFilterForAndroid图像渲染- http://download.csdn.net/detail/heng615975867/6593591
 图像处理滤镜/美化ImageFilterForAndroid- https://github.com/daizhenjun/ImageFilterForAndroid
android 图像处理滤镜系列合集- http://blog.csdn.net/jingwen3699/article/details/7770287


Android实战经验之图像处理及特效处理的集锦(总结版)- https://www.oschina.net/question/231733_44154
Android图片各种处理效果源码- http://download.csdn.net/download/lilidejing/7927579 

sangmingming/android-instagram-filter--  https://github.com/sangmingming/android-instagram-filter
imrunning/android-instagram-image-filter--  https://github.com/imrunning/android-instagram-image-filter

图像处理滤镜的话主要处理图片的三原色,并根据三原色进行运算
android 图像处理滤镜系列合集-- http://blog.csdn.net/jingwen3699/article/details/7770287

在MPAndroidChart库K线图的基础上画均线- http://blog.csdn.net/q4878802/article/details/50606718
MPAndroidChart图形联动- http://blog.csdn.net/q4878802/article/details/50464597
Android二维码扫描、生成(ZXing,ZBar)- http://blog.csdn.net/q4878802/article/details/50440807


  图像滤镜艺术- http://blog.csdn.net/Trent1985/article/category/2644207
  Instagram中最初的不到20个滤镜的代码与资源(InstagramFilters)- http://download.csdn.net/detail/oshunz/9335481

ImageFilterForAndroid-master- http://download.csdn.net/detail/cleopard/8454813
如何制作摄影类 app 中的滤镜- https://www.zhihu.com/question/20073281
如何制作摄影类 app 中的滤镜?- https://github.com/YuAo/YUCIHighPassSkinSmoothing
opencv,图像处理的第三方库很多。
数字图像处理研究- http://blog.csdn.net/Trent1985/article/category/1850555
图像处理,图像分割,特征提取,机器学习,模式识别,深度学习等- http://blog.csdn.net/real_myth?viewmode=contents


OpenGL实践- http://blog.csdn.net/wangkuifeng0118/article/category/1115152

OpenCV 3.1.0编译与添加扩展模块- http://blog.csdn.net/jia20003/article/details/54583431

> 贴图

android ndk调用OpenGL 实现纹理贴图Texture- http://blog.csdn.net/chrisfxs/article/details/34359265
http://download.csdn.NET/detail/chrisfxs/7547637

> 图片分片,拼图游戏可以用到

【Android图像处理】将一张图片切成许多碎片- http://blog.csdn.net/qq_32353771/article/details/53215322
[Android] Android中将一个图片切割成多个图片- http://blog.csdn.net/arui319/article/details/7470193

> android拼接多张bitmap图片- http://blog.csdn.net/ajun495175289/article/details/18091683

/**
* 横向拼接
* <功能详细描述>
* @param first
* @param second
* @return 
*/
private Bitmap add2Bitmap(Bitmap first, Bitmap second) {
int width = first.getWidth() + second.getWidth();
int height = Math.max(first.getHeight(), second.getHeight());
Bitmap result = Bitmap.createBitmap(width, height, Config.ARGB_8888);
Canvas canvas = new Canvas(result);
canvas.drawBitmap(first, 0, 0, null);
canvas.drawBitmap(second, first.getWidth(), 0, null);
return result;

}


/**
* 纵向拼接
* <功能详细描述>
* @param first
* @param second
* @return 
*/
private Bitmap addBitmap(Bitmap first, Bitmap second) {
int width = Math.max(first.getWidth(),second.getWidth());
int height = first.getHeight() + second.getHeight();
Bitmap result = Bitmap.createBitmap(width, height, Config.ARGB_8888);
Canvas canvas = new Canvas(result);
canvas.drawBitmap(first, 0, 0, null);
canvas.drawBitmap(second, first.getHeight(), 0, null);
return result;
}


> 1.图片倒影,其原理基本上就是将原图倒置,画在画布上,然后加上一个半透明的蒙版
public static Bitmap createReflectedImage(Bitmap originalImage)  
    {  
        int width = originalImage.getWidth();  
        int height = originalImage.getHeight();  
        Matrix matrix = new Matrix();  
        // 实现图片翻转90度  
        matrix.preScale(1, -1);  
        // 创建倒影图片(是原始图片的一半大小)  
        Bitmap reflectionImage = Bitmap.createBitmap(originalImage, 0, height / 2, width, height / 2, matrix, false);  
        // 创建总图片(原图片 + 倒影图片)  
        Bitmap finalReflection = Bitmap.createBitmap(width, (height + height / 2), Config.ARGB_8888);  
        // 创建画布  
        Canvas canvas = new Canvas(finalReflection);  
        canvas.drawBitmap(originalImage, 0, 0, null);  
        //把倒影图片画到画布上  
        canvas.drawBitmap(reflectionImage, 0, height + 1, null);  
        Paint shaderPaint = new Paint();  
        //创建线性渐变LinearGradient对象  
        LinearGradient shader = new LinearGradient(0, originalImage.getHeight(), 0, finalReflection.getHeight() + 1, 0x70ffffff,  
                0x00ffffff, TileMode.MIRROR);  
        shaderPaint.setShader(shader);  
        shaderPaint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));  
        //画布画出反转图片大小区域,然后把渐变效果加到其中,就出现了图片的倒影效果。  
        canvas.drawRect(0, height + 1, width, finalReflection.getHeight(), shaderPaint);  
        return finalReflection;  
    }  
> 2.图片阴影,在一个圆角矩形的图片四周加上阴影效果,在原图四边加上矩形的阴影,然后在四个圆角的地方画扇形阴影来实现。
Android图片添加阴影效果的两种方式- http://blog.csdn.net/u011421608/article/details/51923812
public static Bitmap createShadowBitmap(Bitmap orignalBitmap,  
            int shadowMargin, int iconCornerRadius) {  
        int w = orignalBitmap.getWidth();  
        int h = orignalBitmap.getHeight();  
        Bitmap shadowBitmap = Bitmap.createBitmap(w + shadowMargin * 2, h  
                + shadowMargin * 2, Config.ARGB_8888);  
        int width = shadowBitmap.getWidth();  
        int height = shadowBitmap.getHeight();  
        Canvas canvas = new Canvas(shadowBitmap);  
        canvas.drawBitmap(orignalBitmap, shadowMargin, shadowMargin, null);  
        Paint paint = new Paint();  
        paint.setXfermode(new PorterDuffXfermode(Mode.DST_OVER));  
        int radius = shadowMargin + iconCornerRadius;  
        // 四个边的阴影效果,采用线性阴影,宽度等于阴影边距+圆角半径  
        LinearGradient leftGradient = new LinearGradient(radius, 0, 0, 0,  
                0x7F000000, 0x00000000, TileMode.CLAMP);  
        LinearGradient rightGradient = new LinearGradient(width - radius, 0,  
                width, 0, 0x7F000000, 0x00000000, TileMode.CLAMP);  
        LinearGradient topGradient = new LinearGradient(0, radius, 0, 0,  
                0x7F000000, 0x00000000, TileMode.CLAMP);  
        LinearGradient bottomGradient = new LinearGradient(0, height - radius,  
                0, height, 0x7F000000, 0x00000000, TileMode.CLAMP);  
        paint.setShader(leftGradient);  
        canvas.drawRect(0, radius, radius, height - radius, paint);  
        paint.setShader(rightGradient);  
        canvas.drawRect(width - radius, radius, width, height - radius, paint);  
        paint.setShader(topGradient);  
        canvas.drawRect(radius, 0, width - radius, radius, paint);  
        paint.setShader(bottomGradient);  
        canvas.drawRect(radius, height - radius, width - radius, height, paint);  
        // 四个角的阴影效果,采用圆形阴影,半径等于阴影边距+圆角半径  
        RadialGradient topLeftCornerGradient = new RadialGradient(radius,  
                radius, radius, 0x7F000000, 0x00000000, TileMode.CLAMP);  
        RadialGradient topRightCornerGradient = new RadialGradient(width  
                - radius, radius, radius, 0x7F000000, 0x00000000,  
                TileMode.CLAMP);  
        RadialGradient bottomLeftCornerGradient = new RadialGradient(radius,  
                height - radius, radius, 0x7F000000, 0x00000000, TileMode.CLAMP);  
        RadialGradient bottomRightCornerGradient = new RadialGradient(width  
                - radius, height - radius, radius, 0x7F000000, 0x00000000,  
                TileMode.CLAMP);  
        // 画四个角,就是画四个圆心角为90度的扇形,drawArc函数第一个参数为圆弧所在圆的的外接矩形,第二个参数为起始角度,第三个参数为扇形顺时针滑过的角度,第四个参数如果为true时,在绘制圆弧时将圆心包括在内(用来画扇形),第五个参数为画笔  
        paint.setShader(topLeftCornerGradient);  
        canvas.drawArc(new RectF(0, 0, radius * 2, radius * 2), 180, 90, true,  
                paint);  
        paint.setShader(topRightCornerGradient);  
        canvas.drawArc(new RectF(width - radius * 2, 0, width, radius * 2),  
                270, 90, true, paint);  
        paint.setShader(bottomLeftCornerGradient);  
        canvas.drawArc(new RectF(0, height - radius * 2, radius * 2, height),  
                90, 90, true, paint);  
        paint.setShader(bottomRightCornerGradient);  
        canvas.drawArc(new RectF(width - radius * 2, height - radius * 2,  
                width, height), 0, 90, true, paint);  
        return shadowBitmap;  
    }

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u010052279/article/details/80627387

智能推荐

稀疏编码的数学基础与理论分析-程序员宅基地

文章浏览阅读290次,点赞8次,收藏10次。1.背景介绍稀疏编码是一种用于处理稀疏数据的编码技术,其主要应用于信息传输、存储和处理等领域。稀疏数据是指数据中大部分元素为零或近似于零的数据,例如文本、图像、音频、视频等。稀疏编码的核心思想是将稀疏数据表示为非零元素和它们对应的位置信息,从而减少存储空间和计算复杂度。稀疏编码的研究起源于1990年代,随着大数据时代的到来,稀疏编码技术的应用范围和影响力不断扩大。目前,稀疏编码已经成为计算...

EasyGBS国标流媒体服务器GB28181国标方案安装使用文档-程序员宅基地

文章浏览阅读217次。EasyGBS - GB28181 国标方案安装使用文档下载安装包下载,正式使用需商业授权, 功能一致在线演示在线API架构图EasySIPCMSSIP 中心信令服务, 单节点, 自带一个 Redis Server, 随 EasySIPCMS 自启动, 不需要手动运行EasySIPSMSSIP 流媒体服务, 根..._easygbs-windows-2.6.0-23042316使用文档

【Web】记录巅峰极客2023 BabyURL题目复现——Jackson原生链_原生jackson 反序列化链子-程序员宅基地

文章浏览阅读1.2k次,点赞27次,收藏7次。2023巅峰极客 BabyURL之前AliyunCTF Bypassit I这题考查了这样一条链子:其实就是Jackson的原生反序列化利用今天复现的这题也是大同小异,一起来整一下。_原生jackson 反序列化链子

一文搞懂SpringCloud,详解干货,做好笔记_spring cloud-程序员宅基地

文章浏览阅读734次,点赞9次,收藏7次。微服务架构简单的说就是将单体应用进一步拆分,拆分成更小的服务,每个服务都是一个可以独立运行的项目。这么多小服务,如何管理他们?(服务治理 注册中心[服务注册 发现 剔除])这么多小服务,他们之间如何通讯?这么多小服务,客户端怎么访问他们?(网关)这么多小服务,一旦出现问题了,应该如何自处理?(容错)这么多小服务,一旦出现问题了,应该如何排错?(链路追踪)对于上面的问题,是任何一个微服务设计者都不能绕过去的,因此大部分的微服务产品都针对每一个问题提供了相应的组件来解决它们。_spring cloud

Js实现图片点击切换与轮播-程序员宅基地

文章浏览阅读5.9k次,点赞6次,收藏20次。Js实现图片点击切换与轮播图片点击切换<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title></title> <script type="text/ja..._点击图片进行轮播图切换

tensorflow-gpu版本安装教程(过程详细)_tensorflow gpu版本安装-程序员宅基地

文章浏览阅读10w+次,点赞245次,收藏1.5k次。在开始安装前,如果你的电脑装过tensorflow,请先把他们卸载干净,包括依赖的包(tensorflow-estimator、tensorboard、tensorflow、keras-applications、keras-preprocessing),不然后续安装了tensorflow-gpu可能会出现找不到cuda的问题。cuda、cudnn。..._tensorflow gpu版本安装

随便推点

物联网时代 权限滥用漏洞的攻击及防御-程序员宅基地

文章浏览阅读243次。0x00 简介权限滥用漏洞一般归类于逻辑问题,是指服务端功能开放过多或权限限制不严格,导致攻击者可以通过直接或间接调用的方式达到攻击效果。随着物联网时代的到来,这种漏洞已经屡见不鲜,各种漏洞组合利用也是千奇百怪、五花八门,这里总结漏洞是为了更好地应对和预防,如有不妥之处还请业内人士多多指教。0x01 背景2014年4月,在比特币飞涨的时代某网站曾经..._使用物联网漏洞的使用者

Visual Odometry and Depth Calculation--Epipolar Geometry--Direct Method--PnP_normalized plane coordinates-程序员宅基地

文章浏览阅读786次。A. Epipolar geometry and triangulationThe epipolar geometry mainly adopts the feature point method, such as SIFT, SURF and ORB, etc. to obtain the feature points corresponding to two frames of images. As shown in Figure 1, let the first image be ​ and th_normalized plane coordinates

开放信息抽取(OIE)系统(三)-- 第二代开放信息抽取系统(人工规则, rule-based, 先抽取关系)_语义角色增强的关系抽取-程序员宅基地

文章浏览阅读708次,点赞2次,收藏3次。开放信息抽取(OIE)系统(三)-- 第二代开放信息抽取系统(人工规则, rule-based, 先关系再实体)一.第二代开放信息抽取系统背景​ 第一代开放信息抽取系统(Open Information Extraction, OIE, learning-based, 自学习, 先抽取实体)通常抽取大量冗余信息,为了消除这些冗余信息,诞生了第二代开放信息抽取系统。二.第二代开放信息抽取系统历史第二代开放信息抽取系统着眼于解决第一代系统的三大问题: 大量非信息性提取(即省略关键信息的提取)、_语义角色增强的关系抽取

10个顶尖响应式HTML5网页_html欢迎页面-程序员宅基地

文章浏览阅读1.1w次,点赞6次,收藏51次。快速完成网页设计,10个顶尖响应式HTML5网页模板助你一臂之力为了寻找一个优质的网页模板,网页设计师和开发者往往可能会花上大半天的时间。不过幸运的是,现在的网页设计师和开发人员已经开始共享HTML5,Bootstrap和CSS3中的免费网页模板资源。鉴于网站模板的灵活性和强大的功能,现在广大设计师和开发者对html5网站的实际需求日益增长。为了造福大众,Mockplus的小伙伴整理了2018年最..._html欢迎页面

计算机二级 考试科目,2018全国计算机等级考试调整,一、二级都增加了考试科目...-程序员宅基地

文章浏览阅读282次。原标题:2018全国计算机等级考试调整,一、二级都增加了考试科目全国计算机等级考试将于9月15-17日举行。在备考的最后冲刺阶段,小编为大家整理了今年新公布的全国计算机等级考试调整方案,希望对备考的小伙伴有所帮助,快随小编往下看吧!从2018年3月开始,全国计算机等级考试实施2018版考试大纲,并按新体系开考各个考试级别。具体调整内容如下:一、考试级别及科目1.一级新增“网络安全素质教育”科目(代..._计算机二级增报科目什么意思

conan简单使用_apt install conan-程序员宅基地

文章浏览阅读240次。conan简单使用。_apt install conan