剔除冗余帧

简介: 剔除冗余帧

一.由来:


根据一则专利复现出来的,原理基本一样,细节上可能有出入


需要达到的目的:


对一段视频中出现的画面,现在需要剔除视频画面中的“相似帧”,也可理解为冗余帧。例如:视屏中为胃镜手术,当探管逐步深入时,画面也会慢慢改变,但是大多数画面是很“相似的”


因此需要将这些“相似的”画面剔除掉。


基本逻辑


前一帧--(比较相似度)--后一帧:若达到“相似度”则剔除后一帧,否则保留后一帧

这里就需要两两比较,逐步剔除。



二.程序构思流程:



对文件夹内的图像归一化(这里归一化可以和原图一样大,此处是方便计算),读取文件夹内的所有图像,第一张和剩下的图像计算cosin值,大于0.5的删除(这里大家可以自行设定阈值),第二张和剩余的计算cosin值,大于0.5的删除,直至最后一张(这里的计算相似度可以替换为其它)

demo:\


# 敲的比较急
import os
from numpy import average, linalg, dot
from PIL import Image
def get_thumbnail(image, size=(480, 480), greyscale=False):
    image = image.resize(size, Image.ANTIALIAS)
    if greyscale:
        image = image.convert('L')
    return image
def image_similarity_vectors_via_numpy(image1, image2):
    image1 = get_thumbnail(image1)
    image2 = get_thumbnail(image2)
    images = [image1, image2]
    vectors = []
    norms = []
    for image in images:
        vector = []
        for pixel_tuple in image.getdata():
            vector.append(average(pixel_tuple))
        vectors.append(vector)
        norms.append(linalg.norm(vector, 2))
    a, b = vectors
    a_norm, b_norm = norms
    res = dot(a / a_norm, b / b_norm)
    return res
def Img_Mapping(image1, image2, file_name, dir_list, other_img_message):  # 这个可以替换
    cosin = image_similarity_vectors_via_numpy(image1, image2)  # 获取两张图的cosin值
    cosin = round(cosin, 3)
    print(cosin)
    if cosin > 0.50:
        os.remove(os.path.join(path, file_name))
        dir_list.remove(other_img_message)
def found_same_img_2(path):
    dir_list = []  # 创建一个空列表
    num_path = len(str(path))
    for img_name in os.listdir(path):
        img_dir = path + img_name      # 拼接好每个照片的绝对路径
        dir_list.append(img_dir)        # 生成一个列表
    print(dir_list)
    print('共:', len(dir_list), '张')  # 返回一共有多少张照片
    for No, img_message in enumerate(dir_list):
        img = Image.open(img_message)
        i = 0
        print(img_message)
        file_names = img_message[num_path:]  # 改
        print(file_names)
        for other_img_message in dir_list[No+1:]:
            i += 1
            other_img = Image.open(other_img_message)# 获取另外一张照片的信息
            file_name = other_img_message[num_path:]
            print(file_name)
            Img_Mapping(img, other_img, file_name, dir_list, other_img_message)
        print('还剩多少次比较:', i, '次')    # 还剩多少次
if __name__ == '__main__':
    path = 'C:/Users/kiven/Desktop/frame/i/'  # 改
    found_same_img_2(path)    # 调用函数



相关文章
|
5月前
|
缓存
计算机网络——数据链路层-可靠传输的实现机制:回退N帧协议GBN(无差错情况、累积确认、有差错情况、发送窗口尺寸)
计算机网络——数据链路层-可靠传输的实现机制:回退N帧协议GBN(无差错情况、累积确认、有差错情况、发送窗口尺寸)
136 0
计算机网络——数据链路层-可靠传输的实现机制:回退N帧协议GBN(无差错情况、累积确认、有差错情况、发送窗口尺寸)
|
6月前
|
调度
知识分享|分段函数线性化及matlab测试
知识分享|分段函数线性化及matlab测试
循环码的编码、译码与循环冗余校验
循环码的编码、译码与循环冗余校验
165 0
循环码的编码、译码与循环冗余校验
|
算法 数据挖掘
scanpy数据整合批次效应去除原理
scanpy数据整合批次效应去除原理
|
负载均衡 网络协议 算法
双点双向重分布导致路由环路,你要怎么解?(下)
双点双向重分布导致路由环路,你要怎么解?(下)
372 2
双点双向重分布导致路由环路,你要怎么解?(下)
|
网络协议 网络架构
双点双向重分布导致路由环路,你要怎么解?(上)
双点双向重分布导致路由环路,你要怎么解?
445 1
双点双向重分布导致路由环路,你要怎么解?(上)
|
机器学习/深度学习 传感器 编解码
【信号处理】基于小波变换的时间重分配多重同步压缩变换TMSST附matlab代码
【信号处理】基于小波变换的时间重分配多重同步压缩变换TMSST附matlab代码
|
数据采集
冗余分析
上一次给大家介绍了如何用R语言进行主成分分析,今天介绍的主角也是PCA的好朋友噢,掌声欢迎我们的第二位小伙伴——冗余分析(RDA)。
1142 0
冗余分析
【计算机网络】数据链路层 : 停止-等待协议 ( 无差错情况 | 有差错情况 | 帧丢失 | 帧出错 | ACK 确认帧丢失 | ACK 确认帧延迟 | 信道利用率公式 | 信道利用率计算 )★(一)
【计算机网络】数据链路层 : 停止-等待协议 ( 无差错情况 | 有差错情况 | 帧丢失 | 帧出错 | ACK 确认帧丢失 | ACK 确认帧延迟 | 信道利用率公式 | 信道利用率计算 )★(一)
324 0