首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Python:生成“曲线拟合分数”

我正在做一个项目,在这个项目中,我试图对kymograph中对象的运动进行建模。为了做到这一点,我将一条曲线拟合到图像中的每一行像素,并附加顶点的位置来近似模拟图像中对象的位置。下面是一个示例图像。

正如您所看到的,在时间序列的早期(在图像的顶部),对象的位置被很好地聚焦,并且很容易用高斯曲线建模。然而,更接近时间序列的结尾(在图像的底部),峰值更具漫射性。我怀疑图像底部的数据将由泊松分布(下图,右图)曲线拟合得更接近,而图像顶部/中间的数据将由高斯或多项式曲线(下图,左图)拟合得更紧密。

有没有办法,对于每一行像素,将多条曲线拟合到相同的数据,然后对每条曲线进行最小二乘拟合?这样,我可以(希望)在图像中途切换模型,以适应我试图跟踪的对象不断变化的行为。我当前的代码如下:

代码语言:javascript
运行
AI代码解释
复制
from PIL import Image

def populateData(picture) :
    """Open an image and populate a list of lists with the grayscale value"""
    im = Image.open(picture)           
    size = im.size                    
    width = size[0]                   
    height = size[1]                   
    allPixels = list(im.getdata())      
    pixelList = [allPixels[width*i :    
                       width * (i+1)] for i in range(height)] 
    return(pixelList)

rawData = populateData("testTop.tif")   

import numpy as np
from scipy.optimize import curve_fit

def findVertex(listOfRows) :

    xList = []
    for row in listOfRows :
        x = np.arange(len(row))
        ffunc = lambda x, a, x0, s: a*np.exp(-0.5*(x-x0)**2/s**2) 
        p, _ = curve_fit(ffunc, x, row, p0=[100,5,2])
        x0 = p[1] 
        xList.append(x0)
    xArray = np.array(xList)    
    return(xArray)

xValues = findVertex(rawData)

def buildRows(listOfRows) :
    yArray = np.arange(len(listOfRows))
    return(yArray)

yValues = buildRows(rawData)

from matplotlib import pyplot as plt
from scipy import ndimage

image = ndimage.imread("testTop.tif",flatten=True)
fig = plt.figure()
axes = fig.add_subplot(111)
axes.imshow(image)
axes.plot(xValues, yValues, 'k-')

axes.set_title('testLine')
axes.grid()
axes.set_xlabel('x')
axes.set_ylabel('time')
plt.show()

编辑:这是我用作输入的文件(testTop.tif)

EN

回答 3

Stack Overflow用户

发布于 2015-06-02 07:38:28

你需要在fit和你的数据之间建立某种形式的goodness of fit。取当前拟合(高斯)和数据之间的平方差之和除以方差。

代码语言:javascript
运行
AI代码解释
复制
sumerrsq = 0.
for i in range(yValues.shape[0]):
    sumerrsq += np.power(yValues[i] - xValues[i],2)

goodfit = np.sqrt(sumerrsq/var)

我认为你可以使用曲线拟合的第二个输出(协方差)来获得方差,

代码语言:javascript
运行
AI代码解释
复制
p, pcov = curve_fit(ffunc, x, row, p0=[100,5,2])
var = np.diag(pcov)

然后,您可以检查goodfit的值,如果该值不够,则切换到不同的发行版。在使用不同的分布时,您可能需要使用不同的误差估计(假设误差是正态分布的)。

注意,没有数据(并且不确定是哪个数组),我无法测试这些代码中的任何一个……

票数 0
EN

Stack Overflow用户

发布于 2015-06-02 07:38:44

据the curve_fit docs报道

使用perr = np.sqrt(np.diag(pcov))计算参数上的1个标准差的

因此,如果这是您试图比较的值,那么您可以从curve_fit (当前赋值给_的值)中获取第二个返回值,使用它来计算perr,并比较多条曲线之间的误差。

票数 0
EN

Stack Overflow用户

发布于 2015-06-02 07:50:12

我建议您使用2D拟合模型。一维高斯分布是基础,但均值和方差取决于位置和时间。然后,将模型与2d图像数据进行拟合。

如果你想继续使用你的方法,它看起来只是均值和方差的起始值,你需要调整它,以便更好地拟合时间较长的线。

对于你的问题,你可以模拟任何你想要的分数函数,所以你可以这样做:

代码语言:javascript
运行
AI代码解释
复制
def score(x,y):
    if x < 10:
         return x**2 - y
    else:
         return x - y

因此,为了在不同的范围内使用两个不同的模型,请遵循以下示例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30589640

复制
相关文章
Android P中WIfi P2P代码结构
从FrameWork层开始,Wifi P2P和Wifi的代码就开始分开了,当然只是在Wifi目录下新建了一个p2p文件夹来单独存放p2p的相关代码。下面我们来看一下这些代码。 首先是framework/base目录下,这下面放的都是一些基本内容,下面我只写了一些重要的文件,aidl接口没有写。 /frameworks/base/wifi/java/android/net/wifi/p2p/
用户7557625
2020/07/15
1.6K0
p=p+1与p++的区别
其结果值相等 但是在计算p = p+1的时候,CPU的顺序是这样的 1. 首先找到p+1中右边p的地址,记住,CPU并不知道左边的p和右边的p是同一个地址,他会将这两个p视为两个不同的变量。 2. 找到右边的p的地址后,然后加1, 3,这一步就是找左边的p的地址。 4.将结果赋值给左边的p。结束 5. 计算机是不是很笨,是的,他很笨,但是他速度快,并且他严格按照规矩办事,所以一般不会出现错误。 当执行p++的时候。 1.找到p的地址,然后加1,结束。 可以看出,p=p+1和p++结果是一样的,但是这个计算过
Dar_Alpha
2018/09/03
8610
计算机网络p2p协议在第几页_p2p传输协议
在上篇文章中说过,要写写 P2P 协议的,嗯,来写写,虽然写的不是太好. P2P 是什么? 还是要回到这个场景: 如果想要下载一个电影,一般都是通过什么方式呢? 我希望这次你的答案,除了 HT
全栈程序员站长
2022/11/03
6960
C语言指针小结(一)---- *p++与*++p;(*p)++ 与 ++(*p)的解释
1、*p++ 等同于 *p; p += 1; #include <stdio.h> int main(void) { int a[5] = {555, 444, 333, 222, 111}; int *p; p = a; // p = &a[0]; // p += 1; //指针+1,表示指向下一格 printf("*p = %d.\n", *p++); for (int i = 0; i < 5; i++){ prin
小火柴棒
2021/06/09
5.1K0
P2P技术详解(三):P2P中的NAT穿越(打洞)方案详解(进阶分析篇)
接本系列的上一篇《P2P技术详解(二):P2P中的NAT穿越(打洞)方案详解(基本原理篇)》,本篇将深入分析各种NAT穿越(打洞)方案的技术实现原理和数据交互过程,希望能助你透彻理解它们。
JackJiang
2020/12/14
6.3K0
int(*p)[4] int*p[4]
1、int(*p)[4];------p为指向含4个元素的一维整形数组的指针变量(是指针) #include <stdio.h> #include <stdlib.h> int main() { int a[4]={1,2,3,4}; int (*p)[4]; p=&a; printf("%d\n",(*p)[3]); printf("%d\n",*p); return 0; } 2、int *p[4];-------定义指针数组p,它由4个指向整型数据的
谙忆
2021/01/19
2K0
P2P
版权声明:本文为博主原创文章,转载请注明博客地址: https://blog.csdn.net/zy010101/article/details/88637902
zy010101
2019/05/25
2.4K0
java p2p实例_java文件p2p传输[通俗易懂]
java模仿电驴、迅雷实现多线程文件传输,可用于局域网或internet文件传输发送,程序采用套接字实现p2p(即点到点)文件传输。
全栈程序员站长
2022/09/13
1.7K0
p2p 大文件分发技术在游戏、视频领域的应用
P2P分发加速技术,可实现加速下载和节省带宽的作用,非常适合网游、视频、大文件等资源分发领域,尤其是在端游领域,可以用于定制属于自己的游戏下载器launcher,实现属于自己的P2P个性化。目前搜狐畅游、巨人网络等多家知名企业已使用该技术,为企业很好的解决了端游下载慢、占用大量带宽的问题,极大的降低了运营成本。
点量小崔
2019/02/19
1.7K0
p2p 大文件分发技术在游戏、视频领域的应用
初识P3P
Google 标签: P3P, 第三方cookie, 隐私策略, http head
py3study
2020/01/06
1.8K0
指针 *p++ 与 (*p)++ 的区别
C语言的指针(pointer),是内存中存储单元的存储地址,指针变量就是专门用来存储其他变量的地址的变量。
叶茂林
2023/07/28
1610
比特币p2p协议_协议栈p2p
比特币主网络:大约5000-8000个运行着不同版本比特币核心客户端(Bitcoin Core)的监听节点 + 以及几百个运行着各类比特币P2P协议的应用,一小部分节点也是挖矿节点,大型公司运行 着基于Bitcoin核心客户端的全节点客户端(它们具有区块链的完整拷贝及网络节点,但不具备挖矿及钱包功能),这些节点是网络中的边缘路由器(edgerouters),通过它们可以搭建其他服务,例如交易所、钱包、区块浏览器、商家支付处理。
全栈程序员站长
2022/09/27
1.2K0
比特币p2p协议_协议栈p2p
CDN+P2P在大规模直播&实时直播的技术实践
大家好,我是爱奇艺的周志伟,今天会跟大家分享爱奇艺的HCDN直播,可能大家对爱奇艺比较了解,但是HCDN可能不是太清楚。HCDN在我们内部是一个部门的名称,也是一种技术方式,它是通过庞大的CDN网络和P2P网络为公司所有的产品提供视频服务,主要包括点播和直播两大部分,今天主要跟大家分享直播这一部分。我的分享大概由四大部分组成,首先是直播背景,接着会介绍大规模直播,也就是我们现在主要的直播方式,以及实时直播,最后做一些展望。
LiveVideoStack
2021/09/02
3.1K0
CDN+P2P在大规模直播&实时直播的技术实践
P2P RTMFP Server - MonaServer 中事件(Event)的基本使用
当Server的app被创建的时候并且第一次执行到的时候,才会调用这个事件,这个事件的第一个参数是app的path
用户3765803
2019/03/05
9840
Rust 编写的 P2P 蠕虫:P2PInfect
近日研究人员发现了一个新型 P2P 蠕虫,将其命名为 P2PInfect。该蠕虫采用 Rust 语言编写,以 Redis 服务为攻击目标。研究人员在超过三十万个对外暴露的 Redis 中发现了 934 个可能受到该蠕虫影响的实例。
FB客服
2023/09/18
4090
Rust 编写的 P2P 蠕虫:P2PInfect
指针讲解:*&p和&*p
一讲到指针,不少同学就会觉得云里雾里。首先要明白,指针和地址是一个概念;然后明白指针和指针变量的区别。
用户6755376
2020/02/12
8150
jupyter notebook中只有P
python3 -m pip install ipykernel python3 -m ipykernel install --user 这个成功的前提就是电脑本身已经有了py2和py3danshi
py3study
2020/01/06
7790
在Android P上使用Http
不少同学在适配Android P的时候会遇到not permitted by network security policy问题:
JarvanMo
2018/10/15
2.1K0
P2P技术介绍
  P2P即Peer to Peer,称为对等连接或对等网络,P2P技术主要指由硬件形成连接后的信息控制技术,其代表形式是软件。
全栈程序员站长
2022/09/06
1.2K0
P2P通信原理
我发一条微信给你,这不是 P2P。因为消息并不是直接从我手机发送到你的手机,而是从我手机先发送到微信的服务器,服务器再转发到你的手机上(当然,转发给你之前,还会把数据存到服务器),像下边这样:
naget
2020/05/07
4.7K0

相似问题

在数据库优先方法中从缺省实体模型类派生模型类

10

实体框架从数据库更新模型问题

11

实体框架有问题。添加新行

25

实体框架数据库优先方法

13

刷新实体框架中使用数据库优先方法模型创建的实体中的数据

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档