【图像处理】Harris特征点检测
Harris特征点检测
openCV的安装
之前没有接触过openCV的小伙伴需要先在自己的环境下进行安装,因为笔者使用的是Mac系统和Anaconda环境,所以下面这个方案是面向Mac用户的。
12345# Mac系统中Anaconda下安装opencvpip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple# 检测是否安装成功import cv2
基本概念
想要学习角点检测,首先应该知道什么是角点,它的应用场景,以及如何检测某个像素点是否为角点。
角点
严格的说,角点是物体边缘的拐点。在日常生活中,绝大多数的物体都是有棱角的,例如塔尖、三角形的顶角。那么这些有转折的,或者两个物体的交接处,都可以称作是角点。
但实际上,角点到目前为止都还没有明确的数学定义,所以我们只需要简单地认为角点是一个局部极值点,或者是二维图像亮度变化剧烈的点或图像边缘曲线上曲率的极大点。
应用
角点在如今已经广泛使用,如三维重建、图像匹配等工作。
如何判断角点
以该像素点为中心,初始化一个滑动窗口(如3 ×\ti ...
【图像处理】Canny边缘检测
前言
Canny边缘检测的步骤如下:
使用高斯滤波器,以平滑图像,滤除噪声。
计算图像中每个像素点的梯度强度和方向。
应用非极大值抑制,以消除边缘检测带来的杂散相应。(让边缘变瘦)
应用双阈值检测来确定真实的和潜在的边缘。
通过抑制孤立的弱边缘最终完成边缘检测。
高斯滤波器去除图像噪声
图像边缘容易收到噪声的干扰,因此为了避免检测到错误的边缘信息,需要建筑滤波器将图像做一个去噪的处理。滤波可以平滑一些纹理较弱的非边缘区域,以此得到更准确的边缘。
在滤波过程中,我们通过滤波器对像素点周围的像素计算加权平均值,获取最终滤波结果。对于高斯滤波器T,越临近中心的点,权值越大。
滤波器的大小也是可变的,滤波器的核越大,边缘信息对于噪声的敏感度就越低。不过,核越大,边缘检测的定位错误也会随之增加。
通常来说,一个5×5的核能够满足大多数的情况。
梯度大小与方向计算
使用Sobel算子计算图像梯度的幅度。
G=(Gx2+Gy2)θ=arctan(Gy,Gx)G = \sqrt(G_x ^2 + G_y ^ 2) \\
\theta = arctan(G_y, G_x)
G=(Gx2+ ...
【深度学习】GAN
什么是GAN
生成对抗网络(GAN)是一种由生成网络和判别网络组成的深度神经网络架构。通过在生成和判别之间的多次循环,两个网络相互对抗,继而两者性能逐步提升。
生成网络
生成网络(Generator Network)借助现有的数据来生成新数据,比如使用从随机产生的一组数字向量(称为潜在空间 latent space)中生成数据(图像、音频等)。所以在构建的时候你首先要明确生成目标,然后将生成结果交给判别网络做下一步的处理。
判别网络
判别网络(Discriminator Network)试图区分接收的数据属于真实数据还是由生成网络生成的数据,它需要基于实现定于的类别对其进行分类。通常来说,GAN使用在二分类问题上。判别结果为0~1之间的数字,用来表示本次输入被认为是真实数据的可能性。当判定结果为1时,则认为它来自真实数据,反之则属于生成数据。
训练过程
两个网络之间相互竞争,在训练过程中,通常是固定其中一方的参数不改变,然后提升另一方的性能,循环往复。比如说大部分书籍或者视频中提到的艺术品鉴赏。
我们使用下图来简要说明训练过程:
将给定的D维噪声向量ZZZ 作为输入投入生成 ...
【算法提高】链表专题题解汇总
简单
(待补充)
中等
复制带随机指针的链表
Leetcode No.138 复制带随机指针的链表
执行用时:16ms 打败85%
理解题意:深拷贝什么意思?
复制一个结点head,若通过语句Node dup = head,这样就是浅拷贝,只是复制了一个引用变量dup,两个引用变量dup和head指向同一个结点对象。
深拷贝则是复制出一个完全一样的独立的结点对象,深拷贝一个结点head,则必须创建另一个完全一样的独立的新结点对象dup,且head的next和random指向的结点也需要深拷贝到dup的next和random上。
即,若原链表有n个结点,则深拷贝得到的链表有且仅有n个对应的独立的结点副本。
我们使用迭代的方法,思路如下:
遍历原链表的每个结点,对每个结点进行深拷贝。
第一次遍历把每个结点的副本对象创建出来,并把next引用变量设置好。同时把已创建好的结点用哈希表记录,防止重复创建。
第二次遍历把random引用变量设置好即可完成深拷贝。
代码如下:
1234567891011121314151617181920212223242526class Solut ...
【数据分析】数据重构与可视化
数据重构使用函数
使用pd.merge实现数据合并
1234567pandas.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)
left : DataFrame
right : DataFrame or named Series
how : {‘left’, ‘right’, ‘outer’, ‘inner’}, default ‘inner’(设置数据连接的集合操作规则)
left: 返回的结果只包含左列
right: 返回的结果只包含右 ...
【数据分析】数据清洗及特征处理.md
处理缺失值
pandas对象的所有描述性统计信息默认情况下是排除缺失值的。当清洗数据用于分析时,对缺失数据本身进行分析以确定数据收集问题或数据丢失导致的数据偏差通常很重要。
有一些处理NA的方法可以了解一下:
判断值是否为空
1df.head(2).isnull() # 缺失时为true
过滤缺失值dropna
在DataFrame中可以删除所有值均为NA的行 或 列,也可以删除带有NA的行:
123df.head(2).dropna(how='all') # 全部为空才删除df.head(2).dropna(how='all', axis=1)df.head(2).dropna()
假设你只想保留包含一定数量的观察值的行。你可以用thresh参数来表示,keep only the rows at least N non-NA values.保留可用值大于等于N个的行。
12345678910111213df = pd.DataFrame (np.random .randn(8,7))df.iloc[0,:] = np.nandf.ilo ...
【深度学习】优化函数详解(2)
小批量随机梯度下降
概念
在每一次迭代中,梯度下降使用整个训练数据集来计算梯度,因此它有时也被称为批量梯度下降(batch gradient descent)。而随机梯度下降在每次迭代中只随机采样一个样本来计算梯度。
我们还可以在每轮迭代中随机均匀采样多个样本来组成一个小批量,然后使用这个小批量来计算梯度。下面就来描述小批量随机梯度下降。
我们可以通过重复采样(sampling with replacement)或者不重复采样(sampling without replacement)得到一个小批量中的各个样本。前者允许同一个小批量中出现重复的样本,后者则不允许如此,且更常见。
对于这两者间的任一种方式,都可以使用
gt←∇fBt(xt−1)=1∣B∣∑i∈Bt∇fi(xt−1)\boldsymbol{g}_t \leftarrow \nabla f_{\mathcal{B}_t}(\boldsymbol{x}_{t-1}) = \frac{1}{|\mathcal{B}|} \sum_{i \in \mathcal{B}_t}\nabla f_i(\boldsymbol{x}_{ ...
【数据分析】基础知识准备
数据加载
首先在Kaggle上找到对应的竞赛页面,报名参赛下载数据,可以得到了一个train.csv和test.csv文件。
当然,如果你的电脑上已经安装了kaggle的包,当然也可以使用命令行直接下载:
1kaggle competitions download -c titanic
接着载入数据,可以选择使用相对路径或绝对路径,这里将使用绝对路径,将表头修改成中文,索引改为乘客的ID,便于观察。
12345678910111213141516'''----- kaggle_titanic |----- train.csv |----- test.csv----- data_analysis.ipynb'''df = pd.read_csv('kaggle_titanic/train.csv', names = ['乘客ID', '是否幸存', '仓位等级', '姓名', '性别', '年龄 ...