精华内容
下载资源
问答
  • 具体分析如下:这段代码实用pil模块比较个图片的相似度,根据实际实用,代码虽短但效果不错,还是非常靠谱的,前提是图片要大一些,太小的图片不好比较。附件提供完整测试代码和对比用的图片。#!/usr/bin/python# ...

    本文实例讲述了Python比较两个图片相似度的方法。分享给大家供大家参考。具体分析如下:

    这段代码实用pil模块比较两个图片的相似度,根据实际实用,代码虽短但效果不错,还是非常靠谱的,前提是图片要大一些,太小的图片不好比较。附件提供完整测试代码和对比用的图片。

    #!/usr/bin/python

    # Filename: histsimilar.py

    # -*- coding: utf-8 -*-

    import Image

    def make_regalur_image(img, size = (256, 256)):

    return img.resize(size).convert('RGB')

    def split_image(img, part_size = (64, 64)):

    w, h = img.size

    pw, ph = part_size

    assert w % pw == h % ph == 0

    return [img.crop((i, j, i+pw, j+ph)).copy() \

    for i in xrange(0, w, pw) \

    for j in xrange(0, h, ph)]

    def hist_similar(lh, rh):

    assert len(lh) == len(rh)

    return sum(1 - (0 if l == r else float(abs(l - r))/max(l, r)) for l, r in zip(lh, rh))/len(lh)

    def calc_similar(li, ri):

    #   return hist_similar(li.histogram(), ri.histogram())

    return sum(hist_similar(l.histogram(), r.histogram()) for l, r in zip(split_image(li), split_image(ri))) / 16.0

    def calc_similar_by_path(lf, rf):

    li, ri = make_regalur_image(Image.open(lf)), make_regalur_image(Image.open(rf))

    return calc_similar(li, ri)

    def make_doc_data(lf, rf):

    li, ri = make_regalur_image(Image.open(lf)), make_regalur_image(Image.open(rf))

    li.save(lf + '_regalur.png')

    ri.save(rf + '_regalur.png')

    fd = open('stat.csv', 'w')

    fd.write('\n'.join(l + ',' + r for l, r in zip(map(str, li.histogram()), map(str, ri.histogram()))))

    #   print >>fd, '\n'

    #   fd.write(','.join(map(str, ri.histogram())))

    fd.close()

    import ImageDraw

    li = li.convert('RGB')

    draw = ImageDraw.Draw(li)

    for i in xrange(0, 256, 64):

    draw.line((0, i, 256, i), fill = '#ff0000')

    draw.line((i, 0, i, 256), fill = '#ff0000')

    li.save(lf + '_lines.png')

    if __name__ == '__main__':

    path = r'testpic/TEST%d/%d.JPG'

    for i in xrange(1, 7):

    print 'test_case_%d: %.3f%%'%(i, \

    calc_similar_by_path('testpic/TEST%d/%d.JPG'%(i, 1), 'testpic/TEST%d/%d.JPG'%(i, 2))*100)

    #   make_doc_data('test/TEST4/1.JPG', 'test/TEST4/2.JPG')

    完整实例代码点击此处本站下载。

    希望本文所述对大家的Python程序设计有所帮助。

    展开全文
  • 想同时对比观察,可逐条导入后,利用变换算法中的"复制前级"将曲线移至二三级缓冲区,然后再导入另一列,这样,曲线窗中即可以对比同一数据文件中的多列数据(目前限制为三条曲线,软件保留有一次导入更多条曲线的接口);...
  • 高光谱图像分类方法与传统的多光谱分类有本质的区别,从高光谱图像的每个像元均可以获取一条连续的波谱曲线,就可以考虑用已知的波谱曲线和图上每个像元获取的波谱曲线进行对比,理想情况下两条波谱曲线一样,就能...

    高光谱地物识别  

    高光谱图像分类方法与传统的多光谱分类有本质的区别,从高光谱图像的每个像元均可以获取一条连续的波谱曲线,就可以考虑用已知的波谱曲线和图上每个像元获取的波谱曲线进行对比,理想情况下两条波谱曲线一样,就能说明这个像元是哪种物质。我们把高光谱图像分类、物质识别、探测等称为波谱识别。  

    ENVI 提供许多波谱分析方法,包括:二进制编码、波谱角分类、线性波段预测(LSFit)、线性波谱分离、光谱信息散度、匹配滤波、混合调谐匹配滤波(MTMF)、包络线去除、光谱特征拟合、多范围光谱特征拟合等。下面以一高光谱数据为例,用波谱角分析方法、二进制编码法和波谱信息散度法从高光谱图像中识别物质的操作过程。  

    1 从标准波谱库选择端元进行地物识别

    第一步:端元波谱收集  

    ENVI 的端元波谱收集途径非常多,包括 ASCII 文件、ASD 测量文件、波谱库、ROI/矢量文件、统计文件、剖面波谱图、N 维可视化分析器、二维散点图、SMACC 工具等。这里我们选择从波谱库中收集

    端元波谱的方式。  

    1. 启动 ENVI,打开高光谱数据 CupriteReflectance.dat  
    2. 单击主菜单 Display-> Spectral Library Viewer,打开 usgs(1994)->minerals_asd_2151.sli,点击 AluniteCalcitePrehnite GDS613.aPortlanndite,收集这些矿物的端元波谱并自动绘制在右侧的窗口中,将这四条光谱曲线绘制在新的波谱显示窗口,修改每条曲线为中文名;
    图 1  从波谱库中收集端元波谱

    第二步:物质识别常见高光谱分类方法包括波谱角填图(SAM)、二进制编码(Binary Encoding)和波谱信息散度(Spectral Information Divergence)。本文将采用这三种方法对影像进行矿物识别。下面分别对 3 种分类方法的原理和实验中所采用的参数设置进行说明,如表所示。

    方法  

    原理  

    参数设置  

    波谱角填图  

    计算像元与端元波谱之间的夹角判定其相似度,夹角越小,越相似。  

    single value:0.15  

    二进制编码  

    将数据和端元波谱编码为 0 和 1,使用逻辑函数对每一种编码的参照波谱和编码的分类波谱进行比较,生成分类图像。  

    single value:0.15  

    波谱信息散度  

    利用散度度量像元波谱与端元波谱的匹配程度,散度越小,相似程度越高。  

    none  

    1. 在 Toolbox 中,打开/Classification/Endmember Collection 工具,在文件对话框中选择高光谱数据 CupriteReflectance.dat;  
    2. 在 Endmember Collection 面板中,选择 Import >from Plot Windows。将 4 个端元波谱全部选中,点击 OK;  
    3. 选择 Algrithm >Spectral Angle Mapper 波谱角识别方法。  
    4. 单击 Select All,选中所有的端元波谱。  
    图 2  选择端元波谱和制图方法

    单击 Apply,运行波谱角法制图。  

    第三步:结果输出在 Spectral Angle Mapper 面板上,设置波谱角阈值:0.15,选择结果输出路径和名称。

    图 3  Spectral Angle Mapper 制图输出面板
    图 4  矿物识别结果

    类似地,选择 Algrithm > Binary Encoding 二进制编码。单击 Select All,选中所有的端 元波谱。单击 Apply  

    Binary Encoding 面板上,设置波谱角阈值:0.15,选择结果输出路径和名称。

    图 5 Binary Encoding 制图输出面板  
    图 6  矿物识别结果

    类似地,选择 Algrithm > Spectral Information Divergence 波谱信息散度。单击 Select All,选中所有的端元波谱。单击 Apply  Spectral Information Divergence 面板上,默认最大散度阈值为 0.05,选择结果输出路径和名称。

    图 7  Spectral Information Divergence 制图输出面板
    图 8  矿物识别结果

    2 自定义端元进行地物识别  

    这里我们选择从图像上收集端元波谱的方式,包括收集单个像元波谱和区域的平均波谱。  

    第一步:构建端元波谱库  

    (1)启动 ENVI,打开高光谱数据 CupriteReflectance.dat;  

    (2)单击主菜单 Display> Profiles>Spectral,在图像上定位到像素坐标为:(467,412)的像元,即在工具栏 Go To 输入 467,412 回车,将该像元的光谱曲线显示在窗口中  

    图 9  (467,412)像元的波谱曲线

    (3)在 Toolbox 中,打开/Classification/Endmember Collection 工具,在文件对话框中选择高光谱数据 CupriteReflectance.dat;  

    (4)在 Endmember Collection 面板中,选择 Import –>from Plot Windows。将显示的端元波谱选中,点击 OK;单个像素的波谱曲线收集好了,下面是收集一个区域的平均波谱。  

    (5)在图层管理器中 CupriteReflectance.dat 上点击右键 New Region Of Interest,找到一片需要识别的区域,绘制一个多边形区域;可直接打开 ROI\端元 ROI.xml  

    (6)回到 Endmember Collection 面板,选择 Import–>from ROI from input file,将绘制的 ROI 都选中,点击 OK;  

    (7)在 Endmember Collection 面板,选择 Select All,单击 Plot 将几条波谱曲线显示出来。注:以防万一,点击 File->Save Spectra as->Spectral Library File,将获取的端元波谱保存为端元波谱文件。

    图 10  保存端元波谱

    第二步:确定端元波谱类型  

    (1)在 Toolbox 中,选择/Spectral/Spectral Analyst,选择在对话框的右下角选择 Open>Spectral Library,选择...\Program Files\Exelis\ENVI53\classic\spec_lib\usgs_min \usgs_min.sli 作为对比波谱库,在识别方法权重上按照默认,点击 OK;  

    (2)在 Spectral Analyst 面板上,选择 Options->Edit(x,y) Scale Factors,设置 X Data Multipliter 为 0.001,设置 Y Data Multipliter 为 0.0001,点击 OK;注:标准波谱库的波长是微米,y 轴的值为 0-1 反射率。

     

    图11  设置待识别波谱与标准波谱库的单位比例关系

    (3)在 Spectral Analyst 面板上,单击 Apply 按钮,选择之前步骤中得到的第一个波谱进行分析,点击

    OK,记下分值最高对应的地物;  

     (4) 回到 Endmember Collection 面板,将波谱分析得到的地物名在 Name 中输入;

    图12  选择一个波谱进行分析
    图13  波谱曲线分析结果

    (5)重复(3--4)两步,识别剩下的波谱,最后结果如下图所示:

    图14  波谱识别结果

    第三步:物质识别  

    1. 在 Endmember Collection 面板中,选择 Algrithm >Spectral Angle Mapper 波谱角识别方法; 

    2. 选择 Select All 将所有端元波谱全部选中,点击 OK;(3)单击 Apply,运行波谱角法制图。 

    3. Spectral Angle Mapper 面板上,设置波谱角阈值:0.02,选择结果输出路径和名称。

    图 15  Spectral Angle Mapper 制图输出面板
    图 16  矿物识别结果
    展开全文
  • 使用Pearson卡方检验和不配对的次样本t检验进行统计分析。 结果:36例患者中,恶性28例,良性8例。 3型曲线有14(均为恶性肿瘤),2型曲线有6,1型曲线有16。 所有良性病例(n = 8)均显示出1型曲线(准确...
  • 针对希尔伯特-黄变换过程中经验模态分解出现的端点效应问题,采用极限学习机(Extreme Learning Machine,ELM)算法对原始数据序列分别向左右端延拓,对扩展后的数据序列用B样插值函数求其平均曲线,在此基础上...
  • 源宝导读:本文将讲解在大数据分析领域的线性回归统计计算方法,以及如何将非线性转化为线性回归的原理,同时介绍了种的回归统计库的使用和对比,最后介绍线性回归在DMP产品的应用实践。一、背景 回归统计,是数据...

    199635f2a40b9ea66f84940fb0f99b7d.png

    861d3d58443cc535ba4fe84fa74f9e60.png

    源宝导读:本文将讲解在大数据分析领域的线性回归统计计算方法,以及如何将非线性转化为线性回归的原理,同时介绍了两种的回归统计库的使用和对比,最后介绍线性回归在DMP产品的应用实践。

    一、背景

        回归统计,是数据分析常用的方式,可以通过对散点图的线性或非线性拟合,得到一条可以解释散点趋势的曲线函数,通过该函数可以对数据进行预测,同时可以采用相关指标刻画该函数的回归的效果,具有一定的现实指导意义。

        一般的线性规划得到的是一条直线,而基本的几种非线性回归则是通过转化为线性回归的方式来进行;本篇通过讲解线性回归的计算方法以及如何将非线性转化为线性回归说明其原理,同时介绍了两种的回归统计库的使用和对比,最后通过实例演示了实现效果。本篇在 DMP 平台上实现了包含该功能的散点图组件。

    二、接到需求

    地点:办公室。
    时间:某个清晨。
    人物:某产品经理;小明,久经考验的前端攻城狮。
    事件:又又接到产品提出的奇怪需求——之前搞了PS,现在 EXCEL 有的功能我们也要上,作为大数据产品,趋势线这种东西,必须有啊,移动平均除外,其他的都得搞定。
    看到这个需求,小明表示,还是淡定吧…
    如下图所示:

    16e47a315720ba98200a5b86ecee7ffe.png

    三、需求分解

    1. 图形由散点和趋势线构成,均可按照 echarts 等图形库直接绘制;

    2. 控制面板使用一般的UI 控件均可实现;

    3. 关键在于线性、指数、对数、多项式和乘幂趋势线的算法实现。

        搞清楚这几种回归分析算法的原理,即搞定了这个需求。

    四、线性回归

    4.1、什么是回归

        高中的数学课本知识告诉我们:

    1. 从一组样本数据出发,确定变量之间的数学关系式;

    2. 对这些关系式的可信度进行各种统计检验,并从影响某一特定变量的诸多变量中找出哪些变量的影响显著,哪些不显著;

    3. 利用所求的关系式,根据一个或几个变量的取值来预测或控制另一个特定变量的取值,并给出这种预测或控制的精确程度。

        以上便是回归的一般用法。

    4.2、回归的意义

    1. 客观事物是相互联系的,过去研究的大多数是因果关系,但实际上更多存在的是一种非因果关系;

    2. 相关关系:当一个或几个相互联系的变量取一定的数值时,与之相对应的另一变量的值虽然不确定,但它仍按某种规律在一定的范围内变化。变量间的这种相互关系,称为具有不确定性的相关关系。

    3. 回归分析是寻找相关关系中非确定性关系的某种确定性。

    4.3、回归的种类

        按形式分类:

    1. 线性相关(直线相关):当相关关系的一个变量变动时,另一个变量也相应地发生均等的变动。

    2. 非线性相关(曲线相关):当相关关系的一个变量变动时,另一个变量也相应地发生不均等的变动。

        可以看到,我们要实现的除了直线趋势线外,其他的指数、对数、多项式和乘幂趋势线都是非线性相关。

    4.4、如何实现线性回归

    4.4.1、线性回归算法

        最小二乘是最常用的实现线性回归的方法,可以通过其找到因变量 y 与自变量 x 之间的函数关系y=f(x)。
        对于散点图,可以将点的横坐标看做自变量 x ,将纵坐标看做因变量 y , 然后使用最小二乘法找到自变量和因变量之间的函数关系,由这个函数关系可以确定一条直线,这就是拟合出来的直线趋势线。

    4.4.2、几何意义

        最小二乘法的直观上的理解是:在二维平面上找到一条直线,使得每个点到直线的竖直距离之和最小。也就是说,一般最小二乘优化的是竖直距离,即纵坐标 y 的误差。

    59e02d5b7314d0cdee63551cd8b96588.png

    4.4.3、公式求解

    1. 设线性回归方程为:e0430cd9414b662675307d1c64e99e76.png

    2. 先求出变量 x 的平均值,即:10923f627abcc6255b9ab6feb105e100.png

    3. 再求出变量 y 的平均值,即:eb16be85b098e58337c61de0fc8f8334.png

    4. 求出变量 x 的系数b46c2f974e0d3bd536628d0e808a35d0.png

    即:5889d58837cc14f77ce94b36aa20d2f5.png

    =4374666ff7af70c781476f5e34944f0a.png

        5. 求出常数:47e10d5043e47e42473acd0c37b54ab6.png

    即:a5ea5cee420d6bbf4a05edb4bcd15e06.png

    即可得到回归方程:d39ef6eca23e162ec9166d5e6e7c4509.png

    4.4.4、回归方程评价

        主要有两个指标,方差 ∂² 和 相关指数 R²。一般我们可以用相关指数 R² 来刻画回归的效果。R² 越趋向于 1,则说明回归方程拟合的越好;越趋向 0,则说明拟合的越差。282bddab94c31775b30c1e93ea89b0cf.png

    4.5、通过线性方法实现非线性回归

        主要的思想是通过适当的变量代换,把幂函数、指数函数、对数函数等采用适当的变量代换,把问题转化为线性回归问题,使其得到解决。
    如对指数回归:
    d39ef6eca23e162ec9166d5e6e7c4509.png

    的求解方式如下:

    1.在d39ef6eca23e162ec9166d5e6e7c4509.png

    的两边取常用对数得到:b184a24ec907defd9e6605af28b29d70.png

    2.令6bf601509c272d7a7ea0f8ba403feb97.png

    ,则得到e20087fb593e37dfbab537ad0f438a65.png

        即转化为线性方程,按照线性方程进行求解可得到 a 和 b 的值,带入公式可得到系数 C₁ 和 C₂,从而得到指数回归:d39ef6eca23e162ec9166d5e6e7c4509.png

    五、regression-js及echarts-stat简介

        实现回归统计在各个平台和语言都有不同的实现,对于前端而言,有两个现成的库可以直接使用,就是regression-js 和 echarts-stat。

    5.1、regression-js

    官方介绍:

        regression-js 是一个JavaScript模块,其中包含用于简单数据分析的线性最小二乘拟合方法的集合。

        基本可以看作我们上面讲解内容的一个实现版本,包含的内容也恰好覆盖,其API如下:

    bb44dbe1705361112fe8be9ab2b4cb77.png

    0c05b3e5589757284bb204aafa8703fb.png

    Result:ba1b742cf124bfe69b05a4dcee654441.png

        其求解的结果集直接提供了 相关指数 R², 并且提供了一个 predict 函数,可以直接通过输入 x 获得预测值。

    5.2、echarts-stat

    官方介绍:

        ecStat是ECharts  的统计和数据挖掘工具。你可以把它当作一个工具库直接用来分析数据;你也可以将其与 ECharts 结合使用,用ECharts 可视化数据分析的结果。
    同时支持 Node 和浏览器中使用。

    ecStat 提供的 api 较多,包含以下内容:

    1. ·直方图

    2. ·聚类

    3. ·回归

    4. ·基本统计方法

    回归是 ecStat 提供的一类 api,同 regression-js 提供的功能基本一致:c4ed278862a0ee31028fba4baca817dc.png

    16bf161524726d5fcdcc80fd8e0240aa.png

        与 regression-js 相比,少了幂函数,同时求解集也没有提供相关指数 R² 和 predict 预测函数。
        比较适合仅需要图形渲染的场景,对于预测和评价需要使用其提供的基本统计方法自行定义。

    六、实现演示

        采用 regression-js 进行实现回归算法,用 echarts 作图形渲染,在 DMP 平台上制作了一个组件,实现了线性、指数、对数、多项式和乘幂趋势线以及其 R² 和趋势预测,如下图所示:

    7340135009b3065c165c3bdda39c37b6.gif

        具体可以在 DMP 测试环境使用设计器-更多-趋势线散点图DEMO 查看效果。(动图:趋势线2.gif)

    e65ac1de99f38fc01b3f1dbf6f7f53cd.png

         同时,也在 echarts 社区的 gallery 制作了 regression-js 和 ecStat 的对比演示demo,感兴趣的同学可以查看:https://gallery.echartsjs.com/editor.html?c=xV2Muphtnl&v=5。

    ------ END ------

    作者简介

    王同学: 研发工程师,目前负责云创DMP数据分析平台的设计与开发工作。

    也许您还想看

    云客大数据架构实践

    云客大数据管理保障体系

    TypeScript+vue使用与迁移经验总结

    Web页面适配移动端方案研究

    前端异步对象的原理与使用方法

    d992ff2078089731555f470fb63bc5a9.png

    da47c834fadb4a9025c99ae4bad48394.png

    展开全文
  •  [弹性的曲面创建工具]:可以在一个弹性的设计环境里非常方便的直接从曲线、曲面、或测量数据创建曲面,支持贝茨尔(Bezier)和非均匀有理 B 样条(NURBS)曲面种方法。用户可以选择适合的曲面方法,通过结合种方法...
  • excel的使用

    2012-11-25 17:06:01
    如果想快速准确地绘制一函数曲线,可以借助EXCEL的图表功能,它能使你画的曲线既标准又漂亮。你一定会问,是不是很难学呀?其实这一点儿也不难,可以说非常简便,不信你就跟我试一试。以绘制y=|lg(6+x^3)|的曲线...
  • 软件可以按部位和时间两条主线把中标合同价、公司下达的目标成本、项目目标成本、实际成本实时进行对比,埋在软件中的成本预警机制会帮您提前发现成本亏损信号,使成本处在预控中。 3.过程控制与WBS分解 过程控制是...
  •  《Visual Basic开发实战1200例》分为I、II卷共计1200个例子,包括了开发中各个方面最常用的实例,是目前市场上实例最全面的开发类图书;书中实例来源于多位工程师的多年积累,具有很强的实用性。 本书是第II卷...
  •  《Visual Basic开发实战1200例》分为I、II卷共计1200个例子,包括了开发中各个方面最常用的实例,是目前市场上实例最全面的开发类图书;书中实例来源于多位工程师的多年积累,具有很强的实用性。 本书是第II卷...
  • vc++ 应用源码包_1

    热门讨论 2012-09-15 14:22:12
    任务管理器应该大家都很熟悉,论坛里也有好多的任务管理器的源码,解决CListCtr刷新时滚动跳到开始处。 VC++实现网络连接查看器源码 非常好的一个实例,把网络连接的UDP/TCP都插入到CList控件中显示出来。 VC++...
  • vc++ 应用源码包_2

    热门讨论 2012-09-15 14:27:40
    任务管理器应该大家都很熟悉,论坛里也有好多的任务管理器的源码,解决CListCtr刷新时滚动跳到开始处。 VC++实现网络连接查看器源码 非常好的一个实例,把网络连接的UDP/TCP都插入到CList控件中显示出来。 VC++...
  • vc++ 应用源码包_6

    热门讨论 2012-09-15 14:59:46
    任务管理器应该大家都很熟悉,论坛里也有好多的任务管理器的源码,解决CListCtr刷新时滚动跳到开始处。 VC++实现网络连接查看器源码 非常好的一个实例,把网络连接的UDP/TCP都插入到CList控件中显示出来。 VC++...
  • vc++ 应用源码包_5

    热门讨论 2012-09-15 14:45:16
    任务管理器应该大家都很熟悉,论坛里也有好多的任务管理器的源码,解决CListCtr刷新时滚动跳到开始处。 VC++实现网络连接查看器源码 非常好的一个实例,把网络连接的UDP/TCP都插入到CList控件中显示出来。 VC++...
  • vc++ 应用源码包_4

    热门讨论 2012-09-15 14:38:35
    任务管理器应该大家都很熟悉,论坛里也有好多的任务管理器的源码,解决CListCtr刷新时滚动跳到开始处。 VC++实现网络连接查看器源码 非常好的一个实例,把网络连接的UDP/TCP都插入到CList控件中显示出来。 VC++...
  • vc++ 应用源码包_3

    热门讨论 2012-09-15 14:33:15
    任务管理器应该大家都很熟悉,论坛里也有好多的任务管理器的源码,解决CListCtr刷新时滚动跳到开始处。 VC++实现网络连接查看器源码 非常好的一个实例,把网络连接的UDP/TCP都插入到CList控件中显示出来。 VC++...
  • ●模型分析 ●基本步骤 素材源文件:素材与源文件\02\咖啡杯建模.max 视频路径:Video\02\2.4.1 咖啡杯建模.avi ●参数说明 ●实例:旋转楼梯模型 素材源文件:素材与源文件\02\旋转楼梯模型.max 视频路径:Video\02...
  • 频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测 量其他信号的频率。通常情况下计算每秒内待测信号的脉冲个数,此时我们称 闸门时间为1 秒。闸门时间也可以大于或小于一秒。闸门时间越长,得到的...

空空如也

空空如也

1
收藏数 20
精华内容 8
关键字:

两条曲线对比分析