最初

作为第一篇,这里介绍一下我对于关键帧提取算法效率的计算方法。

同时要考虑时间和正确率,两者占比为 4 : 6 4:6 4:6
满分 10 10 10分

对于 6 6 6的部分,一旦取到了对应场景的关键帧,该部分 + 1 +1 +1
正确性应该是对于每个场景是等价的,所以最后取平均即可。

对于 4 4 4的部分,我们计算多余的占需要得到的总关键帧的5倍的占比,每个场景和 100 % 100\% 100%取最值。
最后取平均即可。
但是需要注意的是,只有拿到了 6 6 6分,才可能有 4 4 4分;所以需要判断一下。

最后两者加权得到分数。

参考自
《 A N O V E L V I D E O C O P Y D E T E C T I O N 《A NOVEL VIDEO COPY DETECTION 《ANOVELVIDEOCOPYDETECTION
M E T H O D B A S E D O N S T A T I S T I C A L A N A L Y S I S 》 METHOD BASED ON STATISTICAL ANALYSIS》 METHODBASEDONSTATISTICALANALYSIS》

作者
H y e − J e o n g C h o Hye-Jeong Cho Hye−JeongCho等人

RCC

这里介绍一下相关系数 R C C RCC RCC,用于表示两者之间相关性。

R C C = 1 − 6 ∗ d i f f n ∗ ( n 2 − 1 ) RCC = 1 - \frac{6*diff}{n*(n^2-1)} RCC=1−n∗(n2−1)6∗diff​,越接近 1 1 1表示越相关

这里的差值,论文用的欧式距离。

那么具体是利用什么进行比较呢?

利用的是每张图的灰度信息,得到灰度图后,分成 4 4 4个块。
对于这 4 4 4个块,转换成有序度量,然后进行比较。
具体就是对于这 4 4 4个块,求平均亮度值,然后排序,得到这 4 4 4个点的排序后下标。

然后求相邻 R C C < k RCC<k RCC<k的帧作为关键帧。
这个 k k k是可以学习的。

最终得到的效率为 5.76 5.76 5.76

代码如下:

import numpy as np
import cv2ansl = [1,94,132,154,162,177,222,236,252,268,286,310,322,255,373,401,
423,431,444,498,546,594,627,681,759,800,832,846,932,1235,1369,1438,1529,1581,1847]
ansr = [93,131,153,161,176,221,235,251,267,285,309,321,354,372,400,
422,430,443,497,545,593,626,680,758,799,831,845,931,1234,1368,1437,
1528,1580,1846,2139]#关键帧区间
ansl = np.array(ansl)
ansr = np.array(ansr)cap = cv2.VideoCapture('D:/ai/CV/pyt/1.mp4')
Frame_rate = cap.get(5)#一秒多少帧
Frame_number = cap.get(7)#帧数
Frame_time = 1000 / Frame_rate;#一帧多少秒def get_block(img):img = np.array(img)row = img.shape[0] // 2col = img.shape[1] // 2L = []for i in range(2):for j in range(2):L.append(np.sum(img[i*row:(i+1)*row,j*col:(j+1)*col])/(row*col))L = np.array(L)L = L.ravel()L = np.argsort(L)return Ldef RCC(img1,img2):diff = 0for i in range(4):diff += np.power(img1[i]-img2[i],2)rcc = 1 - 6 * diff / (4 * (4 ** 2 - 1))return rccdef get_img(now_time = 0,get_number = Frame_number):#便于算法学习swift_img = []#转换后index = 0#标记第几个帧time = now_time#当前时间while (cap.isOpened()):cap.set(cv2.CAP_PROP_POS_MSEC,time)ret,img = cap.read()#获取图像if not ret:breakimg0 = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#转换成灰度图img1 = get_block(img0)swift_img.append(img1)time += Frame_timeindex += 1if index >= get_number:break
#        if index % 50 ==0:
#            print("当前到达"+str(index))swift_img = np.array(swift_img)return swift_imgdef get_key_frame(swift_img,standard):L = []for i in range(swift_img.shape[0]-1):tmp = RCC(swift_img[i],swift_img[i+1])if tmp < standard:L.append(True)else:L.append(False)L.append(False)L = np.array(L)return Ldef preserve(L):num = 0time = 0for i in range(L.shape[0]):if L[i] == False:continuenum += 1cap.set(cv2.CAP_PROP_POS_MSEC,time)ret,img = cap.read()#获取图像cv2.imwrite('./1.1/{0:05d}.jpg'.format(num),img)#保存关键帧time += Frame_timedef cal_ans(cal_L,l,r):rate = []add = 0for j in range(ansl.shape[0]):num = 0if not (l <= j and j <= r):continuell = ansl[j]rr = ansr[j]for i in range(cal_L.shape[0]):if cal_L[i] == False:continueif i + ansl[l] >= ll and i + ansl[l] <= rr:num += 1if num == 0:rate.append(0.0)else:if num == 1:rate.append(4.0)continueadd += num - 1rate.append(4.0)rate = np.array(rate)ret = np.sum(rate) / rate.shape[0]print("多余的个数:")print(add)add = add / (5 * (r - l + 1))add = min(add , 1)print("多余的占比:")print(add)print("正确的评分:")print(ret)ret += 6 * (1 - add)print("评分是:")print(ret)return retdef study():stdad = 1mmax = 0lindex = 4rindex = 10for i in range(11):tmp = 1.0 - 0.05 * iprint("当前参数: "+str(tmp))tmp_img = get_img(ansl[lindex],ansr[rindex])tmp_L = get_key_frame(tmp_img,tmp)ttmp = cal_ans(tmp_L,lindex,rindex)if ttmp > mmax:stdad = tmpmmax = ttmpprint("分割线--------------------")return stdadstandard = study()
print("最终参数"+str(standard))
swift_img = get_img()
cal_L= get_key_frame(swift_img,standard)
cal_ans(cal_L,0,ansl.shape[0]-1)
#preserve(cal_L)

关键帧提取——RCC提取关键帧(1)相关推荐

  1. 一种基于深度学习的目标检测提取视频图像关键帧的方法

    摘要:针对传统的关键帧提取方法误差率高.实时性差等问题,提出了一种基于深度学习的目标检测提取视频图像关键帧的方法,分类提取列车头部.尾部及车身所在关键帧.在关键帧提取过程中,重点研究了基于SIFT特征 ...

  2. python视频提取关键帧_如何使用Python提取视频的关键帧?

    在很多场景下,我们不想或者不能处理视频的每一帧图片,这时我们希望能够从视频中提取出一些重要的帧进行处理,这个过程我们称为视频关键帧提取. 关键帧提取算法多种多样,如何实现主要取决于你对于关键帧的定义. ...

  3. php 字符串转数组 提取中文 提取英文 字符串类型

    获取字符串类型 /*** 判断中英文*/ public function checkStr($str){$output = ''; ///\<[\s\S]*\>/i$a = preg_ma ...

  4. Flash中的“插入关键帧”和“插入空白关键帧”的区别

    1.关键帧(Keyframe): 上面这个例子中,提起膝盖与放下膝盖两个动作所在的帧就是关键帧.关键帧有别于其他帧,它是一段动画起止的原型,其间所有的动画都是基于这个起止原型进行变化的. 关键帧定义了 ...

  5. 视频提取音频 - 手机视频在线提取音频提取器

    怎样将视频中的音频提取出来?一刀工具箱提供一键可将手机相册中的视频提取音频,便捷的快速获取到视频中的音频文件,视频提取音频的软件,免费转换 mp3 格式的工具. 代码片段 buildVideo(){l ...

  6. 高级性能测试系列《13.察看结果树中的显示顺序、 响应的提取--json提取器》

    目录 一.注意 二.察看结果树中的显示顺序 三.响应的提取--json提取器(上) 1.绝对路径写法 2.相对路径写法 一.注意 1.察看结果树中,请求显示红色或绿色. 察看结果树中,绿色只是代表网络 ...

  7. php中文字符串转英文,php 字符串转数组 提取中文 提取英文 字符串类型

    获取字符串类型/** * 判断中英文 */ public function checkStr($str){ $output = ''; ///\/i $a = preg_match('/[' . ch ...

  8. C4D如何一键清除所有动画关键帧?批量删除关键帧

    <C4D的十万个为什么>首发于 公众号:苦七君 免费搜索查看更多问题:kuqijun.com 问题: C4D如何一键清除所有动画关键帧?批量删除关键帧 答案: 选择有动画的模型然后,在属性 ...

  9. 用图片文字提取大师提取图片上面的文字

    用图片文字提取大师提取图片上面的文字 扫描图片相信大家都不会陌生,很多的纸质文件或是其它东西,我们都可以通过扫描仪进行扫描,然后以扫描图片的方式出现在电脑中.但是这些扫描图片中的文字不能随意的进行编辑 ...

最新文章

  1. linux服务器之LVS、Nginx和HAProxy负载均衡器的对比
  2. ORACLE 几个我忍了他很多年的问题
  3. android actionbaractivity 错误,Android studio无法解析ActionBarActivity
  4. 读《高效程序员的45个习惯——敏捷开发修炼之道》
  5. Python的线性查找(作业)
  6. 华为手机使用应用沙盒动态修改分辨率参数
  7. 墙面有几种装修方法_卧室装修静音环保攻略,赶紧收藏起
  8. 在html中如何写日期的代码,日期html代码
  9. 图片保存为YUV格式
  10. 计算机英语词汇电子书,计算机英语词汇-打印版.pdf
  11. 常用z反变换公式表_高中数学三角函数题型总结归纳,同角三角函数及诱导公式...
  12. 小数分频器vhdl实现_使用VHDL进行分频器设计(含小数)
  13. 洛谷 P2906 [USACO08OPEN]牛的街区Cow Neighborhoods | Set+并查集
  14. 类iGoogle实现参考资料
  15. 竖流式沉淀池集水槽设计计算_竖流沉淀池设计计算书.doc
  16. 优秀logo,最基础的设计技巧(四)
  17. git上传文件到gitee
  18. SEO为什么没办法快速见效
  19. Windows无法启动某个服务--错误2:系统找不到指定的文件
  20. java eden space_JVM GC调优一则–增大Eden Space提高性能

热门文章

  1. 2014年中国支付行业的十大事件:突袭、强攻、暗战与围剿
  2. 百度地图电子围栏判断
  3. python HMAC SHA256 加密(python3 HmacSHA256加密)
  4. 涨知识了!苹果手机清理缓存原来这么简单,一键就能清出几个G
  5. Mongodb的集群
  6. 【读书笔记】explain详细解释
  7. ETL工具之Informatica
  8. 竞价广告每次点击出价多少钱是固定的吗?
  9. 深度学习经典卷积神经网络之VGGNet
  10. IIS6.0 asp.asa.cer.cdx. 原理