- 博客(63)
- 资源 (10)
- 收藏
- 关注
原创 曲率滤波的简单实现只有源码
/** 打算自己实现一个更快更好的曲率滤波的算法将其开源, 但发现按照作者的博士论文的算法出来的效果,达不到作者文献中的效果。 而看作者公开的代码,发现和作者论文的算法又差距较大。 应该是鄙人对作者算法理解的问题,这里是我实现的一些代码,并不能直接运行,但不影响阅读。 我的实现方式和作者的实现方式完全不同,之所以采用这种方式,是因为还可以采用更多的指令集的 优化再次基础上加
2016-12-04 15:57:27
3134
1
原创 C语言实现通用数据结构的高效设计
以简单的插入排序为例,说明如何在C语言中实现对任意数据类型的支持,同时模拟C++的模板,在代码大小和运行效率上取得平衡。
2014-10-31 16:14:36
2594
原创 矩阵LU分解分块算法实现
本文主要描述实现LU分解算法过程中遇到的问题及解决方案,并给出了全部源代码。1. 什么是LU分解? 矩阵的LU分解源于线性方程组的高斯消元过程。对于一个含有N个变量的N个线性方程组,总可以用高斯消去法,把左边的系数矩阵分解为一个单位下三角矩阵和一个上三角矩阵相乘的形式。这样,求解这个线性方程组就转化为求解两个三角矩阵的方程组。具体的算法细节这里不做过多的描述,有很多的教材和资源
2014-08-06 18:37:30
9357
1
原创 常用资源链接
本文主要收集本文作者收藏的资源链接,以备查用。本文会持续更新!1. 对于从事codec研发,尤其是语音和音频codec研发的人,都知道的ITU-3GP组织。这里汇集了所有与ITU-3GP codec相关的资源,主要包括标准文档, 当然还有各个标准的参考代码。 1.1 http://www.itu.int/rec/T-REC-G/en ITU-G系列的资源,例如G7
2014-03-08 13:10:47
6924
1
原创 暗通道去雾与自适应直方图均衡去雾之比较
本文主要对比两种去雾算法的优略。1. 暗通道去雾方法 这种方法目前研究的比较多。虽然大家认为去雾已经被研究烂了,但是从工程实践的角度看,仍然存在很多问题。却不说暗通道先验对天空本身的不合理假设,就单说时间复杂度。对于视频图像处理来说,视频编解码就已经占了大量的CPU时间,而如果其它一些图像增强的算法也要占用大量的计算时间,就会导致了很多所谓的the state of a
2013-11-05 10:14:44
19047
1
原创 CUDA编程札记
1. 关于线程号的计算方式 1.1 使用N个线程块,每一个线程块只有1个线程此时线程号的计算方式如下: Tid = blockIdx.x 其中,Tid的取值范围为0到N-1。对于此种情况,可以看做一个列向量,列向量中的每一行对应一个线程块。列向量中的每一行只有1个元素,对应于一个线程。1.2 使用MxN个线程块,每一个线程块只有1个线程由于线程块是
2013-09-07 14:55:51
2411
1
原创 一种极快速去模糊效应图像细节增强及其应用
本文主要介绍本人自己实现的一种图像的细节增强技术,同时对比了两篇重要的参考文献的实际处理效果。图像的细节增强有很多典型的应用,例如暴风影音的左眼功能能让图像看起来更清晰一点。笔者通过实际测试发现,暴风使用的可能是简单的锐化加上图像的对比度等调节功能,因为对于视频后处理不太可能采用很复杂的算法。图像处理的很多算法都可以直接用于视频后处理,但是,有一个前提:就是算法不能太复杂,否则实时性不
2013-08-09 16:37:52
10586
6
原创 基于稀疏表示的人脸识别
本文主要记录自己对稀疏表示在人脸识别中的应用做一些总结。1. 背景与动机 信号的稀疏性并不是新的东西。我们很早就在用这一特性。例如,最简单的JPEG图像压缩算法。原始的图像信号经过DCT变换之后,只有极少数元素是非零的,而大部分元素都等于零或者说接近于零。这就是信号的稀疏性。 任何模型都有建模的假设条件。压缩感知,正是利用的信号的稀疏性这个假设。对
2013-07-06 13:53:29
12639
原创 从自联想神经网络到深度神经网络
深度神经网路已经在语音识别,图像识别等领域取得前所未有的成功。本人在多年之前也曾接触过神经网络。本系列文章主要记录自己对深度神经网络的一些学习心得。第六篇,简要描述深度神经网络模型。1. 自联想神经网络与深度网络 自联想神经网络是很古老的神经网络模型,简单的说,它就是三层BP网络,只不过它的输出等于输入。很多时候我
2013-06-12 17:40:08
22409
原创 谈谈快速非局部去噪算法
图像去噪是一个经典的课题。然而,对于真实数码照片,要想达到良好的去噪效果,且非易事。尤其是对于手机拍摄的照片,更是如此。如果你在光线不好的环境下,用手机前置摄像头拍照,往往会有很多的噪声。 我们可以在任何一本关于数字图像处理的教材上找到多种图像去噪的方法。但是,这些经典的方法,对于真实图像去噪的效果很不好。这些方法都会让图像变得模糊而导致很差的视觉效果。尽管用双边滤波可
2013-06-11 16:23:10
10317
原创 浅谈凸优化问题中的Bregman迭代算法
对于搞图像处理的人而言,不懂变分法,基本上,就没法读懂图像处理的一些经典文献。当然,这已经是10年之前的事情了。 现在,如果不懂得Bregman迭代算法,也就没法读懂最近几年以来发表的图像处理的前沿论文了。国内的参考文献,基本上都是直接引用Bregman迭代算法本身,而对于其原理基本上找不到较为详细的论述。本文简要叙述当前流行的Bregman迭代算法的一些原理。
2013-06-08 17:59:49
26389
2
原创 PCA方法从原理到实现
深度神经网路已经在语音识别,图像识别等领域取得前所未有的成功。本人在多年之前也曾接触过神经网络。本系列文章主要记录自己对深度神经网络的一些学习心得。第五篇,谈谈PCA模型。本来PCA模型与深度学习是没有任何联系的。通常我们只是用PCA来对机器学习的数据做预处理。本来想详细记录一下PCA的原理,但发现网上已经有一篇不错的文章,链接如下:http
2013-06-07 15:29:23
23790
1
原创 视频图像处理中的频域下采样技术
在传统的图像,视频的后处理阶段,一般会涉及到图像大小的缩放问题。这样的操作是为了适配不同屏幕分辨率的大小。例如,对于高档相机拍摄的照片,一般都很大,而要在普通显示器上显示,则要在解码图像数据之后再做缩小操作才能显示到屏幕上。对于手机屏幕,更是如此。那么,能否在图像解码的过程中实现图片的缩小?答案是肯定的。网上开源的jpeg项目早就实现了频域下采样技术。美图秀秀,QQlive等多款桌面图片应用软件也
2013-06-05 10:20:03
4607
原创 逻辑回归与softmax回归
深度神经网路已经在语音识别,图像识别等领域取得前所未有的成功。本人在多年之前也曾接触过神经网络。本系列文章主要记录自己对深度神经网络的一些学习心得。第四篇,谈谈我对逻辑回归和softmax回归的一点理解。网络上对逻辑回归和softmax回归论述也很多,包括各种不同语言的代码,都可以下载到。1. 逻辑回归源于线性回归模型。 线性回归问题的自变量是连续变量,而逻辑
2013-06-03 17:15:56
18027
翻译 高质量单幅图片运动去模糊
摘要:我们提出了一种从单一图片去除运动模糊的算法。我们的方法在去模糊图像的计算过程中,对于卷积核的估计和清晰图像,采用统一的概率模型。我们分析了当前去模糊方法中通常存在的人工痕迹的产生原因,而后在我们的概率模型中引入了一些新的术语。这些术语包括模糊图像噪声的空域随机模型,还有新的局部平滑先验知识。通过对比度约束,即使是低对比的模糊图像,也能减少人工振铃效应。最后,我们描述了一种有效的优化方案,通过
2013-06-01 10:16:33
9661
翻译 快速视频图像上采样
摘要 我们提出了一种简单而高效的上采样方法。这种方法能够自动的增强视频图像的分辨率,同时能够保持图像的重要结构信息。我们的方法主要优点在于一个反馈控制框架,这个框架能够从低分辨率图像确切地复原高分辨率图像,而不需要强加从其它样本中学习到的图像的局部结构约束信息。这使得我们的方法在图像质量上与通过大量采样学习得到的高质量图像是独立的。通常大量样本学习的算法,能够产生高质量的图像质
2013-06-01 09:43:50
3406
原创 受限波尔兹曼机
深度神经网路已经在语音识别,图像识别等领域取得前所未有的成功。本人在多年之前也曾接触过神经网络。本系列文章主要记录自己对深度神经网络的一些学习心得。第三篇,谈谈自己对最近几年颇为流行的受限波尔兹曼网络RBM的理解。我不打算详细描述其生物学运行机理和相关的算法推导过程,因为网络上已经有太多的教程可以参考。1. 概述 前面描述的神经网络
2013-05-28 14:30:35
19139
原创 卷积神经网络
深度神经网路已经在语音识别,图像识别等领域取得前所未有的成功。本人在多年之前也曾接触过神经网络。本系列文章主要记录自己对深度神经网络的一些学习心得。第二篇,讲讲经典的卷积神经网络。我不打算详细描述卷积神经网络的生物学运行机理,因为网络上有太多的教程可以参考。这里,主要描述其数学上的计算过程,也就是如何自己编程去实现的问题。1. 概述
2013-05-25 13:42:36
68444
7
原创 反向传播BP算法
深度神经网路已经在语音识别,图像识别等领域取得前所未有的成功。本人在多年之前也曾接触过神经网络。本系列文章主要记录自己对深度神经网络的一些学习心得。第一篇,从最经典的BP网络开始。我不打算详细描述神经网络的生物学运行机理,因为网络上有太多的教程可以参考。这里,主要描述其数学上的计算过程,并且采用的符号可能与其它参考书上的符号有很大差异。特别是,斯坦福官方网站上对深度网络中所引用的符号有
2013-05-23 13:08:04
20843
10
原创 SSE2指令集系列之一----浮点运算指令
SSE2与SSE1使用相同寄存器,指令描述约定: MM指64位MMX寄存器XMM指128XMM寄存器m32 指32位内存变量m128指128位内存变量本小结主要描述双精度浮点运算指令1. 数据搬移指令 movapd XMM,XMM/m128 movapd XMM/m128,
2013-05-16 14:26:09
6206
原创 HDR阴影高光图像增强
1. 技术背景 HDR图像处理的技术本质上是对阴影,高光的细节增强。即图像太暗或者太亮的部分,其细节丢失的比较明显,HDR图像处理就是对暗部和高亮部分的细节进行恢复的过程。 HDR的处理思路是这样的。首先,用户至少拍摄3张不同曝光量下的照片。分别对应低曝光,正常曝光和高曝光量。对于低曝光拍摄的图片,场景中比较亮的部分细节会比较突出,而其他部分则细节丢失比较严重
2013-05-15 19:05:02
4684
原创 傅里叶变换的物理意义
假设信号的采样频率是Fs,信号的频率是F,采样点数为N,则与傅里叶变换相关概念几个计算公式如下:1. 频率计算公式 2. 振幅计算公式 Magnitude
2013-04-24 11:11:03
2392
原创 移植FFMPEG到VS2008系列之四
这部分主要是引入第三方库,还有就去去除无关的测试代码。7. 引入第三方库 必须引入的第三方库为zdll.lib,这个库在网上可以下载到,如若不加入这个库,很多的函数将链接不到。还有在avcodec文件夹下面以lib打头的文件都是为引入第三方库而进行的接口封装,以适应ffmpeg去调用的相关代码。最重要的例如libx264,libmp3lame.lib libfdk_a
2013-04-23 17:34:43
2138
3
原创 移植FFMPEG到VS2008系列之三
5. 排除编译错误。 这部分主要是修改C99的语法,常见的不兼容语法如下:5.1 例如在文件av_codec_4xm.c最后的结构体初始化代码如下:AVCodec ff_fourxm_decoder = { .name = "4xm", .type = AVMEDIA_TYPE_VIDEO, .id
2013-04-23 16:02:49
2032
原创 移植FFMPEG到VS2008系列之二
前面我们已经把文件重命名了,准备好了代码之后就是把代码添加到vs2008开发环境中来。3. 创建工程添加文件。 创建新的空的控制台工程,把所有的文件都添加进来。有几个文件夹下面的文件不用添加,主要有compat,libavdevice,tools。要注意的是子目录x86下面的c文件也需要添加进来。 上图之中test文件夹里面有些文件是自己添加的,它们是con
2013-04-23 15:29:34
2289
原创 移植FFMPEG到VS2008系列之一
做音视频编解码的人都知道ffmpeg。然而,要想在windows上调试ffmpeg却不是一件容易的事情。之前也曾经把x264的代码移植到vs2008上面,具体可以参见我前面的文章。最近终于把ffmpeg的最新代码完全移植到vs2008环境中来。在移植过程中深深的感觉到codec的多样性,我虽然在codec领域工作了很多年,但是ffmpeg里面大多数codec甚至连名字都没有见过。下面把移植过程中需
2013-04-23 14:31:33
3070
原创 SSE4.1指令集系列之一----多字节绝对差值求和指令、水平最小值,整数格式扩展指令
本文要介绍的是SSE4.1指令集中的几条整数指令及其在视频编码中的应用。1. 单指令32字节差分绝对值求和指令 MPSADBW 这条指令类似于SSE的PSADBW,但它实现的功能更强大。包括微软官方网站上对这条指令的说明都不是能够让人一目了然。下面这张图也许可以帮助我们理解: 这条指令的灵活之处在于源操作数和目的操作数的位置都是可选的。如何选择关键在于
2013-04-23 12:22:52
1679
原创 SSE特殊指令集系列之二----字节绝对差值求和指令
本文要谈的是这样一条指令:PSADBW这条指令是SSE1引入的用于视频编码绝对差值求和的指令。在视频编码中的运动估计模块,一种常见的SAD代码如下:1 // Get the SAD 16x16 macro block with full pixel2 for (y = 0; y 16; y++)3 for(x = 0; x 16; x++)4 sad +=
2013-04-23 12:22:50
1745
原创 SSSE3指令集----水平加法指令饱和字节乘加指令以及字节重排指令
这里简要描述几个重要的算数运算指令。1. 水平相加指令 SSSE3指令集增加的主要是针对整数进行水平方向上相加的指令,与SSE3的浮点指令类似。 phaddd 寄存器水平方向上按照无符号32位整数进行加法 phaddw 寄存器水平方向上按照无符号16位整数进行加法 phaddsw 寄存器水平方向上按照16位整数进行饱和加法
2013-04-23 12:22:47
2958
原创 SSE3指令集系列----数据加载与算术运算指令
1. 数据加载存储指令 LDDQU xmm, m128 从非对齐的内存地址中加载128位数到XMM寄存器,此条指令比SSE2的非对齐加载指令MOVDQU 要快。 MOVDDUP xmm, xmm/m64 加载64bit数据到XMM寄存器的低64位,同时复制到其高64位。 MOVSHDUPxmm, xmm/m128 只需复制
2013-04-23 12:22:45
1312
原创 SSE特殊指令集系列之一----各种数据重排指令
实际上,搞汇编优化的很多时间是在处理如何有效的组织数据,以适应并行计算指令的数据结构。本小结描述的是数据混洗指令,这类指令使用起来相当的灵活。具体如下: 1. shufps XMM,XMM/m128,imm8(0~255) 描述: 从指令后缀来看,这是一条SSE1指令。 该指令把源存储器与目的寄存器按双字32位划
2013-04-23 12:22:43
1959
原创 SSE2指令集系列之二----整数运算相关指令
本小节描述的是SSE2整数运算指令。5. 数据搬移指令 movdqa XMM,XMM/m128 movdqa XMM/m128,XMM 把源存储器内容值送入目的寄存器,当有m128时,内存地址必须16字节对齐. movdqu XMM,XMM/m128 movdqu XMM/m128,XMM 把源存储器内容值送入目的寄存器,内存地址
2013-04-23 12:22:41
1506
原创 SSE指令集系列之三----整数运算指令
6. SSE整数运算指令 pavgb MM,MM/m64 pavgb XMM,XMM/m128 把源存储器与目的寄存器按字节无符号整数相加,再除以2,结果四舍五入为整数放入目的寄存器。 源存储器为m128时,内存变量地址必须16字节对齐. pavgw MM,MM/m64 pavgw XMM,XMM/m128 把源存储器与目的寄存器按字无符
2013-04-23 12:22:39
2241
原创 SSE指令集系列之二----浮点与整数转换指令
4. 数据重排指令集 unpckhps XMM,XMM/m128 源存储器与目的寄存器高64位按双字交错排列,结果送入目的寄存器,内存变量必须对齐内存16字节. 高64位 | 低64位 目的寄存器: a0 | a1 | a2 | a3 源存储器: b0 | b1 | b2 | b3 目的寄存器结果: b0 | a0
2013-04-23 12:22:36
1350
原创 SSE指令集系列之一----数据加载与浮点运算指令
SSE有8个128位独立寄存器(XMM1~XMM7),指令描述约定: MM指64位MMX寄存器 XMM指128XMM寄存器 m32 指32位内存变量 m128指128位内存变量 1. 数据传送指令 movapsXMM,XMM/m128 movaps XMM/m128,XMM 把源存储器内容值送入目的寄存器,当有m128时
2013-04-23 12:22:34
4155
原创 MMX指令集系列之三----数据饱和压缩与重排指令
6. 数据压缩指令 packuswb MM,MM/m64 把目的寄存器按字有符号数压缩为饱和字节无符号数放入目的寄存器低32位, 把源寄存器字有符号数压缩为饱和字节无符号数放入目的寄存器高32位。 简单的说,就是16位有符号压缩为饱和8位无符号数。 高32位 | 低32位 目的寄存器:
2013-04-23 12:22:32
1442
原创 MMX指令集系列之二----移位运算和乘法指令
4. 数据移位指令 4.1 16位并行左移指令 psllw MM,MM/m64 psllw MM,imm8 把目的寄存器按字由源存储器(或imm8 立即数)指定位数逻辑左移,移出的位丢失. 低字移出的位不会移入高字. 例: 当MM0 = 0xffff ffff ffff ffff, 执行psllw MM0,1 则MM0 = 0xff
2013-04-23 12:22:29
2011
GPU高性能编程CUDA实战代码
2013-10-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人