- 博客(129)
- 资源 (4)
- 收藏
- 关注
原创 TeX、Markdown的使用感受
TeX、Markdown的使用感受 TeX全面,Markdown快速。Mac下有优秀的Markdown编辑器软件,Windows下最好使用在线Markdown编辑器。
2016-05-18 14:17:40 3983
原创 【图像处理】只存在噪声的基础图像复原
只存在噪声干扰的情况下,实际图像可以表示为g(x,y)=f(x,y)+n(x,y),这种情况下图像复原要容易许多。一、空间域滤波方法空间域滤波方法主要有均值滤波方法和统计排序方法。1、均值滤波方法包括:a谐波均值滤波器,公式:,当Q=0,谐波均值滤波器变为普通均值滤波器;当Q>0,原式称为逆谐波滤波器;当Q=-1,原式称为谐波滤波器。b几何滤波器,公式,其中m和n是模板S(x,
2016-05-16 20:49:44 3041
原创 【图像处理】从图像空间域滤波到频域滤波
频域滤波的快速实现是工程领域的里程碑。频域滤波最让工程师兴奋的原因来自于这个公式:f(x)*g(y)F(u)G(v)这说明空间域中的复杂的卷积算子,变换到频域中就成了简单的乘法,这样不仅计算简单,而且工程上易于实现。在FFT和快速DCT(余弦变换)的数字实现之前,频域变换的计算是很头疼的事情,在计算效率上并不比普通卷积快多少;在FFT和快读DCT实现之后,频域信号处理几乎无处不在。空间
2016-05-09 16:01:19 7908 1
原创 【图像处理】常见图像噪声模型和生成方法
常见的噪声模型有(z是噪声值,μ表示均值,s2表示方差):1、高斯噪声2、瑞里噪声μ=a+sqrt(pi*b/4),s2=b(4-pi)/43、伽马噪声 μ=b/a,s2=b/a^24、指数分布噪声 μ=1/a,s2=1/a^25、均匀分布噪声 μ=(a+b)/2,s2=(b-a)^2/126、椒盐噪声其中盐表示亮点,椒表示暗点。7、周期噪声,比如空间域图像受到正弦波信
2016-05-07 20:15:59 18850 3
原创 【图像处理】图像频域基础
一般我们看到的图像可以表示为函数f(x,y),x和y是空间上的坐标,此时的图像称为空间域图像;经过频域变换后的图像称为频域图像。离散情况下,一维傅里叶变换有如下形式。同时这里还证明了,对原始数据乘以(-1)^x之后,频域结果被中心化。在二维情况下,则有因为图像处理中一般有M=N,所以有 我们对一幅图像每个像素点(x,y)乘以(-1)^(x+y),然后进行FFT,
2016-05-06 10:08:43 5639
原创 【机器学习】最速下降法和牛顿下降法
入门教材常用二分法来求解实数求根的问题。我们现在来用普通迭代法、下降法来求解实数开立方根的问题。设当前实数为n,求根次数为k,根为s,那么有s^k=n。所得偏差函数为f(s)=s^k-n。显然当代价函数f(s)->0时,我们便求出了n的k次根。现在我们开立方根,那么k=3,代价函数为f(s)=s^3-n。
2016-05-04 20:18:49 2571
原创 【图像处理】空间域上的图像增强(sobel,LOG,DOG算子等)
空间域与傅里叶变化后的频域相对,是在实际的图像坐标空间中进行变换。在傅里叶变换中有f(x,y)F(u,v),前者位于空间域,后者位于频域。一、全局图像增强,比如灰度变换和直方图调整。二、局部增强,对特定区域进行调整。三、分块增强,将图像分块,计算每一个块的特征,比如平均值、方差等,根据这些特征,判断当前块是否调整。这里可以用到机器学习的方法。四、算术/逻辑增强,设有图像f(x,y)
2016-04-25 18:33:11 7589
原创 【图像处理】基本的全局图像灰度变换
二维图像可以看做坐标点(x,y)的函数,f(x,y),因变量为像素值。设r是当前点,s是灰度变换后的点,那么有s=T(r),T是一个函数,r和s都属于一定范围内的自然数集合。因此我们可以根据函数T建立一个数组,下标是r,元素是s,遍历每个待变换的像素点,用查表的方法替换r为s,快速完成灰度变换。常用的灰度变换有:1、 对数变换,s=cLog(1+r),其中c是归一化参数,对数的底是可以变
2016-04-22 12:36:24 3757
原创 【机器学习】贝叶斯线性回归模型
假设当前数据为X,回归参数为W,结果为B,那么根据贝叶斯公式,可以得到后验概率:,我们的目标是让后验概率最大化。其中pD概率是从已知数据中获取的量,视为常量;pw函数是w分布的先验信息。令: 求l函数最大化的过程称为w的极大似然估计(ML),求pie函数最小化的过程称为最大后验估计(MAP)。ML没有利用w的先验信息,因此结果不如MAP好。MAP和ML计算得到的W 的结果可能不
2016-04-21 20:18:43 9613 3
原创 【C++】C++对象内存模型简介
C++相比C,增加了class类特性,用于封装数据和方法。C和C++都有struct结构体。C中的struct纯粹是数据和函数的集合。而C++中的struct则相当于另外一类class,与class的区别是,class如果没有关键字,默认成员为私有,struct则默认为公有;如果显式指定私有公有等关键字,则C++的struct和class几乎没有区别。我们来看看C++如何将数据和方法封装在一起。
2016-04-18 20:21:26 629
原创 【C++】Vs2008中使用智能指针
Tr1模块是C++11正式诞生前夕,已经确定加入新标准的C++特性。Vs2008算是C++11标准正式诞生前夕,对C++03和tr1标准支持的最好的一个IDE,是相当经典的一版,很多程序的开发和维护都还是使用vs2008。Vs2008要使用tr1标准,需要安装sp1补丁;在代码中使用tr1标准,需要加入tr1::前缀,如std::tr1::shared_ptr。符合C++11标准的编译器则可以直接
2016-04-15 16:07:16 2853
原创 【机器学习】多元高斯分布下的贝叶斯分类感知器
先来来看看随机连续分布下贝叶斯分类器模型。假设当前要使用贝叶斯分类器进行二分类的判别,数据集有随机分布,图像如下:现在定义代价函数J,其中p1和p2表示已知的二分类出现的先验概率,c11,c12,c21,c22表示对应的经验代价权重参数,这些参数看做常量,公式(Van Trees)有:然后代入多元高斯分布下的条件概率密度函数,m是数据维度(特征数量)。此处只针对二分
2016-04-11 13:06:47 4020 2
转载 【机器学习】机器学习常见算法分类汇总
转自http://www.ctocio.com/hotnews/15919.html,尊重原创机器学习无疑是当前数据分析领域的一个热点内容。很多人在平时的工作中都或多或少会用到机器学习的算法。这里IT经理网为您总结一下常见的机器学习算法,以供您在工作和学习中参考。机器学习的算法很多。很多时候困惑人们都是,很多算法是一类算法,而有些算法又是从其他算法中延伸出来的。这里,我们从
2016-04-11 12:20:58 566
原创 【机器学习】简单感知器
简单感知器由一个线性组合器和硬限幅器(即sgn函数,判断是正数返回1,负数返回-1)组成,线性组合器有m个输入,m个输入权值,一个偏置,图像表述如下:(Simson Haykin)用数学方法表述就是y=∑wixi+b,i=1,2,3…m,如果sgn(y)=+1,则分为第一类,否则分为第二类。感知器一般只做出两类判别。上述表达式可以简写为y=∑wixi,i=1,2,3…m+1,其中w
2016-04-11 12:17:17 1464
转载 【C++】《More Effective C++》读书笔记(转载+修订)
条款1:指针与引用的区别二者之间的区别是:在任何情况下都不能用指向空值的引用,而指针则可以;指针可以被重新赋值以指向另一个不同的对象,但是引用则总是指向在初始化时被指定的对象,以后不能改变。类可以定义一个引用成员,前提是构造函数中会对引用对象进行指定。在以下情况下使用指针:一是存在不指向任何对象的可能性;二是需要能够在不同的时刻指向不同的对象在以下情况使用引用:总是指向一个对象且一旦指
2016-04-08 21:29:51 500
原创 【C++】《Effective C++》读书笔记汇总
我之前边读《Effective C++》边写下每个条款的读书笔记,这一版是C++11之前的版本。这里我将每个条款令我印象深刻的点小结一下。1、C++包括:Plain C(面向过程)、OOP(面向对象)、模板(泛型和模板元编程)、STL(C++标准库)。2、用inline、enum、const代替#define。#define定义的宏,一旦复杂起来,高手都很难掌控。不要带入C的习惯。
2016-04-06 11:14:19 5901 2
原创 【C++】《C++标准程序库》小结第十五章-自定义空间配置器
第十四章是国际化议题,解决不同地区因为文化差异,产生的输入与输出问题。这对于我暂时没有用,而且还有更好的第三方库可以解决这个问题。 (1)怎么使用配置器配置器是容器的内存管理工具,实际的内存分配、初始化、销毁、回收工作由他干。C++的配置器继承自allocator类,这是个模板类可以自己设置内存元素大小,所以我们不用关心到底要分配多少字节。代码效果
2016-04-05 15:17:13 479
原创 【C++】《C++标准程序库》小结第十三章-stream(3)
(十)StringStream Class1、不要用char*版本。2、操作和fstream一模一样成员函数意义str()将缓冲区内容作为string返回str(string)将string设置为缓冲区内容str(“”)删除缓冲区tellg()
2016-04-01 10:31:59 702
原创 【机器学习】朴素贝叶斯分类
一、分类的数学定义:从数学角度来说,分类问题可做如下定义: 已知集合:和,确定映射规则,使得任意有且仅有一个使得成立。(不考虑模糊数学里的模糊集情况)。 其中C叫做类别集合,其中每一个元素是一个类别,而I叫做项集合,其中每一个元素是一个待分类项,f叫做分类器。分类算法的任务就是构造分类器f。 二、贝叶斯统计基础:
2016-03-31 15:51:19 914
原创 【C++】《C++标准程序库》小结第十三章-stream(2)
(五)标准输入函数1、输入函数。cin成员函数读取直到遇到...字符数添加结束符返回get(s,num)EOF,不包括EOF最多num-1是istreamget(s,num,t)t或EOF,不包括t和EOF最多num
2016-03-31 14:17:59 713
原创 【C++】《C++标准程序库》小结第十三章-stream(1)
本章内容太多,分多次写完。这里存在的一个争议就是,是选择标准stream还是传统的C输入输出函数?就性能而言,毫无疑问C函数要高,但是普通的测试下,stream和C函数的性能差距没达到10倍以上,因此普通应用场景下两者并没有区别。stream优势在于使用模板编写,数据通用性强,尤其是可以解决国际化问题。操作便利程度而言,两者各有千秋。总的来说做应用用stream,做底层和高性能用C
2016-03-31 13:55:22 521
原创 【C++】《C++标准程序库》小结第十二章-数值
(一)复数1、复数相关算法少,请移步科学计算库。2、C++中使用复数complex需要#include 。复数普通表现形式为a+bi,也可以通过polar函数转化:complexc1(4.0,3.0);complexc2(polar(5.0,0.75));//极坐标转化,模和幅角注意,complex可以隐式转化到低精度,但反之没有,必须显示。3、complex输入时,需要打
2016-03-30 21:04:37 487
原创 【C++】《C++标准程序库》小结第十一章-String
1、追求性能,底层编程的时候,用char。追求方便安全,应用编程的时候,用string。2、string相当于char的类封装。尽量使用string的成员函数,不要使用外部STL算法函数。3、string::npos相当于string的末尾标记,类似于char的’\0’,类似于STL的coll.end()。注意返回值最好是string::size_type,绝对不可以用unsigned i
2016-03-29 19:07:09 387
原创 【机器学习】最近邻策略:k-means和KNN
假设我们已经利用一堆样本{(x,y)}进行了训练,得到了k个分类和k个分类的重心,那么对于待测数据x’,计算x’到k个分类重心的距离,距离最近的分类y‘即为x’的分类。这是最近邻策略的基本思路,从中衍生了k-means和KNN方法。如何度量距离是一个复杂的问题,一般情况下我们习惯使用欧氏距离来表征分类距离。如果我们要调整n个分类特征的权重,可以修改距离度量的定义;可以将n个分类特征变为特征的函数f
2016-03-23 00:01:07 3935
原创 【C++】《C++标准程序库》小结第十章-特殊容器
(一)stack堆栈a) LIFO后进先出。一般只有三个接口有用:pop(), push(), top()。b) 可以自己制作一个,一般封装deque,原因是deque释放元素就直接释放了内存,符合堆栈特性。 (二)queue队列a) FIFO先进先出。核心接口:push(), pop(), front(), back()。b)
2016-03-21 12:24:34 279
原创 【机器学习】逻辑回归
逻辑回归和线性回归同属于广义线性回归,逻辑回归更倾向于实现二分类的分类器/判别函数。和线性回归一样,逻辑回归需要找到一个判别函数原型,要求判别函数需要满足某些最优化条件,从而求得判别函数。在二分类中,样本变量x对应一个分类y,y只有是或者不是两种类别,可以用1类和0类来表示。对应数理统计知识,样本是随机变量,那么总体的分布就是二项分布。我们希望最终能够把判别函数的结果映射到一个值域在[0,1]
2016-03-21 01:10:15 622
原创 【C++】《C++标准程序库》小结第九章-算法
1、普通算法在,有一部分数值算法在,比如accumulate。2、有很多算法,具有多种特性,比如for_each()算法,既是非变动算法,也是变动算法。对于这些问题不要深究。3、一般情况下,仿函数的operator()应该为const,不然会有很多问题。很多算法都要求仿函数不能改变自身状态。4、下面的表格是手打的,累死了。 函数功能说明
2016-03-19 11:31:26 457 1
原创 【C++】《C++标准程序库》小结八章-仿函数
1、仿函数有很多名字,比如函数对象,functional objects,functor,这些都是指代一个东西。2、仿函数的优势是可以保存状态,其表面实现方式是在class对象内部重载operator()函数,模仿了函数foo()的形式来实现函数功能。比如void foo()转换成functor的基本形式:class FunctionObejectType{public
2016-03-18 22:54:01 423
原创 【C++】《C++标准程序库》小结七章-迭代器
1、基本迭代器类型:输入input,输出output,前向forward,双向bidirectional,随机random-access。2、临时迭代器是可以直接递增、递减的,但是vector,string不行,因为他们的迭代器可能是指针。a) 错误:sort(++coll.begin(), coll.end());b) 正确:vector:
2016-03-18 21:18:54 437
原创 【C++】《C++标准程序库》小结第六章(容器)
总论1、容器中的元素,必须具备以下条件:a) 可以复制,有复制构造、operator=函数(这两个标准上都要求必须写)。因为容器添加的元素是复制的副本,这时候改变任何一个,都不会影响另外一个,故auto_ptr是不可用的。有时候为了节约成本,或者就是希望改变容器元素来相应改变原来的数据,可以放入原始数据的指针,不过一个巨大的问题就是很容易发生资源泄露,所以Effec
2016-03-16 13:23:27 529
原创 【高性能】配置python版本的MPI
安装:首先下载MPI for python 的源码包:mpi4py解压,进入文件夹,编辑mpi.cfg:# Default configuration# ---------------------[mpi] mpi_dir = /usr/local/openmpi#自己的mpi位置,openmpi和mpich均可mpicc
2016-03-11 20:23:20 3231
原创 【高性能】linux加载当前目录的动态库
linux的excutable在执行的时候缺省是先搜索/lib和/usr/lib这两个目录,然后按照ld.so.conf里面的配置搜索绝对路径,linux缺省是不会在当前目录搜索动态库的。windows加载动态库的时候,缺省是首先加载本地目录下的动态库,然后再搜索windows/system和windows/system32目录。windows的动态库搜索顺序,虽然有可能会造成潜在的混乱,但是
2016-03-09 20:18:24 962
原创 【C++】《C++标准程序库》重难点分析(一)~(五)章
(一)关于本书1、一些简介。C++最强大之处在于泛型编程,OO只是一个亮点。要做OOP请去Java\C#。(二)标准库介绍1、C++的特性,很多书都有介绍,略看2、算法复杂度,请看《算法导论》(三)一般概念1、重点是明白异常处理的重要性,这是为什么要用标准库的一大原因。(四)通用工具1、Pairs(对组)是很简单的东西,可以自己做一个。以后的重点是Tuple(元组)
2016-03-09 14:44:22 668
原创 【高性能】Eigen VS Matlab
Eigen是经典的C++开源模板矩阵库,很多大型库都包含对Eigen的支持,对矩阵计算有良好的优化。Matlab是科学计算领域的佼佼者,对矩阵计算有得天独厚的优势。将Matlab算法改编为C++程序,使用Eigen库会方便很多。以下内容转载自Eigen官网,我进行了翻译:// Basic usage// Eigen // Matlab // 注
2016-03-09 14:31:34 2975
原创 【高性能】Eigen矩阵库使用事项
1、Eigen库只有矩阵运算功能。Eigen相对专一,面对四元数、统计、微积分等高级运算功能,我建议还是使用专业的科学运算库。2、四阶或以下的矩阵,尤其是固定大小的矩阵如Eigen::Matrix2i,通常进行了计算优化。3、注意一下自身和非自身的变化:说明自身非自身转置transposeInPla
2016-03-09 14:26:05 11872 2
原创 Matlab绘制跳动的心
相信不少程序猿在情人节,被女票要求用程序语言编写表白程序。我参考网上的资料,用matlab编写了心跳的动画。下图是网上流传的心形数学表达式:我觉得最后一个表达式跟传统的心形是最像的,这个表达式是用极坐标表示的,编写和控制极为方便。第二个心形表达式也比较像,但是这个表达式使用了隐函数,编写并控制起来不容易。由于最后一个心形图案的中心点在十字交叉部分,要让心形图案跳动起来,只需要控制心
2016-03-05 01:02:24 43189 13
原创 【高性能】Matlab的并行计算之spmd
parfor的并行思想是把同一批数据分给for循环中不同的循环体,进行处理。spmd的思想则是不同的数据,用同一个程序处理。当然这个程序内部可以编写针对不同情况的处理代码。spmd的内部实现代码限制很少,spmd的灵活性比parfor要高得多。spmd的使用方法如下:startmatlabpool(2)spmd a = magic(labindex )%代码endclos
2016-03-02 17:23:07 21160 5
原创 【高性能】Matlab的并行计算之parfor
当matlab计算量很大,重复独立的循环计算很多的时候,我们可以使用matlab的并行计算,这里我先试验了parfor并行计算。以下代码仅适合新版的matlab,改编自《实战matlab之并行程序设计》。启动代码:function [pool] = startmatlabpool(size)pool=[];isstart = 0;if isempty(gcp('nocreate'))==1
2016-03-02 16:58:17 29099 6
原创 【高性能】HPC中mpi的启用
Mpi有多个实现版本,我目前接触到的有intelmpi,mpich2,openmpi。其中HPC默认使用的mpi版本是mpich2,客户经常使用的是openmpi。整个HPC需要启用NIS服务来管理整个HPC系统的用户,这样登陆其中节点,可以不输入密码直接登陆HPC内部其他服务器,这样mpi可以方便无阻地启动任意服务器的mpi程序。用户要使用mpich2,首先用自己的账号密码登陆HPC任意
2016-03-02 16:15:40 4804 4
gdb7.1 for windows
2012-08-10
欧拉系统虚拟机安装问题
2023-05-05
基于C++怎么使用neo4j的http api?
2023-05-05
如何用VTK获取视锥八个顶点?
2023-03-18
slurm 任务被kill而没有报错信息,怎么办?
2022-10-13
TA创建的收藏夹 TA关注的收藏夹
TA关注的人