精华内容
下载资源
问答
  • 时序数据数据预处理、特征提取代码。分段特征、统计特征、熵特征
  • matlab时域频域信号特征提取资料整合

    万次阅读 多人点赞 2019-09-28 15:31:44
    1 前言 最近在做一个项目,需要将声纳信号中的特征提取出来进行分析。...1、首先,在特征提取之前需楼主明确是怎样的信号,怎样的应用,怎样的场景,因为针对不同应用和场景选择的特征提取也不近相同。 ...

    1 前言

    最近在做一个项目,需要将声纳信号中的特征都提取出来进行分析。资料查到头秃终于整合出来了些东西,记录一下。

    由于不是专业人员,如果发现任何错误请不要大意的附在评论区,我会及时修改,谢谢!

    2 思路

    思路这段引用自知乎大佬aresmiki的回答,我觉得OK。

    1、首先,在特征提取之前需楼主明确是怎样的信号,怎样的应用,怎样的场景,因为针对不同应用和场景选择的特征提取也不近相同。

    2、信号特征的提取往往都是用最简单有效的参数表示信号中的信息,这是根本目的。

    3、针对不同后端模型需要确定特征维度。

    4、开始特征提取前,信号往往需要做一些预处理,如滤波、去均值、去异常等等。

    特征提取有哪些方法:

    1、拿到时间域一维信号,简单统计和运算可以得到的特征有:均值,方差,均方根,峰值因子,峭度系数,波形因子,裕度因子、脉冲因子

    2、估计--分布参数一般服从某一类分布;

    3、频域,特征频率,均方频率,重心频率,频率方差

    4、小波方法提取的系数,小波滤波后的特征频率等等;

    5、信号,谱熵,排列熵,小波熵,EMD熵,包络谱熵等;

    6、谱峭度,快速谱峭度、小波谱峭度等;

    7、基于数学工具和降维的特征,如PCA,矩阵特征向量,矩阵的秩,特征根,SVD-奇异值、ICA等等;

    8、一些基于距离的度量、范数、马氏距离、分形参数,同胚流行等等;

    9、任何能表征信号特征的自定义参数均可以,注意有意义有时是结合实际需求的。

    3 预处理

    matlab的波形预处理还是很人性化的,具体说来“Signal Analyzer”工具箱好像就够用了,至于其他的工具箱大家也可以看看。

    这个工具箱在matlab顶上点选【APP】之后能找到,它的教程在官网上也很清楚了,传送门附上:点我传送

    这个网站里关于“Signal Analyzer”工具箱的使用教程在【使用Signal Analyzer App】超链接下。其他超链接里的内容也可以逛逛,说不定对你有些启发。

    下面的代码可以参考:

    %%  初始化
    clear
    clc
    
    %%  读取文件
    [sonar,fs] = audioread('test.wav');    %采样频率
    
    %%  滤波处理
    sonar = sonar - mean(sonar);    %去直流分量
    sonar = lowpass(sonar,0.5,'Steepness',0.85,'StopbandAttenuation',60);       %低通滤波
    sonar = highpass(sonar,0.5,'Steepness',0.85,'StopbandAttenuation',60);      %高通滤波

    4 时域特征提取

    %%  数据特征提取
    [nframes,nchannels] = size(sonar);  %采样点数与声道数
    time = nframes / fs;   %采样时间 = 采样总点数 / 每秒采样点数
    
    %%  双声道时域信息提取
    max_data = max(sonar);   %最大值
    min_data = min(sonar);   %最小值
    median_data = median(sonar);    %中位数
    mean_data = mean(sonar);     %平均值
    pk_data = max_data - min_data;     %峰差
    avg_data = mean(abs(sonar));     %整流平均值_绝对值的平均值
    var_data = var(sonar);      %方差
    sd_data = std(sonar);    %标准差
    ku_data = kurtosis(sonar);      %峭度
    sk_data = skewness(sonar);      %偏度
    rm_data = rms(sonar);       %均方根
    
    %%  左声道时域
    l_max = max_data(1);
    l_min = min_data(1);
    l_median = median_data(1);
    l_mean = mean_data(1);
    l_pk = pk_data(1);
    l_avg = avg_data(1);
    l_var = var_data(1);
    l_sd = sd_data(1);
    l_ku = ku_data(1);
    l_sk = sk_data(1);
    l_rm = rm_data(1);
    l_S = l_rm / l_avg;    %均方根因子
    l_C = l_pk / l_rm;     %峰值因子
    l_I = l_pk / l_avg;    %脉冲因子
    l_xr = mean(sqrt(abs(sonar(1))))^2;
    l_L =  l_pk/ l_xr;     %裕度因子
    
    %%  右声道频域
    r_max = max_data(2);
    r_min = min_data(2);
    r_median = median_data(2);
    r_mean = mean_data(2);
    r_pk = pk_data(2);
    r_avg = avg_data(2);
    r_var = var_data(2);
    r_sd = sd_data(2);
    r_ku = ku_data(2);
    r_sk = sk_data(2);
    r_rm = rm_data(2);
    r_S = r_rm / r_avg;    %均方根因子
    r_C = r_pk / r_rm;     %峰值因子
    r_I = r_pk / r_avg;    %脉冲因子
    r_xr = mean(sqrt(abs(sonar(2))))^2;
    r_L =  r_pk/ r_xr;     %裕度因子

    5 频域特征提取

    这块写的我也没啥自信了,毕竟是根据网上东拼西凑的资料写出来的。

    %%  双声道频域信息提取
    [fft_sonar,f_range] = positiveFFT(sonar,fs);  
    N = length(fft_sonar);      %fft采样点数
    subplot(5,2,5);
    fft_amp = abs(fft_sonar);   %振幅(幅频特性)
    stem(f_range,fft_amp);  %x-正频率;y-振幅
    title('频域声纳波形');
    fft_phase = angle(fft_sonar);   %相频特性
    subplot(5,2,6);
    plot(f_range,fft_phase);
    title('相频特性图')
    
    amp_max = max(fft_amp);     %振幅最大值
    amp_min = min(fft_amp);     %振幅最小值
    amp_median = median(fft_amp);   %振幅中位数
    amp_mean = mean(fft_amp);       %振幅平均值
    amp_pk = amp_max - amp_min;     %振幅峰差
    amp_mph = amp_pk * 0.75;           %振幅峰值阈值,阈值为75%的振幅峰差
    %[amp_pkfs,amp_pks] = findpeaks(fft_amp,'minpeakheight',amp_mph);
    %amp_pkfs = amp_pkfs / N * fs/2;
    amp_pks = [];   %振幅峰值
    amp_pkfs = [];  %振幅峰值对应的频率
    for i = 1:N
        if amp_mph < fft_amp(i)
            amp_pks = [amp_pks,fft_amp(i)];
            amp_pkfs = [amp_pkfs,i / N * fs / 2];
        end
    end
    
    avg_fs = fs*[1:N] / N;
    avg_fft = 2 * fft_amp / N;
    
    amp_fc = sum(avg_fs .* avg_fft) / sum(avg_fft);     %重心频率
    amp_msf = sum(avg_fs.^2 .* avg_fft) / sum(avg_fft);    %均方频率
    amp_rmsf = sqrt(amp_msf);   %均方根频率
    amp_vf = sum((avg_fs - amp_fc).^2 .* avg_fft) / sum(avg_fft);  %频率方差
    amp_rvf = sqrt(amp_vf);     %频率标准差

    6 功率谱

    %%  双声道功率谱信息提取
    power = abs(fft_sonar).^2 / N;      %功率 = 傅里叶变换^2 / 区间长度,fft的幂
    subplot(5,2,7);
    plot(f_range,power);
    title('功率谱');
    power_y = 10*log10(power);      %放大低频
    power_y(1) = mean(power_y);     %去除直流影响
    subplot(5,2,8);
    plot(f_range,power_y);
    title('放大低频的功率谱');
    
    power_max = max(power);     %功率最大值
    power_min = min(power);     %功率最小值
    power_median = median(power);       %功率中位数
    power_mean = mean(power);           %功率平均值
    power_snr = 10*log10(power_max / (sum(power) - power_max));     %信噪比
    power_obw = obw(sonar,fs);      %占用带宽

    7 倒谱

    %%  双声道倒频谱信息提取
    cepstrum = real(ifft(log(abs(fft(sonar(:,1))))));
    during_time = 1/fs:1/fs:time;
    subplot(5,2,9);
    plot(during_time,cepstrum,'color',[29/255 176/255 184/255]);ylim([0 0.01]);
    title('左声道倒频谱');
    cepstrum = real(ifft(log(abs(fft(sonar(:,2))))));
    during_time = 1/fs:1/fs:time;
    subplot(5,2,10);
    plot(during_time,cepstrum,'color',[86/255 163/255 108/255]);ylim([0 0.01]);
    title('右声道倒频谱');

     

    展开全文
  • sift、lbp、hist、color、hog等特征提取方法
  • 主要讲解数据挖掘 中用于分类的时序数据特征提取方法,很好的学习资料
  • 时间序列数据的特征提取

    千次阅读 2020-04-03 15:56:17
    另外一种方法就是来从时间序列中提取特征从而将这些特征用在有监督的模型上。在这篇文章中,我们来看下如何使用tsfresh包自动的提取时间序列数据。 这份数据的来源是 。这个网站中提供对很多数据集有高精度的模型,...

    CDA数据分析师 出品

    当你想对时间序列数据做分类时,有两种选择,一个是用时间序列特定的方法,比如说说LSTM模型。另外一种方法就是来从时间序列中提取特征从而将这些特征用在有监督的模型上。在这篇文章中,我们来看下如何使用tsfresh包自动的提取时间序列数据。

    这份数据的来源是 。这个网站中提供对很多数据集有高精度的模型,如何有兴趣的,可以去详细了解一下。时间序列比一般标准的目标要难一些,这是因为在时间序列里的数据本身每个样本就不是独立的,两个时间上月接近的样本,就越有相关性。比如说温度,如果今天的温度问20度,那明天更加有可能是15或者25度,而不是5或者35度。

    这表明这我们不能用常见的分类器来拟合数据,因为对于普通的分类器来说,数据的假设前提都是需要是样本和样本是独立的。并且更重要的是,有的和时间相关的数据集有更加复杂的结构,一个样本包含了多个特征,比如说温度,湿度,分速等等。

    虽然说时间序列的数据很特别,但是我们可以使用特征提起的方法将一个序列降低到一个点。比如说,如果我们现在是在对一个月内的天气相关的数据做处理,我们可以使用以下多个特征:

    • 最小最大温度
    • 温度平均值
    • 温度方差
    • 最小最大湿度

    这里只是给出了几个例子而已,当然了这里可以有很多种特征,将他们全部列举出来会特别麻烦,幸运的是,有一个tsfresh包,可以自动的提取出很多特征。

    tsfresh包在提取出的众多的特征中,需要选取其中最为相关的,最具有预测能力的特征。并且为了防止过拟合,需要首先对数据集做切分,并且只对训练集做特征选择,否则会造成过拟合的问题。tsfresh包使用的是成对检验法来做特征选择的。

    我们先来从 数据列表列提取3个时间序列数据集,FordA, FordB, 和Wafre.并且这些数据集中提取特征。首先我们需要将这些1维的数据给上下拼接起来。

    In [9]: d.head()Out[9]: 0 1 2 30 1.01430 1.0143 1.01430 1.014301 -0.88485 -1.0375 -0.97771 -1.016902 0.58040 0.5804 0.59777 0.597773 -0.88390 -1.0371 -0.97998 -1.012104 1.10500 1.2856 1.19630 1.25610

    需要使用stack做一次拼接

    d = d.stack()d.index.rename([ ‘id’, ‘time’ ], inplace = True )d = d.reset_index()

    得出以下的结果

    In [11]: d.head()Out[11]: id time 00 0 0 1.01431 0 1 1.01432 0 2 1.01433 0 3 1.01434 0 4 1.0143

    特征提取的工作量是非常大的,所以tsfresh使用分布计算的方法来高效的做特征提取。另外一种方式就可以直接设置n_jobs为1。具体代码为以下

    f = extract_features( d, column_id = “id”, column_sort = “time” )# Feature Extraction: 20it [22:33, 67.67s/it]

    这个时候f中有一些特征是空值,可以使用tsfresh提供的impute函数过滤掉这些特征

    impute( f )assert f.isnull().sum().sum() == 0

    当做特征选择的时候,有一个fdr_level超参数,这指的是所有不相关特征占总体的理论期望阈值,默认值为5%,也就是从生产的特征中,删除掉最不相关的特征,且这部分特征占总比的5%。有的时候我们还是需要加大这个值到0.5,甚至0.9,从而可以选取最重要的特征,并且防止纬度灾难。

    In [2]: run select_features.pyloading data/wafer/features.csvselecting features…selected 247 features.saving data/wafer/train.csvsaving data/wafer/test.csv

    当数据训练好之后,则就可以开始使用逻辑回归等分类器来对模型做拟合了。

    展开全文
  • 时间序列数据特征提取TsFresh

    时间序列数据特征提取 TsFresh

    简介

    Tsfresh(TimeSeries Fresh)是一个Python第三方工具包。 它自动计算大量的时间序列数据的特征。此外,该包包含评估这些特征对于回归或分类任务的解释能力和重要性的方法。无论是基于时序数据的分类还是预测,作为特征提取的工具,tsfresh将会是一个不错的选择。

    安装

    使用pip安装即可。

    pip install tsfresh
    

    简单使用

    数据集

    该包提供了一个机器人故障的数据集,可以加载用于尝试使用。(这个数据集不大)点击链接下载后放置到该包配置的data文件夹下(user文件夹中,实在找不到数据集可以私戳我)。

    编辑环境

    我这里使用Jupyter Notebook,其实什么环境都是可以的。

    教程步骤

    导入数据集

    import tsfresh
    from tsfresh.examples.robot_execution_failures import download_robot_execution_failures, load_robot_execution_failures
    download_robot_execution_failures()
    timeseries, y = load_robot_execution_failures()
    

    数据探索

    • 训练数据
      对于特征集,id是不同的机器人标识,F_x到T_z是时序数据标识,也就是说,对于F_x这个特征,id为1的机器人有15个数据记录,按照time列的大小排序,其余F_y等也是如此。(注意:有时候时序数据不会这么友好,而是在一条记录中给出的
    • 测试数据
      对于标签集,利用id标识某个机器人是否故障。
      特征工程
      通过如下代码提取时间特征。
    from tsfresh import extract_features
    extraced_features = extract_features(timeseries, column_id='id', column_sort='time')
    extraced_features.head()
    

    提取过程会实时显示进度,应该是使用tqdm模块。

    提取结果如下图所示。

    可以看到提取特征之后id相同的特征序列合一了,但是每一个id的数据列数非常大,这些就是提取得到的特征。如id=1的数据关于F_x有15个数据,现在对着15个数据做统计学处理得到15个数据的平均值、方差等,每个值都是一列,其他F_y等也是如此,所以维度会很大。

    简单过滤
    不是所有统计值都有意义的,观察特征提取的数据集可以发现有很多无意义的控制,可以删除。(根据y集将相关性低的去除),代码如下。

    from tsfresh import select_features
    from tsfresh.utilities.dataframe_functions import impute
    impute(extraced_features)
    filtered_features = select_features(extraced_features, y)
    filtered_features.head()
    

    上述代码的结果为从4764列减少到了631列,这个降维还是比较有效的。

    直接提取加过滤
    可以使用如下代码。

    from tsfresh import extract_relevant_features
    directed_features = extract_relevant_features(timeseries, y, column_id='id', column_sort='time')
    directed_features.head()
    

    结果和上面是一致的,现在你可以使用特征提取的数据集去训练模型了。

    补充说明

    只是按照官方文档说明了tsfresh最浅显的功能,事实上,这个包特征提取能力要强大太多了。更详细的内容可以查看官方教程(英文版,可以使用Chrome自带的翻译)。

    展开全文
  • 图像处理特征提取

    万次阅读 2018-09-04 16:10:04
    图像处理特征提取 知乎上看到一个话题—— 目前火热的 Deep Learning 会灭绝传统的 SIFT / SURF 特征提取方法吗? 由于之前研究过SIFT和HOG这两种传统的特征提取方法,故本篇文章先对SIFT和HOG作一综述...

    图像处理之特征提取

    知乎上看到一个话题——
    目前火热的 Deep Learning 会灭绝传统的 SIFT / SURF 特征提取方法吗?


    由于之前研究过SIFT和HOG这两种传统的特征提取方法,故本篇文章先对SIFT和HOG作一综述,并比较二者优缺点。之后,将SIFT和HOG同神经网络特征提取做一对比,浅谈对上述问题的看法。如果能写得快一些,再简单介绍其他几种传统的特征提取的方法——SURF、ORB、LBP、HAAR等等。


    目录

    [1] SIFT(尺度不变特征变换)
    [2] HOG(方向梯度直方图)
    [3] SIFT和HOG的比较
    [4] SIFT/HOG与神经网络特征提取的比较
    [5] 其他传统特征提取的方法(SURF、ORB、LBP、HAAR)


    先对几个概念和问题做一个解释:

    • 图像为什么要灰度化?
    1. 识别物体,最关键的因素是梯度(SIFT/HOG),梯度意味着边缘,这是最本质的部分,而计算梯度,自然就用到灰度图像了,可以把灰度理解为图像的强度。
    2. 颜色,易受光照影响,难以提供关键信息,故将图像进行灰度化,同时也可以加快特征提取的速度。
    • 仿射不变性

    平面上任意两条线,经过仿射变换后,仍保持原来的状态(比如平行的线还是平行,相交的线夹角不变等)

    • 什么是局部特征?局部特征应该具有的特点?

    局部特征从总体上说是图像或在视觉领域中一些有别于其周围的地方;局部特征通常是描述一块区域,使其能具有高可区分度;局部特征的好坏直接会决定着后面分类、识别是否会得到一个好的结果。

    局部特征应该具有的特点: 可重复性、可区分性、准确性、有效性(特征的数量、特征提取的效率)、鲁棒性(稳定性、不变性)。


    [1] SIFT(尺度不变特征变换)

    1.1 SIFT特征提取的实质

    在不同的尺度空间上查找关键点(特征点),并计算出关键点的方向。SIFT所查找到的关键点是一些十分突出、不会因光照、仿射变换和噪音等因素而变化的点,如角点、边缘点、暗区的亮点及亮区的暗点等。

    1.2 SIFT特征提取的方法

    1. 构建DOG尺度空间:

    模拟图像数据的多尺度特征,大尺度抓住概貌特征,小尺度注重细节特征。通过构建高斯金字塔(每一层用不同的参数σ做高斯模糊(加权)),保证图像在任何尺度都能有对应的特征点,即保证尺度不变性

    2. 关键点搜索和定位:

    确定是否为关键点,需要将该点与同尺度空间不同σ值的图像中的相邻点比较,如果该点为max或min,则为一个特征点。找到所有特征点后,要去除低对比度和不稳定的边缘效应的点,留下具有代表性的关键点(比如,正方形旋转后变为菱形,如果用边缘做识别,4条边就完全不一样,就会错误;如果用角点识别,则稳定一些)。去除这些点的好处是增强匹配的抗噪能力和稳定性。最后,对离散的点做曲线拟合,得到精确的关键点的位置和尺度信息。

    3. 方向赋值:

    为了实现旋转不变性,需要根据检测到的关键点的局部图像结构为特征点赋值。具体做法是用梯度方向直方图。在计算直方图时,每个加入直方图的采样点都使用圆形高斯函数进行加权处理,也就是进行高斯平滑。这主要是因为SIFT算法只考虑了尺度和旋转不变形,没有考虑仿射不变性。通过高斯平滑,可以使关键点附近的梯度幅值有较大权重,从而部分弥补没考虑仿射不变形产生的特征点不稳定。注意,一个关键点可能具有多个关键方向,这有利于增强图像匹配的鲁棒性

    4. 关键点描述子的生成:

    关键点描述子不但包括关键点,还包括关键点周围对其有贡献的像素点。这样可使关键点有更多的不变特性,提高目标匹配效率。在描述子采样区域时,需要考虑旋转后进行双线性插值,防止因旋转图像出现白点。同时,为了保证旋转不变性,要以特征点为中心,在附近领域内旋转θ角,然后计算采样区域的梯度直方图,形成n维SIFT特征矢量(如128-SIFT)。最后,为了去除光照变化的影响,需要对特征矢量进行归一化处理。

    1.3 SIFT特征提取的优点

    1. SIFT特征是图像的局部特征,其对旋转、尺度缩放、亮度变化保持不变性,对视角变化、仿射变换、噪声也保持一定程度的稳定性;
    2. 独特性(Distinctiveness)好,信息量丰富,适用于在海量特征数据库中进行快速、准确的匹配;
    3. 多量性,即使少数的几个物体也可以产生大量的SIFT特征向量;
    4. 高速性,经优化的SIFT匹配算法甚至可以达到实时的要求;
    5. 可扩展性,可以很方便的与其他形式的特征向量进行联合;
    6. 需要较少的经验主义知识,易于开发。

    1.4 SIFT特征提取的缺点

    1. 实时性不高,因为要不断地要进行下采样和插值等操作;
    2. 有时特征点较少(比如模糊图像);
    3. 对边缘光滑的目标无法准确提取特征(比如边缘平滑的图像,检测出的特征点过少,对圆更是无能为力)。

    1.5 SIFT特征提取可以解决的问题:

    目标的自身状态、场景所处的环境和成像器材的成像特性等因素影响图像配准/目标识别跟踪的性能。而SIFT算法在一定程度上可解决:

    1. 目标的旋转、缩放、平移(RST)
    2. 图像仿射/投影变换(视点viewpoint)
    3. 光照影响(illumination)
    4. 目标遮挡(occlusion)
    5. 杂物场景(clutter)
    6. 噪声
    近来不断有人改进,其中最著名的有 SURF(计算量小,运算速度快,提取的特征点几乎与SIFT相同)和 CSIFT(彩色尺度特征不变变换,顾名思义,可以解决基于彩色图像的SIFT问题)。

    [2] HOG(方向梯度直方图)

    2.1 HOG特征提取的实质

    通过计算和统计图像局部区域的梯度方向直方图来构成特征。Hog特征结合SVM分类器已经被广泛应用于图像识别中,尤其在行人检测中获得了极大的成功。

    2.2 HOG特征提取的方法

    1. 灰度化;
    2. 采用Gamma校正法对输入图像进行颜色空间的标准化(归一化),目的是调节图像的对比度,降低图像局部的阴影和光照变化所造成的影响,同时可以抑制噪音的干扰
    3. 计算图像每个像素的梯度(包括大小和方向),主要是为了捕获轮廓信息,同时进一步弱化光照的干扰
    4. 将图像划分成小cells(例如6*6像素/cell);
    5. 统计每个cell的梯度直方图(不同梯度的个数),即可形成每个cell的descriptor;
    6. 将每几个cell组成一个block(例如3*3个cell/block),一个block内所有cell的特征descriptor串联起来便得到该block的HOG特征descriptor。
    7. 将图像image内的所有block的HOG特征descriptor串联起来就可以得到该image(你要检测的目标)的HOG特征descriptor了。这个就是最终的可供分类使用的特征向量了。

    2.3 HOG特征提取特点

    1. 由于HOG是在图像的局部方格单元上操作,所以它对图像几何的和光学的形变都能保持很好的不变性,这两种形变只会出现在更大的空间领域上。
    2. 在粗的空域抽样、精细的方向抽样以及较强的局部光学归一化等条件下,只要行人大体上能够保持直立的姿势,可以容许行人有一些细微的肢体动作,这些细微的动作可以被忽略而不影响检测效果。因此HOG特征是特别适合于做图像中的人体检测的。

    [3] SIFT和HOG的比较

    共同点:都是基于图像中梯度方向直方图的特征提取方法

    不同点:

    SIFT 特征通常与使用SIFT检测器得到的兴趣点一起使用。这些兴趣点与一个特定的方向和尺度相关联。通常是在对一个图像中的方形区域通过相应的方向和尺度变换后,再计算该区域的SIFT特征。

    HOG特征的单元大小较小,故可以保留一定的空间分辨率,同时归一化操作使该特征对局部对比度变化不敏感。

    结合SIFT和HOG方法,可以发现SIFT对于复杂环境下物体的特征提取具有良好的特性;而HOG对于刚性物体的特征提取具有良好的特性。

    笔者曾做过一个自然场景分类的实验,发现SIFT的准确率比HOG高,而如果检测像人这种刚性的object,HOG的表现要比SIFT好。

    [4] SIFT/HOG与神经网络特征提取的比较

    众所周知,随着深度学习的发展,通过神经网络提取特征得到了广泛的应用,那么,神经网络提取的特征与传统的SIFT/HOG等特征提取方法有什么不同呢?

    4.1 神经网络提取到的特征

    我们知道,对于一副图像,像素级的特征没有任何价值,而如果特征是一个具有结构性(或者说有含义)的时候,比如摩托车是否具有车把手,是否具有车轮,就很容易把摩托车和非摩托车区分,学习算法才能发挥作用。

    早期,两个科学家Bruno Olshausen和 David Field通过实验研究了这个问题,发现一个复杂图像往往由一些基本结构组成。比如下图:一个图可通过用64种正交的edges(可以理解成正交的基本结构)来线性表示。比如样例的x可以用1-64个edges中的三个按照0.8,0.3,0.5的权重调和而成。而其他基本edges没有贡献,均为0 。


    具体实验可以参考文章:
    Deep Learning(深度学习)关于特征

    小块的图形可以由基本edge构成,更结构化,更复杂的,就需要更高层次的特征表示,高层表达由低层表达的组合而成。如图所示:


    这就是神经网络每层提取到的特征。由于是通过神经网络自动学习到了,因此也是无监督的特征学习过程(Unsupervised Feature Learning) 。直观上说,就是找到make sense的小patch再将其进行combine,就得到了上一层的feature,递归地向上learning feature。在不同object上做training是,所得的edge basis 是非常相似的,但object parts和models 就会completely different了。


    4.2 传统特征提取方法与神经网络特征提取的比较

    观点1:传统特征提取方法的研究过程和思路是非常有用的,因为这些方法具有较强的可解释性,它们对设计机器学习方法解决此类问题提供启发和类比。有部分人认为(也有部分人反对)现有的卷积神经网络与这些特征提取方法有一定类似性,因为每个滤波权重实际上是一个线性的识别模式,与这些特征提取过程的边界与梯度检测类似。同时,池化(Pooling)的作用是统筹一个区域的信息,这与这些特征提取后进行的特征整合(如直方图等)类似。通过实验发现卷积网络开始几层实际上确实是在做边缘和梯度检测。不过事实上卷积网络发明的时候,还没有这些特征提取方法。

    观点2: 深度学习的数据需求量大对于视觉来说是个伪命题。许多研究成果已经表明深度学习训练得到的模型具有很强的迁移能力,因此在大数据集上训练完成的模型只要拿过来在小数据集上用就可以,不需要完全重新训练。这种方式在小数据集上的结果往往也比传统方法好。

    观点3:还是需要重新训练的,只能说大数据集训练好的模型提供了一个比较好的参数初始化。而且卷积前几层提取特征仅仅是对分类问题是对的,但是对于一些dense prediction还是不一样,毕竟提取特征不一定有用,还是task dependent。

    观点4:深度学习是一种自学习的特征表达方法,比SIFT/HOG这些依靠先验知识设计的feature的表达效果高。早在13年大家都发现神经网络的最后一层的local特征和SIFT性质差不多,但是表达能力强太多。SIFT能做的事情CNN都能做,表达效果也强,那深度学习取代SIFT是迟早的事情(或者说已经发生的事情)。深度神经网络识别率的提高不需要建立在需求大量训练样本的基础上,拿pre-train好的模型直接用就可以了。在一些没有训练样本的应用(图像分割(image stithing)/ 立体匹配(stereo mathing)) ,可以把卷积层的activation提取出来做stitching的local feature(感觉是一个可以探索的方向)。未来还有SIFT/SURF这种固定特征提取算法的生存空间吗?除非是嵌入式这种计算资源极端受限的情况,但是现在大家都在试着implement CNN FPGA甚至ASIC了。

    观点5:2016年ECCV上举办的一个local feature的工作会,发现在核心匹配问题上,CNN并没有什么突破性的进展。在Oxford大学的VGG组提供的Hpatch数据集上,发现rootsiftpca效果最好,如图:


    那么提出两个问题:(1)现在流行的特征学习方法siamese或triplet等结构是否缺失了什么? (2)虽然CNN可以挖掘patch里面包含的信息并建立对于复杂几何和光照变化的不变性,但是这种学习到的不变性是否过度依赖于数据而无法有效泛化到真实匹配场景中所遇到的影像之间的复杂变化呢?


    [5] 其他传统特征提取的方法(SURF、ORB、LBP、HAAR)

    SURF、ORB、LBP可以参考文章:
    图像特征检测描述(一):SIFT、SURF、ORB、HOG、LBP特征的原理概述及OpenCV代码实现

    5.1 SURF

    前面提到SITF的缺点是如果不借助硬件加速或专门的图像处理器很难达到实现,所以人们就要想办法对SITF算子进行改进,SURF算子便是对SIFT的改进,不过改进之后在算法的运行时间上还是没有质的飞跃。后面要介绍的ORB特征描述算子在运行时间上才是一种质的飞跃。

    SURF主要是把SIFT中的某些运算作了简化。SURF把SIFT中的高斯二阶微分的模板进行了简化,使得卷积平滑操作仅需要转换成加减运算,这样使得SURF算法的鲁棒性好且时间复杂度低。SURF最终生成的特征点的特征向量维度为64维。

    5.2 ORB

    ORB特征描述算法的运行时间远优于SIFT与SURF,可用于实时性特征检测。ORB特征基于FAST角点的特征点检测与描述技术,具有尺度与旋转不变性,同时对噪声及透视仿射也具有不变性,良好的性能使得用ORB在进行特征描述时的应用场景十分广泛。

    ORB特征检测主要分为以下两个步骤:

    ①方向FAST特征点检测: FAST角点检测是一种基于机器学习的快速角点特征检测算法,具有方向的FAST特征点检测是对兴趣点所在圆周上的16个像素点进行判断,若判断后的当前中心像素点为暗或亮,将候定其是否为角点。FAST角点检测计算的时间复杂度小,检测效果突出。FAST角点检测为加速算法实现,通常先对回周上的点集进行排序,排序使得其计算过程大大得到了优化。FAST对多尺度特性的描述是还是通过建立图像金字塔实现的,而对于旋转不变性即方向的特征则引入灰度质心法用于描述特征点的方向。

    ②BRIEF特征描述: BRIEF描述子主要是通过随机选取兴趣点周围区域的若干点来组成小兴趣区域,将这些小兴趣区域的灰度二值化并解析成二进制码串,将串特征作为该特征点的描述子,BRIEF描述子选取关键点附近的区域并对每一位比较其强度大小,然后根据图像块中两个二进制点来判断当前关键点编码是0还是1.因为BRIEF描述子的所有编码都是二进制数的,这样就节省了计算机存储空间。

    5.3 LBP

    LBP(Local Binary Pattern),局部二值模式是一种描述图像局部纹理的特征算子,具有旋转不变性与灰度不变性等显著优点。LBP特征描述的是一种灰度范围内的图像处理操作技术,针对的是输入源为8位或16位的灰度图像。LBP特征是高效的图像特征分析方法,经过改进与发展已经应用于多个领域之中,特别是人脸识别、表情识别、行人检测领域已经取得了成功。LBP特征将窗口中心点与邻域点的关系进行比较,重新编码形成新特征以消除对外界场景对图像的影响,因此一定程度上解决了复杂场景下(光照变换)特征描述问题。

    LBP算法根据窗口领域的不同分为经曲LBP和圆形LBP两种。下面分别介绍:

    ①经典LBP: 经典LBP算子窗口为3×3的正方形窗口,以窗口中心像素为阈值,将其相邻8领域像素灰度与中心像素值比较,若中心像素值小于周围像素值,则该中心像素位置被标记为1,否则为0(显然这种规则下,对于中心点大于或等于这两种情况,算法无法区分,后续经过改进引入LBP+与LBP-因子用来区分这两种情况)。图像经过这种遍历操作后,图像就被二值化了,每一个窗口中心的8邻域点都可以由8位二进制数来表示,即可产生256种LBP码,这个LBP码值可以用来反映窗口的区域纹理信息。LBP具体在生成的过程中,先将图像划分为若干个子区域,子区域窗口可根据原图像的尺寸进行调整,而不一定非得为3×3的正方形窗口。一般对于512×640的图像,子区域窗口区域选取大小为16×16。

    ②圆形LBP: 经典LBP用正方形来描述图像的纹理特征,其缺点是难以满足不同尺寸和频率的需求。Ojala等人对经典LBP进行了改进,提出了将3×3的正方形窗口领域扩展到任意圆形领域。由于圆形LBP采样点在圆形边界上,那么必然会导致部分计算出来的采样点坐标不是整数,因此这里就需要对得到的坐标像素点值进行处理,常用的处理方法是最近邻插值或双线性插值。

    放一张SIFT/HOG/LBP优缺点、适用范围对比图:

    5.4 HAAR

    人脸检测最为经典的算法Haar-like特征+Adaboost。这是最为常用的物体检测的方法(最初用于人脸检测),也是用的最多的方法。

    训练过程: 输入图像->图像预处理->提取特征->训练分类器(二分类)->得到训练好的模型;

    测试过程:输入图像->图像预处理->提取特征->导入模型->二分类(是不是所要检测的物体)。

    Haar-like特征是很简单的,无非就是那么几种,如两矩形特征、三矩形特征、对角特征。后来,还加入了边缘特征、线特征、中心环绕特征等。使用积分图可以加速计算特征。最后,使用集成的方法Adaboost进行训练。


    本篇文章到此结束,有什么错误欢迎指正!


    补充:
    1、SIFT / HOG 不同点: SIFT提取的关键点是角点,HOG提取的是边缘特征。
    2、传统特征提取 / CNN特征提取不同点:传统特征提取方法的检测算子一般是人为设计好的,是经过大量的先验知识总结得到的;CNN特征提取相当于在训练一个个filter(过滤器、卷积核),这些filter相当于传统特征提取方法中的检测算子。因此,CNN特征提取是利用神经网络的自主学习得到的。

    本文转载自图像处理之特征提取

    展开全文
  • 图像处理特征提取之局部特征

    千次阅读 2019-06-19 21:01:41
    LOG,HOG,DOG微分算子在近圆的斑点检测方面效果很好 HOG特征 https://blog.csdn.net/coming_is_winter/article/details/72850511...总结:Dalal提出的Hog特征提取的过程:把样本图像分割为若干个像素的单元(cell),...
  • 特征提取是计算机视觉和图像处理中的一个概念。它指的是使用计算机提取图像信息,决定每个图像的点是否属于一个图像特征特征提取的结果是把图像上的点分为不同的子集,这些子集往往属于孤立的点、连续的曲线或者...
  • 时域特征值的代码实现可以参考:时域特征提取的MATLAB代码实现(均方根、峰值因子、脉冲因子、裕度因子、峭度因子、波形因子和偏度等) 文章如要转载请私信与我联系,并注明来源知乎专栏与信号处理有关的那些东东...
  • 心电信号的特征提取、分析与处理

    万次阅读 多人点赞 2019-12-29 12:02:25
    心电信号的特征提取、分析与处理* 数据来源:MIT-BIH数据库(可从以下数据中任选两组进行实验) 给出4组不同病例的心电信号数据,分别命名为“100-2-3”,“105-2-3”,“109-2-3”,“111-2-3”,每组数据以“.mat...
  • 时序数据特征提取

    千次阅读 2020-07-13 21:58:54
    时序数据特征提取时间序列的表示方法分段线性表示分段线性表示符号化聚合近似时间序列的相似性度量方法Minkowski距离动态时间弯曲符号化距离基于模型的距离度量方法时间序列的特征提取方法基于统计特征的...
  • 小波包变换常用于提取非线性信号的特征,常应用于故障诊断领域的故障特征提取
  • 图像处理特征匹配特征提取之SIFT简单梳理  学习SIFT一段时间,有些东西理解不透彻,且网上没有清晰解释。以下内容为自己的胡思乱想,均无确切依据,辩证看待。  SIFT,即尺度不变特征变换(Scale-invariant ...
  • LSTM-CNN-Attention算法系列之一:LSTM提取时间特征

    万次阅读 多人点赞 2019-04-23 12:41:15
    通过对前期信息有选择的记忆和遗忘,LSTM实现了对相关信息的长期记忆,从而提取时间特征。     2、LSTM模型的用武之地 LSTM模型的神秘力量现在已经被运用于多个场景中,指数预测,语音识别,精准...
  • 文本特征提取方法介绍

    千次阅读 2020-06-09 19:34:39
    一、课题背景概述 文本挖掘是一门交叉性学科,涉及数据挖掘、机器...传统数据挖掘所处理的数据是结构化的,而文档(web)都是半结构或无结构的。所以,文本挖掘面临的首要问题是如何在计算机中合理地表示文本,使之既要包含
  • 图像特征提取总结

    万次阅读 多人点赞 2018-10-06 17:36:09
     特征提取是计算机视觉和图像处理中的一个概念。它指的是使用计算机提取图像信息,决定每个图像的点是否属于一个图像特征特征提取的结果是把图像上的点分为不同的子集,这些子集往往属于孤立的点、连续的曲线或者...
  • 传统特征提取算法

    千次阅读 2019-02-16 18:37:42
    传统特征提取算法传统特征提取算法HOG特征lbp算法 传统特征提取算法 因为以前学习过数字图像处理等传统图像处理的书籍,但是现在忘了这些算法,所以做一下笔记防止忘了。有错误的话希望大家共同交流。(前段时间怀疑...
  • 传统特征提取方法总结

    千次阅读 2020-09-08 09:04:56
    对边缘光滑的目标无法准确提取特征(比如边缘平滑的图像,检测出的特征点过少,对圆更是无能为力)。 1.3 可以解决的问题及改进 目标的自身状态、场景所处的环境和成像器材的成像特性等因素影响图像配准/目标识别...
  • ORB特征提取详解

    万次阅读 多人点赞 2018-05-03 10:49:06
    网上虽然出现了很多讲解ORB特征提取和描述的方法,但都不够详尽。为了搞明白到底是怎么回事,只能结合别人的博客和原著对ORB的详细原理做一个研究和学习。哪里有不对的地方,请多多指教 1、算法介绍 ORB...
  • 图像特征提取

    万次阅读 多人点赞 2017-01-03 16:38:12
    严格地说, 图像特征提取属于图像分析的范畴, 是数字图像处理的高级阶段, 同时也是图像识别的开始。本文主要包括以下内容 常用的基本统计特征, 如周长、面积、均值等区域描绘子, 以及直方图和灰度共现矩阵等...
  • BCI系统中的信号处理包括(信号采集、)信号预处理、特征提取、识别分类(、设备控制)等过程 传统的脑电信号分析方法是对信号进行多次检测并进行均值滤波,再用统计学的方法寻找EEG的变化规律。这种方法信息传输率...
  • Matlab 图像处理 ——特征提取

    千次阅读 2017-04-01 13:46:29
    边缘检测技术对于处理数字图像非常重要,因为边缘是所要提取目标和背景的分界线,提取出边缘才能将目标和背景区分开来。在图像中,边界表明一个特征区域的终结和另一个特征区域的开始,边界所分开区域的内部特征或...
  • 关于图像特征提取

    千次阅读 2017-11-15 16:44:21
    特征提取是计算机视觉和图像处理中的一个概念。它指的是使用计算机提取图像信息,决定每个图像的点是否属于一个图像特征特征提取的结果是把图像上的点分为不同的子集,这些子集往往属于孤立的点、连续的曲线或者...
  • 心电图中的各个波形都...所以识别这些波形以及提取相应特征对我们后续做心律失常的分类很重要。 我们在用算法做心律失常判别分类之前,有两个关键点: 第一步: 识别检测ECG信号中的波群(目前主要是先定位QRS波...
  • OpenCV中最常使用的特征检测和提取算法有: Harris、SIFT、SURF、FAST、BRIEF、ORB等。 引言 计算机视觉中,我们经常要匹配两幅图像。匹配的的方式就是通过比较两幅图像中的公共特征,比如边,角,以及图像块...
  • 音频时域特征提取

    千次阅读 2021-03-15 09:38:13
    在时域内提取特征时,通常将研究每个样本的幅度。 我们如何操纵幅度为我们提供了有关信号的某些细节。 在开始之前,我先确定一些符号: 在这些本篇中,我将详细说明该特性是什么,如何正式定义它,并展示如何在...
  • 表面肌电sEMG特征提取的Matlab程序

    千次阅读 多人点赞 2019-03-20 15:42:32
    提取特征值包括: 时域——RMS,MAV,ZC,VAR 频域——平均功率频率MPF,中值频率MF 数据为:thisdata,带入你的数据 % 时域特征 % 绝对平均值(Mean Absolute Value,MAV) %思路:截取一段时间(定义滑动...
  • 特征选择(区别于特征提取

    千次阅读 2018-12-20 10:58:22
    特征选择和特征提取的异同 先来看一张特征工程的图。 特征选择和特征提取都是特征工程下,对于多特征的预处理。 其共同的目的是: 提高模型预测的准确率 减少模型运行的时间,提高学习模型的性能 降低维度...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 376,356
精华内容 150,542
关键字:

时间怎么处理特征提取