提高拍照稳定性,减少由于抖动带来的影响(角速度计算)

2024-03-21 11:20

本文主要是介绍提高拍照稳定性,减少由于抖动带来的影响(角速度计算),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基本思路

大家应该都听过苏格拉底给学生讲的捡麦穗的故事,本文借鉴了这个想法:把前面一半路作为观察期,记住最好的那根稻穗,在接下来的路程中,若遇到比前面最好那根还要好的,则毫不犹豫的直接选择它。

计算步骤:

分为两步:
1.获取角速度的数据;
2.计算最稳定的时刻。


1.加速度数据的获取

手机下载app:phyphox,里面有测角速度的,并支持csv的表格导出,自己处理一下便可得到数据。
三列分别代表:x、y、z三个方向的数值,可以取一个波动大的来进行分析,这里取了x轴的
在这里插入图片描述

由于习惯,我是喜欢把数据写入txt,这里进行一下转换:

#encoding=utf-8
import csv
import os
# f1=open('D:/共享文件/acc/a1/data.txt','w+')def write_col(path):with open(path,'r') as csvfile:reader = csv.reader(csvfile)column = [row[0] for row in reader]return columnpath='D:/work/1.工作任务/8.防抖函数/a2/gyro/'
files = os.listdir(path)
n=0
for file in files:if file.endswith('csv'):n=n+1cols=write_col(path+file)for i in range(0,len(cols)):col=cols[i]print(col)f=open(path+str(n)+'.txt','a')f.write(col+'\n')f.close()

2.寻找最稳定的一刻
from __future__ import print_function
import math
import random
import numpy as np
import glob
import osdef avg(list1):average = float(sum(list1))/len(list1)return average#同时处理多个文件
f1=open('D:/work/1.工作任务/8.防抖函数/a2/data.txt','w+')
path='D:/work/1.工作任务/8.防抖函数/a2/gyro/'   #遍历的路径,找到txt文本
files = os.listdir(path)
for file in files:if file.endswith('txt'):print(file)n=0ff=open(path+file,'r')   #打开txtsourceInLine=ff.readlines()dataset=[]set2=[]for line in sourceInLine:n=n+1temp1=line.strip('\n')   #读行后去掉'\n'temp2=abs(float(temp1))dataset.append(temp2)    #按原来顺序放进datasetset2.append(temp2)       list_100=dataset[151:250]    #剩下的路程dataset=dataset[1:150]   #作为前面的一半路程dataset.sort()    #数组按升序排序dataset_len=len(dataset)m=max(dataset)print("最大值为:",m)h=int(dataset_len/2)print("中位数为:",dataset[h])f=int(dataset_len/4)print("四分位数为:",dataset[f])yuzhi=int(dataset_len/3)yuzhi=dataset[yuzhi]print("阈值为:",yuzhi)#计算倒数8位的数据的均值、方差a=set2[n-8:n]last_20_avg=avg(a)print("最后20位均值为:",last_20_avg)#从某刻起,开始计算与阈值的差list_100_dif=[]for i in range(99):dif=list_100[i]-yuzhilist_100_dif.append(dif)#上面得到的100个差值,每n个作为一组,若一组中最大值<0,则视为通过,计算均值,放到新列表n=0x=3   #选定连续多少个点,作为稳定点y=8   #计算稳定点后面y个点的均值front=[]f8=[]#计算前50个点的稳定点最小均值for i in range(0,47):list_f=list_100_dif[i:i+x]avg_f=avg(list_f)front.append(avg_f)list_f.sort()if list_f[x-1]<0:if list_100[i]<list_100[i-1]:list_f8=list_100[i+x:i+x+y]     #从i+x开始,往后推y个点avg_f8=avg(list_f8)f8.append(avg_f8)else:f8.append(avg_f)else:f8.append(avg_f)# min_f3=min(front)min_f8=min(f8)#在后50个点找稳定点for i in range(50,97):list_b=list_100_dif[i:i+x]    #1-,21-40,41-60,61-80,81-100avg_b=avg(list_b)list_b.sort()               #升序,如果数列中最后一个数<0,则代表数列所以都<0,即连续20个点都小于阈值if list_b[x-1]<0:if list_100[i]<list_100[i-1]:if avg_b<min_f8:list_b8=list_100[i+x:i+x+y]     #从i+x开始,往后推y个点avg_b8=avg(list_b8)n=n+1print("最优稳定点均值为:",avg_b8)compare = avg_b8 - last_20_avgprint("对比结果为:", compare)i=str(i)breakif n==0:print("没有找到稳定点,开拍吧!")avg_b8=last_20_avgcompare=0i=0line=file+","+str(m)+","+str(dataset[h])+","+str(dataset[f])+","+str(yuzhi)+","+str(last_20_avg)+","+str(avg_b8)+','+str(i)+","+str(compare)+"\n"f1.write(line)				

这篇关于提高拍照稳定性,减少由于抖动带来的影响(角速度计算)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/832522

相关文章

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Java使用MethodHandle来替代反射,提高性能问题

《Java使用MethodHandle来替代反射,提高性能问题》:本文主要介绍Java使用MethodHandle来替代反射,提高性能问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录一、认识MethodHandle1、简介2、使用方式3、与反射的区别二、示例1、基本使用2、(重要)

使用WPF实现窗口抖动动画效果

《使用WPF实现窗口抖动动画效果》在用户界面设计中,适当的动画反馈可以提升用户体验,尤其是在错误提示、操作失败等场景下,窗口抖动作为一种常见且直观的视觉反馈方式,常用于提醒用户注意当前状态,本文将详细... 目录前言实现思路概述核心代码实现1、 获取目标窗口2、初始化基础位置值3、创建抖动动画4、动画完成后

Java计算经纬度距离的示例代码

《Java计算经纬度距离的示例代码》在Java中计算两个经纬度之间的距离,可以使用多种方法(代码示例均返回米为单位),文中整理了常用的5种方法,感兴趣的小伙伴可以了解一下... 目录1. Haversine公式(中等精度,推荐通用场景)2. 球面余弦定理(简单但精度较低)3. Vincenty公式(高精度,

Java的"伪泛型"变"真泛型"后对性能的影响

《Java的伪泛型变真泛型后对性能的影响》泛型擦除本质上就是擦除与泛型相关的一切信息,例如参数化类型、类型变量等,Javac还将在需要时进行类型检查及强制类型转换,甚至在必要时会合成桥方法,这篇文章主... 目录1、真假泛型2、性能影响泛型存在于Java源代码中,在编译为字节码文件之前都会进行泛型擦除(ty

windows和Linux使用命令行计算文件的MD5值

《windows和Linux使用命令行计算文件的MD5值》在Windows和Linux系统中,您可以使用命令行(终端或命令提示符)来计算文件的MD5值,文章介绍了在Windows和Linux/macO... 目录在Windows上:在linux或MACOS上:总结在Windows上:可以使用certuti

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

SpringBoot中的404错误:原因、影响及解决策略

《SpringBoot中的404错误:原因、影响及解决策略》本文详细介绍了SpringBoot中404错误的出现原因、影响以及处理策略,404错误常见于URL路径错误、控制器配置问题、静态资源配置错误... 目录Spring Boot中的404错误:原因、影响及处理策略404错误的出现原因1. URL路径错

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如