图像处理算法
介绍常见的图像算法
ShaderJoy
醉心于研究一些特效(用代码来画画),曾涉猎过图形图像视频处理 、计算机视觉 、增强现实/虚拟现实等技术领域,就职于美图。
展开
-
两种 2D 折线(Polyline)平滑算法【C#】【VB.NET】
引言当使用地图 (GIS) 或图表数据时,您将拥有2D点、线、折线和多边形等形状的对象。这些物体有很多不同的名字:形状、路径、面积、区域等等。在这篇文章中,我们把点定义为单个的 (x,y) 坐标对,即顶点,简单标记为P;直线被定义为以起点 和终点 为顶点对);多个顶点(从 到 ,其中n为> 2)组成一条折线。在折线中,顶点按它们在集合中出现的顺序连接;多边形就是一个简单的折线,...翻译 2020-01-14 13:08:50 · 6395 阅读 · 3 评论 -
二次 Bezier 曲线匀速运动的实现【C++】【修正版】
原理参考自这篇博客,但是我觉得有些细节作者没有详细阐明,所以我进行了一些补充和修正。以下为博客正文:二次贝塞尔曲线通常以如下方式构建,给定二维平面上的固定点 P0, P1, P2,用 B(t) 表示该条曲线用一个动画来演示,可以更加清楚的表明这条曲线的构建过程如果 t 变量本身是线性变化的话,这条贝塞尔曲线的生成过程是并不是匀速的,通常都是两头快中间慢。可以...转载 2020-01-09 23:51:18 · 2423 阅读 · 0 评论 -
ShaderJoy —— 模拟PS 的十九种 Blend 模式【GLSL】
1.变暗// PS 的叠加模式#iChannel0 "file://./beard.jpg"#iChannel1 "file://./CUDA.png"void main(){ // Normalized pixel coordinates (from 0 to 1) vec2 uv = gl_FragCoord.xy/iResolution.xy; ...原创 2019-10-26 10:55:18 · 1758 阅读 · 0 评论 -
分类器的常用性能指标的通俗释义
1. TP(True Postive)、TN(True Negative)、FP(False Negative)、 FN(False Negative)举个医生看病的例子:假设患病为阳性(Positive),健康为阴性(Negative)当医生正确地将患病病人确诊为有病,那么就是TP;当医生正确地将康复病人确诊为没病,那么就是TN;当医生错误地将健康病人确诊为有病,那么就是FP;当医生错误地将患病原创 2017-04-29 09:49:54 · 1373 阅读 · 0 评论 -
L0 范数图像平滑(L0 Smooth) 代码及详细注释 【OpenCV】
原理可以参考原作者的论文以及这位大神写的博客OpenCV 实现话不多说,附上C++代码cv::Mat L0Smoothing(cv::Mat &im8uc3, double lambda = 2e-2, double kappa = 2.0) { // convert the image to double format int row = im8uc3.row...原创 2016-10-15 20:54:21 · 9230 阅读 · 8 评论 -
联合双边滤波器(joint bilateral filter) 代码及详细注释【OpenCV】
原理部分可以参看前一篇博客void jointBilateralFilter(const Mat &src, Mat &dst, int d, double sigma_color, double sigma_space, Mat &joint = Mat(), int borderType =原创 2016-10-19 11:52:15 · 13994 阅读 · 16 评论 -
自适应直方图均衡(CLAHE) 代码及详细注释【OpenCV】
理论请参考博客OpenCV源码的本地路径: %OPENCV%\opencv\sources\modules\imgproc\src\clahe.cppclahe.cpp// ----------------------------------------------------------------------// CLAHEnamespace{ class C原创 2016-10-18 21:24:41 · 27846 阅读 · 2 评论 -
联合双边滤波器(joint bilateral filter)【OpenCV】
转载自:pplong的博客前面介绍了双边滤波器(bilateral filter,LBF),然而BF的权值是不稳定的,因此在边缘附近会出现一些翻转。此外BF计算复杂度是O(r^2);为了改善BF权值的稳定性,引入了联合双边滤波器(joint bilateral filter ,LBF)。两者之间的差别就是JBF用了一个导向图作为值域权重的计算依据。下面我们通过数学公式展示二者的不同:先看B原创 2016-10-17 15:46:35 · 23776 阅读 · 10 评论 -
Coherence-Enhancing Shock Filters 代码及详细注释【OpenCV】
本文代码参考自博客原作者论文下载地址// CoherenceFilter.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include using namespace cv;/* ==============================================* Coherence-Enhancing Shoc原创 2016-10-16 02:39:19 · 2561 阅读 · 0 评论 -
基于Permutohedral Lattice 的Bilateral filter 源码及部分注释【C++】
基于Permutohedral Lattice 的Bilateral filter 源码及部分注释【来自于网络】实现基于论文《Fast High-Dimensional Filtering Using the Permutohedral Lattice》 .1.bilateralPermutohedral 方法:static Mat bilateralPermuto原创 2016-10-22 15:11:17 · 4310 阅读 · 2 评论 -
灰度共生矩阵(GLCM,Gray-Level Co-occurrence Matrix)
概念 由于纹理是由灰度分布在空间位置上反复出现而形成的,因而在图像空间中相隔某距离的两像素之间会存在一定的灰度关系,即图像中灰度的空间相关特性。灰度共生矩阵就是一种通过研究灰度的空间相关特性来描述纹理的常用方法。 灰度共生矩阵是涉及像素距离和角度的矩阵函数,它通过计算图像中一定距离和一定方向的两点灰度之间的相关性,来反映图像在方向、间隔、变化幅度及快慢上的综合信息。GLCM 所代表的含义灰度共生矩原创 2017-05-08 13:51:16 · 19811 阅读 · 1 评论 -
分别以 Python, C++ 和 CUDA 探索 K-Means 算法【读书笔记】
原文链接:http://www.goldsborough.me/c++/python/cuda/2017/09/10/20-32-46-exploring_k-means_in_python,_c++_and_cuda/由于 CSDN 的图片缩放机制,请点击原图查看 本文作者最后基于共享内存归约(移除原子操作)的 CUDA 代码的确是有问题的...原创 2018-10-20 19:26:17 · 1319 阅读 · 0 评论 -
L0 范数图像平滑(L0 Smooth) 的原理和 GPU 加速【CUDA】
一、概述原作者提出了一种新的图像编辑方法,通过增加过渡的陡峭度,同时消除了一个低振幅结构的可管理程度,特别有效地锐化主要边缘。这种看似矛盾的效果是在一个利用 L0 梯度最小化的优化框架中实现的,它可以全局控制产生多少个非零梯度,以一种稀疏控制的方式近似出显著的结构。与其他边缘保持平滑方法不同,原作者的方法不依赖于局部特征,而是全局定位重要的边缘。它作为一种基本的工具,有许多应用场景,尤其有利于...原创 2019-02-21 21:11:00 · 5309 阅读 · 0 评论 -
OpenCV 的 Contrast Preserving Decolorization 源码解析
运行效果为:出乎我意料的是,不仅仅保留了对比度,居然还增强了图像的对比度(去雾,不过只适用于比较均匀的雾),不过运行的速度堪忧,500*500的图像都需要 1s 多!经过OpenMP 优化,执行时间减少了一半左右该代码是源于香港中文大学计算机科学与工程系 的一篇论文Contrast Preserving Decolorization其代码已被收录到 Op...原创 2019-02-27 16:56:04 · 1848 阅读 · 0 评论 -
OpenCV 的 Non Local Means(CUDA 版) 源码解析
效果如图:非局部均值滤波(Non Local Means)算法其出发点是——在同一幅图像中对具有相同性质的区域进行分类并加权平均得到的图片,应该降噪效果也会越好。意味着它使用的是图像中的所有像素(实际上是在一个搜索窗口内的所有像素),这些像素根据某种相似度进行加权平均。与双线性滤波、中值滤波等利用图像局部信息来滤波不同,它利用了整幅图像进行去噪。即以图像块(邻域)为单位在图像中寻找相...原创 2019-02-28 13:57:21 · 2889 阅读 · 0 评论 -
非局部均值(Non Local Mean)【GLSL】
原理介绍:请参考这篇博文——https://blog.csdn.net/panda1234lee/article/details/88016834代码及详细注释://#version 120uniform sampler2D iChannel0;const vec2 iResolution = vec2(512., 512.);const vec2 inv_res = vec...原创 2019-03-06 16:04:26 · 2649 阅读 · 0 评论 -
一种基于视神经网络的高动态范围(HDR)图像自适应局部色调映射的实现【OpenCV】【CUDA】
原理是基于这篇论文——《Adaptive Local Tone Mapping Based on Retinex for High Dynamic Range Images》论文提出的背景虽然可以从不同曝光的照片中获得包含真实场景全动态范围的高动态范围 (HDR) 图像,但是普通显示器等低动态范围(LDR)显示设备无法处理场景的全动态范围。LDR 设备只能显示两个数量级的。一旦将 H...原创 2019-03-11 13:05:21 · 4194 阅读 · 4 评论 -
优化加速的导向滤波(Guided Filter)【CUDA】【OpenCV】
原理可以参看:白马负金羁的《导向滤波(Guided Filter)的解析与实现》 ,写得很清晰透彻我实现的效果如下原图(894*1080,由于笔记本屏幕不够大,截图有截断)单通道的导向滤波1.CPU 版的 Guided Filter 和 Fast Guided Filter (缩放倍数为 2,何凯明大神加了一个 resize 就成了新算法,大神就是大神!) 的耗时(循环 ...原创 2019-03-15 11:45:04 · 4192 阅读 · 9 评论 -
泊松分布 (Poisson-Disc)算法
Poisson-Disc算法介绍原创 2016-03-24 14:20:07 · 11682 阅读 · 0 评论 -
泊松分布采样 (Poisson-Disk-Sample)代码及详细注释【OpenCV】
算法步骤简述关键代码如下:// 以center为圆心radius为半径的圆环范围内随机产生新的采样点template<unsigned int N, class T>void sample_annulus(T radius, const Vec<N, T> ¢re, unsigned int &seed, Vec<N, T>...原创 2016-09-23 18:50:11 · 19888 阅读 · 7 评论 -
Android视频渲染: YUV转RGB
原创文章,转载请注明:转载自ian的个人博客[http://www.icodelogic.com]本文链接地址: http://www.icodelogic.com/?p=6Android SDK为Camera预览提供了一个Demo,这个Demo的大致流程是初始化一个Camera和一个SurfaceView,SurfaceView被创建之后可以获取到一个SurfaceHolder的实例,将转载 2013-01-24 15:09:34 · 8440 阅读 · 1 评论 -
拉普拉斯算子(转)
1.基本理论 拉普拉斯算子是最简单的各向同性微分算子,具有旋转不变性。一个二维图像函数 的拉普拉斯变换是各向同性的二阶导数,定义为: 为了更适合于数字图像处理,将该方程表示为离散形式: 另外,拉普拉斯算子还可以表示成模板的形式,如图5-9所示。图5-9(a)表示离散拉普拉斯算子的模板,图5-9(b)表示其扩展模板,图5-9(c)则分别表示其他两种拉普拉斯的实转载 2013-02-27 17:55:30 · 3283 阅读 · 0 评论 -
OpenCV学习笔记(四十六)——FAST特征点检测features2D
转载自:http://blog.csdn.net/yang_xian521/article/details/7411438特征点检测和匹配是计算机视觉中一个很有用的技术。在物体检测,视觉跟踪,三维常年关键等领域都有很广泛的应用。这一次先介绍特征点检测的一种方法——FAST(features from accelerated segment test)。很多传统的算法都很耗时,而且特征点检测转载 2013-02-25 19:59:25 · 2321 阅读 · 0 评论 -
K-均值算法【有源码】
动态聚类方法是模式识别中一种普遍采用的方法,它具有以下3个要点: 1:选定某种距离度量作为样本间的相似性度量 2:确定某个评价聚类结果质量的准则函数 3:给定某个初始分类,然后用迭代算法找出使准则函数取极值的最好的聚类结果K-MEANS算法:输入:聚类个数k,以及包含 n个数据对象的数据库。输出:满足方差最小标准的k个聚类。处理流程: (1转载 2013-02-27 20:45:55 · 1623 阅读 · 0 评论 -
分析OpenSurf(2)
①积分图像的实现 首先在Integral.cpp里面找到Integral(),如下:IplImage *Integral(IplImage *source){ //转换成单通道图像 convert the image to single channel 32f IplImage *img = getGray(source); IplImage *int_img = c转载 2012-11-27 15:08:16 · 1971 阅读 · 0 评论 -
分析OpenSurf(4)
好了,终于要开始提取特征描述符了哈~.~void Surf::getDescriptor(bool bUpright){ int y, x, sample_x, sample_y, count=0; int i = 0, ix = 0, j = 0, jx = 0, xs = 0, ys = 0; float scale, *desc, dx, dy, mdx, mdy, c转载 2012-11-27 15:19:00 · 1513 阅读 · 2 评论 -
图像处理--角点检测(Harris以及其他算法研究)
环境:Windows xp+MATLAB 2010b提及角点检测,就不能忘了最经典的Harris角点检测算法,下面就主要介绍下Harris算法及其matlab实现。 算法介绍:1)通常情况下,可以将区域内的点分为3类,a.平坦的点,b.边缘上的点,c.角点。2)若对于这3类点分别求取Ix,Iy,很显然,a类点的Ix和Iy都很小,b类点则是Ix和Iy有转载 2013-03-03 17:27:06 · 2114 阅读 · 0 评论 -
图像匹配算法研究之surf算法
今天碰巧和朋友讨论这个,才想起来好久没碰,都生疏了,趁着暑假还有点闲时,先写写再说。有错误的地方希望大家指正。SURF (Speeded Up Robust Feature) is a robust local feature detector, first presented by Herbert Bay et al. in 2006, that ca转载 2012-11-28 21:33:28 · 2008 阅读 · 0 评论 -
卷积的意义-是我所看到的解释最生动最通俗易懂的
卷积的意义,原文:http://blog.csdn.net/yeeman/article/details/6325693卷积最近总是和卷积打交道,工作需要,每天都要碰到它好几次,不胜烦恼,因为在大学时候学信号与系统的时候就没学会,我于是心想一定要把卷积完全搞明白。正好同办公室的同学也问我什么是卷积,师姐昨天也告诉我说:"我也早就想把这个问题搞明白了!"经过一段时间的思考之后,有一些转载 2013-05-14 19:22:19 · 3888 阅读 · 0 评论 -
“图像处理”常用基本线代知识【备忘】
1.线性相关系数两个变量的协方差除以他们的方差乘积的算术平方根等于这两个变量的线性相关系数(1)相关系数的定义: r(ξ1,ξ2)=cov(ξ1,ξ2)/[Dξ1Dξ2]^0.5 =E[(ξ1-Eξ1)(ξ2-Eξ2)] / [Dξ1Dξ2]^0.5 (Dξ1,Dξ2均大于零) 称:上式为ξ1,ξ2的‘相关系数’或‘标准协方差’。 以上转载 2013-05-14 19:31:20 · 2277 阅读 · 0 评论 -
梯度、Hessian矩阵、平面方程的法线以及函数导数的含义
想必单独论及“ 梯度、Hessian矩阵、平面方程的法线以及函数导数”等四个基本概念的时候,绝大部分人都能够很容易地谈个一二三,基本没有问题。其实在应用的时候,这几个概念经常被混淆,本文试图把这几个概念之间的关系整理一下,以便应用之时得心应手。这四个概念中,Hessian矩阵是最不容易混淆,但却是很多人难以记住的概念,其它三个概念很容易记住,但却在某些时候很容易混淆。Hessi转载 2013-05-14 19:42:25 · 2462 阅读 · 0 评论 -
ShaderJoy —— Frei-Chen Edge Detector算法原理和源码 【GLSL】
转载自A technical blog from Daniel Rákos (aka aqnuep)Frei-Chen edge detectorFrei-Chen edge detectorIn this article, I would like to present you an edge detection algorithm翻译 2016-08-30 15:32:23 · 2932 阅读 · 0 评论 -
ffmpeg入门小结(三)—— 傅里叶变换之美
ffmpeg入门(三)—— 傅里叶变换之美原创 2015-09-28 13:49:36 · 2907 阅读 · 0 评论 -
opencv上Gamma调节的源码
这周单位要做一个人脸美化的项目,查资料遇到这位大牛的博客,地址如下:点击打开链接我的代码也是在他的基础上进行修改的,但是他对图像的RGB三个通道平等调节,为了适应我的需求,我改成了针对三个通道分别调节。废话不多说,开始上源码void ImageAdjust(Mat& src, Mat& dst, vector low_in, vector high_in, v原创 2014-05-23 17:36:31 · 3382 阅读 · 1 评论 -
The Fundamental Matrix Song【经典:国外大牛把它的作用变成一首歌了】
The fundamental matrix Used in stereo geometry A matrix with nine entries It's square with size 3 by 3 Has seven degrees of freedom It has a rank deficiency It's only of rank two Call th转载 2013-12-17 14:26:55 · 2854 阅读 · 0 评论 -
分析OpenSurf(3)
③根据上一步计算每层的每个点的det(Happrox),判断极值点。在fasthessian.cpp里面找到getIpoints(),下面开始抽取每组(共octaves组)相邻的3层(共有4层,每组有2个这样层的满足): ResponseLayer *b, *m, *t; for (int o = 0; o < octaves; ++o) for (int i = 0; i转载 2012-11-27 15:15:26 · 1444 阅读 · 0 评论 -
分析OpenSurf(1)
说是surf,其实原算法是基于Notes on the OpenSURF Library这篇文档。 下载地址:http://opensurf1.googlecode.com/files/OpenSURFcpp.zip 首先定义 #define PROCEDURE 1紧接着进入main()主函数:main.cppint main(void)转载 2012-11-27 14:20:47 · 3105 阅读 · 2 评论 -
海森矩阵就是二阶偏导函数的方阵.他描述了局部的曲率函数
In mathematics, the Hessian matrix is the square matrix of second-order partial derivatives of afunction; that is, it describes the local curvature of a function of many variables. The Hessian mat转载 2013-07-25 20:25:39 · 7576 阅读 · 0 评论 -
[转载]SURF 与 SIFT的共同点与不同点
共同点:SIFT/SURF为了实现不同图像中相同场景的匹配,主要包括三个步骤:1、尺度空间的建立;2、特征点的提取;3、利用特征点周围邻域的信息生成特征描述子4、特征点匹配。 从博客上看到一片文章,http://blog.csdn.net/cy513/archive/2009/08/05/4414352.aspx,这一段的大部分内容源于这篇转载 2013-07-25 14:57:35 · 1941 阅读 · 0 评论 -
图像匹配算法研究之sift算法
SIFT算法由D.G.Lowe 1999年提出,2004年完善总结,论文发表在2004年的IJCV上,主要用于提取具有图像旋转不变性和伸缩不变性的特征点。这项技术可以推广到图像识别、图像拼接以及图像恢复等。 David G. Lowe, "Distinctive image features from scale-invariant keypoints," Internatio转载 2012-11-28 22:33:04 · 1574 阅读 · 0 评论