- 博客(322)
- 资源 (17)
- 收藏
- 关注
原创 非局部均值去噪
基本原理该算法来自论文《A non-local algorithm for image denoising》去噪属于图像复原的范畴,通常使用滤波来实现,并且往往是低通(平滑噪声)滤波器。对于单帧图像去噪,使用空间邻域像素来处理,对于多帧图像去噪,则可以考虑时空域相结合的方法,即时间+空间的3DNR方法。简单的平滑滤波器有均值滤波器、高斯滤波器,算法复杂度低,但会导致图像模糊,双边滤波器是性能较好的非线性滤波器,在去噪的同时,保留了较强的纹理细节,缺点是弱的纹理被滤掉了。非局部均值(Non Local M
2021-03-28 13:10:10 741
原创 图像复原之维纳滤波
基本原理图像复原是图像处理的重要组成部分,由于图像在获取和传输过程中通常不可避免的要受到一些噪声的干扰,因此在进行其他图像处理以及图像分析之前,应该尽量将图像复原到其原始真实状态。图像复原的关键问题是在于建立退化模型。图像退化模型如下:维纳滤波器是一种自适应最小均方误差滤波器,它最终的目的是使得复原图像和原始图像的均方误差最小。省去推导过程,给出频率的维纳滤波公式示例演示在下面例子中,我们对退化函数进行了简化,将退化函数置为1,因此维纳滤波公式简化为:#include <opencv2
2021-03-28 12:59:43 3862 1
原创 图像配准之相位配准
基本原理图像配准是图像处理的基本任务之一,用于将不同时间、不同传感器、不同视角及不同拍摄条件下获取的关于同一目标或场景的两幅或多幅图像进行主要是几何意义上的匹配套和的过程。图像配准的基本问题是找出一种图像转换方法,用以纠正图像的形变。造成图像形变的原因多种多样,例如对于遥感图像而言,传感器噪声、由传感器视点变化或平台不稳定造成的透视变化、被拍摄物体的移动、变形或生长等变化、闪电和大气变化,以及阴影和云层遮盖都使图像产生不同形式的形变。正是图像形变原因和形式的不同决定了多种多样的图像配准技术。图像配准方法
2021-03-28 10:30:26 2902
原创 形态学之灰度形态学
与二值形态学相对应另一种形态学运算是灰度形态学。灰度形态学与二值形态学相比,不仅在图像本身的空间尺寸上有一个变化,而且图像本身的灰度值也会发上变化。灰度膨胀(Grayscale Dilation)运算灰度形态学膨胀,在数学上的定义,可以用如下公式表示:根据公式,对灰度形态学可以简单理解为,对于原始图像F中(m, n)坐标的灰度值,分别向右移动(a, b)个单位,再加结构化元素K(a, b)的值,再取其求得的最大值。为了更加直观地了解灰度膨胀的运算过程,假设有一个一维的灰度分布列表和一个一维的结.
2021-03-28 10:25:51 4361
原创 各向异性滤波
基本原理各向异性扩散滤波主要是用来平滑图像的,克服了高斯模糊的缺陷,各向异性扩散在平滑图像时是保留图像边缘的,和双边滤波很像。各向异性扩散也叫P-M扩散,各向异性扩散(Anisotropic diffusion)的算法可以详见论文:《Scale-space and edge detection using anisotropic diffusion》通常我们有将图像看作矩阵的,看作图的,看作随机过程的。各向异性扩散滤波将图像看作热量场了。每个像素看作热流,根据当前像素和周围像素的关系,来确定是否要向周围
2021-03-14 20:26:03 801
原创 双边滤波
基本原理双边滤波是《Bilateral Filtering for Gray and Color Images》论文提出的一种非线性滤波。它是一种结合图像的空间邻近度和像素相似度的折中处理,同时考虑空域信息和像素值相似性,从而达到去噪的同时保留边缘。原理是其滤波器的核由一个与空间距离相关的高斯函数与另一个与像素值距离相关的高斯函数相乘生成。所以对于高斯滤波,仅仅用到空间距离的权重系数核与图像卷积确定中心点的像素。即离中心点越近的点,其权重系数越大。双边滤波加入像素值信息的权重,即在邻域内像数值越接近中
2021-03-14 17:22:22 995
原创 每个程序员都要向特朗普学习
要想搞好一个好的生意或者项目或者计划,就要对身边的人各种忽悠,并且一定要“趁人之危”。投最少的钱,不要冒风险。(当然忽悠和“趁人之危”,在特朗普看来是生存法则,不是坏事。)这几天,美国大选很热闹。很多人都在看特朗普的笑话。不过,我们除了吃瓜,还要学习别人的优点。特朗普常常为了搞成一个好的生意,对身边的人各种忽悠。这里讲个他的故事,看看他怎么用最低风险获得最大的收益。70年代末,特朗普在纽约发现一经营不善又位置极好的酒店commondore.。当时经济形势很差,酒店老亏损。特朗普想,经济差亏损,真是我.
2020-11-15 20:40:24 245
原创 4.集成学习之3.Stacking
分层模型集成框架stacking(叠加算法)Stacking集成算法可以理解为一个两层的集成,第一层含有一个分类器,把预测的结果(元特征)提供给第二层, 而第二层的分类器通常是逻辑回归,他把一层分类器的结果当做特征做拟合输出预测结果。过程如下图:标准的Stacking,也叫Blending如下图:但是,标准的Stacking会导致信息泄露,所以推荐以下Satcking算法:1. 简单堆叠3折CV分类:## 1. 简单堆叠3折CV分类from sklearn import datasets
2020-09-19 17:24:39 1511
原创 4.集成学习之2.Boosting
基于boosting思想的自适应增强方法Adaboost最初的想法是由Robert E. Schapire在1990年提出的,这个想法叫做自适应增强方法。与Bagging相比,Boosting思想可以降低偏差。如更新权重如下图:我们用单一决策树建模:## 我们用单一决策树建模:from sklearn.ensemble import AdaBoostClassifiertree = DecisionTreeClassifier(criterion='entropy',random_state
2020-09-19 17:17:30 190
原创 4.集成学习之1.Bagging
基于bagging思想的套袋集成技术套袋方法是由柳.布莱曼在1994年的技术报告中首先提出并证明了套袋方法可以提高不稳定模型的准确度的同时降低过拟合的程度(可降低方差)。套袋方法的流程如下:注意:套袋方法与投票方法的不同:投票机制在训练每个分类器的时候都是用相同的全部样本,而Bagging方法则是使用全部样本的一个随机抽样,每个分类器都是使用不同的样本进行训练。其他都是跟投票方法一模一样!对训练集随机采样分别基于不同的样本集合训练n个弱分类器。对每个弱分类器输出预测结果,并投票(如下图)
2020-09-06 10:08:26 401
原创 4.集成学习之0.Voting
对比过kaggle比赛上面的top10的模型,除了深度学习以外的模型基本上都是集成学习的产物。集成学习可谓是上分大杀器,今天就跟大家分享在Kaggle或者阿里天池上面大杀四方的数据科学比赛利器—集成学习。什么是集成学习 正所谓“三个臭皮匠赛过诸葛亮”的道理,在机器学习数据挖掘的工程项目中,使用单一决策的弱分类器显然不是一个明智的选择,因为各种分类器在设计的时候都有自己的优势和缺点,也就是说每个分类器都有自己工作偏向,那集成学习就是平衡各个分类器的优缺点,使得我们的分类任务完成的更加优秀。 在.
2020-09-06 10:04:15 721
原创 应用篇之线程基础
基本概念 理解线程是至关重要的,因为每个进程至少都有一个线程。我们在讨论了进程实际上有两个组成部分:一个进程内核对象和一个地址空间。类似地,线程也有两个组成部分:一个是线程的内核对象,操作系统用它管理线程。系统还用内核对象来存放线程统计信息的地方。一个线程栈,用于维护线程执行时所需的所有函数参数和局部变量。进程是惰性。进程从来不执行任何东西,它只是一个线程的容器。线程必然是在某个进程的...
2020-04-30 22:52:00 216
原创 DLL系列5.延迟载入DLL
基本概念 为了让DLL更易于使用, Microsoft Visual C++提供了一个很棒的特性,即延迟载入DLL。一个延迟载入的DLL是隐式链接的,系统一开始不会将该DLL载入,只有当我们的代码试图去引用DLL中包含的一个符号时,系统才会实际载入该DLL。延迟载入DLL在下列情况下非常有用。如果应用程序使用了多个DLL,那么它的初始化可能会比较慢,因为加载程序要将所有必需的DLL映射到进...
2020-04-30 22:40:17 773
原创 DLL系列6.函数转发器
基本概念 函数转发器(function forwarder)是DLL输出段中的一个条目,用来将一个函数调用转发到另一个DLL中的另一个函数。例如,如果用Visual C++的DumpBin工具来查看Windows的Kernel32.dll,那么我们会看到类似下面的输出:C:\Windows\System32>DumpBin -Exports Kernel32.dll (some out...
2020-04-30 22:33:50 1236 1
原创 应用篇之extern“C”
基本概念 C++的项目源码中,经常会看到下面的代码:#ifdef __cplusplusextern "C" {#endif /*...*/ #ifdef __cplusplus}#endif 这里重点介绍extern “C”。在介绍extern "C"之前,简单说下在这里为什么需要#ifdef _cplusplus/#endif _cplusplus。因为C语言中不支...
2020-03-05 20:43:43 395
原创 应用篇之dll lib pdb和头文件
建立一个真正的工程时,一般我们都会用到第三库或者自己建的库。这时候我们需要配置用到的头文件、lib以及dll。另外我们建立自己的静态库或者动态库时,会生成lib甚至dll。它们是什么,有什么作用,基本概念 h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的。h头文件 文件内容一般是声明,预编译时在包含该头文件的文件里展开(即全部复制过去)。如果没有库的头文件里的声明...
2020-03-05 20:37:46 3115
原创 Phong光照模型
基本概念 什么是光照模型?根据光学物理中的有关规律,计算出物体表面上任何一点投向观察者眼中的光的亮度大小和色彩组成的公式,从而在显示器上生成所显示的真实感图形。简单光照模型假设物体不透明,那么物体表面呈现的颜色仅由其反射光决定。反射光由环境反射、漫反射和镜面反射。所以Phong光照模型的计算公式如下:给出一张效果图,Phong使得二维图片有了立体感和真实感。Phong光照模型存在...
2020-03-05 20:33:45 2554 1
原创 2.6CNN实战之人脸关键点识别
之前做一个医学图像特征点标注的项目,就是先从人脸关键点识别开始入门。基本概念 这是Kagge上一个比赛:Facial Keypoints Detection,我们这里使用CNN。大体内容如下图,识别人脸的15个关键点,每个关键点用x和y表示,所以神经网络的输出个数是30。'left_eye_center_x', 'left_eye_center_y','right_eye_cente...
2020-02-23 20:10:48 791
原创 4.模型评估之ROC和AUC
基本概念 ROC全称是“受试者工作特征”(Receiver Operating Characteristic)曲线。ROC曲线的纵轴是“真正率”(True Positive Rate, TPR),横轴是“假正例率”(False Positive Rate, FPR)。TPR=TP/(TP+FN)FP...
2020-02-08 11:39:40 775
原创 4.特征选择
基本概念 对当前学习任务有用的特征称为“相关特征”(relevant feature);没有用的特征称为“无关特征”(irrelevant feature)。从给定的特征集合中选择出相关特征子集的过程,称为“特征选择”(feature selection)…常用的特征选择方法大致可以分为:过滤式(fil...
2020-02-07 10:39:47 307
原创 1.决策树
基本概念 决策树(Decision Tree)是一种用来分类和回归的无参监督学习方法。其目的是创建一种模型从数据特征中学习简单的决策规则来预测一个目标变量的值。顾名思义,决策树是基于树结构进行决策的。决策过程中提出的每个判定问题都是对某个属性的“测试”。如下图所示。其基本流程遵循简单而直观的“分而治...
2020-02-06 14:17:43 635 1
原创 5.实战之参数调优
基本概念 在构建模型时,调参(超参数)是极为重要的一个步骤,因为只有选择最佳的参数才能构建一个最优的模型。但是应该如何确定参数的值呢?一般可以通过交叉验证的方法。什么是交叉验证?我K-折交叉验证为例。当K=2时,就是我们说的2-折交叉验证;当K=5时,就是5折-交叉验证。5-折交叉验证的原理,如下图所示...
2020-02-05 14:06:52 413
原创 图像分割之大津法Otsu
基本概念 大津法(简称Otsu)由1979年由日本学者大津提出的,是一种自适应阈值确定的方法,相关文献链接。它是根据图像的灰度特性, 将图像分为前景和背景两个部分,当取最佳阈值时,二者之间的方差应该是最大的。论文精华如下。 &nb...
2020-02-04 13:15:40 3683
原创 3.样条曲线之NURBS
基本概念 有理函数是两个多项式之比。因此,有理样条(rational spline)是两个样条函数之比。例如,有理B样条曲线可以使用向量描述为: 通常,图像设计软件包使用非均匀节点向量表达式来构造有理B样条...
2020-02-04 13:07:45 1796 1
原创 3.样条曲线之B样条曲线
B样条曲线 B样条是使用更广泛的逼近样条类。B样条有两个贝塞尔样条所不具备的优点:1、B样条多项式次数可独立于控制点数目(有一定限制);2、B样条允许局部控制曲线或曲面。缺点是B样条比贝塞尔样条更复杂。我们可以把沿B样条曲线的坐标位置的计算表示写成混合函数公式的表达式: &nb...
2020-02-04 12:23:47 4817
原创 3.多边形曲线简化之Douglas-Peucker算法
Douglas-Peucker算法 根据具体情况,减少表示多边形曲线的点,可以减少内存,同时对曲线进行操作的时间。这里介绍经典的Douglas–Peucker算法,相关文献:Algorithms for the reduction of the number of pointsrequired to ...
2020-02-03 14:38:14 6205
原创 Effective C++之9.杂项讨论
条款53:不要轻忽编译器的警告严肃对待编译器发出的警告信息。努力在你的编译器的最高警告级别下争取“无任何警告”的荣誉。不要过度依赖编译器的报警能力,因为不同的编译器对待事件2地态度并不相同。一旦移植到另一个编译器上,你原本依赖的警告信息有可能消失。class B{public: virtual void f() const; };class D : public B{...
2020-01-31 19:34:44 166
原创 Effective C++之2.构造析构赋值运算
条款05:了解C++默默编写并调用哪些函数编译器可以暗自为class创建default构造函数、copy构造函数、copy assignment操作符,以及析构函数。条款06:如不想使用编译器自动生成的函数,就应该明确拒绝为了驳回编译器暗自提供的机能,可将相应的成员函数声明为private并且不予实现。使用像Uncopyable这样的base class 也是一种做法。不过C++11开始,可...
2020-01-31 15:53:16 179
原创 Effective C++之1.让自己习惯C++
条款01:视C++为一个语言联邦C++高效编程守则视状况而变化,取决于你使用C++哪一部分。C、Object-Oriented C++、Template C++和STL。条款02:尽量以const,enum,inline替换#define对于单纯常量,最好以const对象或enums替换#define。class GamePlayer{private: static const in...
2020-01-31 15:51:21 182
原创 应用篇之DLL的静态调用和动态调用
区别静态调用(static call)和动态调用(dynamic call)。静态调用 静态调用,即 Load-time Dynamic Linking。正如我们常用的配置方式,同时需要头文件、LIB和DLL文件,缺一不可。动态调用 &...
2020-01-31 15:44:42 2570 1
原创 0.算法
什么是算法 在学习算法之前,先弄清楚算法是什么,能做什么。刚开始我也迷惑《算法导论》或者《数据结构与算法》中算法与图像算法工程师、AI算法工程师中算法的关系。后来才能明白前者是通用类算法,或者基础类算法,后者是专业类算法,需要有相关的专业知识,但是代码实现或优化却需要通用类算法作为基础。比如图形算法中补...
2020-01-31 15:10:49 234
原创 1.算法设计方法之穷举法
基本概念 穷举法(穷举搜索法、枚举法, Brute Force)是一种在有限的解空间(解空间至少在理论上是有限的)内按照一定的策略进行查找的思想。穷举法的基本思想就是以下两个步骤:确定问题的解(状态)的定义,解空间的范围以及正确解的判定条件。根据解空间的特点选择搜索策略,一一检验解空间中的候选解是...
2020-01-31 15:08:14 1403
原创 算法问题之线性规划(单纯形算法)
与网上大多数单纯形算法不同,本文基本遵循《算法导论》这本书的内容。基本概念 在给定有限资源和竞争约束条件下,很多问题都可以表述为最大化或最小化某个目标。如果可以把目标指定为某些变量的一个线性函数,而且如果可以把资源的约束指定为这些变量的等式或不等式,则得到一个线性规划问题(linear-progr...
2020-01-31 15:03:12 2068
原创 2.0树
树 树(Tree)是n(n>=0)个结点的有限集。n=0时 称为空树。在任意一棵非空树上:(1)有且仅有一个特定的称为根(root)的结点;(2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1、T2、…、Tm,其中每个集合本身又是一棵树,并且称为根的子树(SubTree)...
2020-01-29 16:04:51 247
原创 1.4哈希表HashTable
基本概念 哈希表由键和值组成,就是Pyhthon里面的字典Dict。C++11加入unordered_map了,其相当于Java中的HashMap。而hash_map属于非标准容器。示例演示 下面以领扣(L...
2020-01-29 16:00:49 171
原创 1.3串
串 串(string)是由零个或多个字符组成的有限序列,又名字符串。模式匹配 子串的定位操作通常称作串的模式匹配1、朴素模式匹配算法  ...
2020-01-29 15:58:57 160
原创 1.2队列
基本概念 队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。示意图如下:示例演示 这里以领扣的622. 设计循环队列理解队列。这里用数组来解题。class MyCircular...
2020-01-29 15:53:42 182
原创 1.1栈
一、栈 栈(stack)是限定仅在表尾进行插入和删除操作的线性表。软件的撤销(undo)功能,就是用栈来实现的。栈的插入操作(进栈)和删除操作(出栈),如下图所示。栈的应用 栈的一个重要应用...
2020-01-29 15:51:16 209
原创 1.0线性表之链表
基本概念 链表有单链表和双链表,二者区别如下:示例演示 这里以领扣的206. 反转链表理解链表。/** * Definition for singly-linked list. * struct L...
2020-01-29 15:48:12 133
原创 1.0线性表
一、基本概念 线性表是零个或多个数据元素的有限序列。数学表达如下图所示:二、详细分析1、顺序存储结构 线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。...
2020-01-29 15:46:03 170
Debugging Tools for Windows
2017-09-03
Microsoft Visual C++ 2010 Redistributeble
2016-06-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人