如何把一部黑白电影修复成彩色的

作者: gaoshine | 来源:发表于2018-02-23 08:48 被阅读557次

    如何把一部黑白电影修复成彩色的

    记忆中,小时候经常看露天电影(不小心暴露了年龄).印象中大都是些黑白片,像什么"地雷战","地道战","小兵张嘎"什么的.
    如今,这些老影片都已经成了尘封的记忆了.即便如此,偶尔拿出来看看,也觉得很是精彩,貌似现在有些翻拍成电视剧的,像是"小兵张嘎"什么的,看起来没有原先影片的味道. 只是老电影都是黑白的,能不能修复成彩色的呢?
    做过图形处理的应该了解原理,黑白胶片中原始不包含色彩信息,传统的老照片和老胶片都是人一帧一帧手工着色成的,两小时影片一共十七万两千八百帧,成本相当高.
    随着技术的发展,手工着色技术慢慢被数字着色技术取代,但是为了细节和效果,成本依然高昂.

    黑白老电影

    随着人工智能技术的发展,采用深度学习算法逐步可以在黑白图像的彩色化方面暂露头脚,机器实现高速运转,自动着色,貌似我的那个愿望就可以实现了.
    今天动手实践一下我的想法.

    其实有关黑白照片着色的文章可以参见我的另外一篇文章.keras学习笔记-黑白照片自动着色的神经网络-Beta版

    01. 实现思路:

    有关黑白电影修复成彩色的思路其实很简单.

    1. 把电影转成一帧帧的图像(黑白图像)
    2. 通过深度学习算法把图像转换成彩色的
    3. 把一帧帧转换成彩色的图像合成电影

    基本上和把大象放到冰箱里是一个步骤 :)

    02.电影转成图片

    为了做演示和验证,本次试验每秒保存一帧图像而且也做了50%的缩放,针对实际状况应该是25帧.


    小兵张嘎片段

    简书上支持上传的文件不大于5M,所以就转成gif,并限制了大小.

    %matplotlib inline 
    import matplotlib.pyplot as plt
    from IPython import display
    import cv2
    
    
    
    # 采集录像
    vs =  './data/xiaobingzhangga.mp4'
    video_capture = cv2.VideoCapture(vs)
    i = 0
    j = 10000
    while True:
        # 捕获单帧图像
        ret, frame = video_capture.read()
        # 显示图像
        cv2.imshow('Video', frame)
        
        i = i + 1
        if i>100:
            if i%25:
                j = j + 1
                # 将原图缩小到1/2大小保存
                save_frame = cv2.resize(frame, (0, 0), fx=0.5, fy=0.5)
                cv2.cv2.imwrite("./output/%d.jpg" % j, save_frame)
        
        # 按 'q' 退出!
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    
    # 释放摄像头资源
    video_capture.release()
    cv2.destroyAllWindows()
    

    03.黑白图片的彩色处理

    这部分是处理的关键,实际上采用我以前的文章的算法也可以,不过是模型和训练数据较少,效果不好,这次采用优图的图片处理API,效果更加出色.
    有关代码我把主要处理的部分贴出来:

    import requests,json
    from urllib.parse import quote
    Url = 'https://openai.qq.com/api/json/ai/GetMultiAI'
    
    
    def send_pic(appid, auth_key, picurl,picbase64):
        url = Url    
        values = """{
            "base":{
            "appid": "%d",
            "auth_key": "%s",
            "cmds":["CvOldPhotoRescovery"]},
            "media_url": "%s",
            "media_base64": "%s"
            }""" % (appid, auth_key, picurl,picbase64)
        
        headers={'Content-Type': 'application/json; charset=UTF-8'}
        r = requests.post(url, data=values,headers=headers)
        print(values)
        print(r.text)
        print(r.headers)
    

    具体使用可以看看官网的API文档.

    主要就是把每张图片着色保存.

    着色后效果

    最后.把这些图片合成视频,这个过程就OK了.

    04.结果评估

    针对图片的着色效果,感觉基本上不错,细节上还要进一步做处理.如果能够把深度学习的模型更加完善一下,针对电影的特定场景做一些场景的训练,那么计算机可以达到或超越人工着色的水准,那么这样技术用于老电影的处理,将大大降低处理成本,是那些经典老胶片焕发新的活力.
    现在拍一部新电影,动辄数上亿,如果处理好老胶片不用太多费用变成全新的彩色胶片重新上映,经济效益也不可估量啊!希望有识之士能够早点动手.

    简书的上传文件会做优化和压缩,所以我上传上的图片普遍会降低质量:
    大家看几张截图:


    10230.jpeg
    10268.jpeg

    相关文章

      网友评论

      本文标题:如何把一部黑白电影修复成彩色的

      本文链接:https://www.haomeiwen.com/subject/ujmtxftx.html