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

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

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

如何把一部黑白电影修复成彩色的_第1张图片
黑白老电影

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

其实有关黑白照片着色的文章可以参见我的另外一篇文章.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.结果评估

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

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


如何把一部黑白电影修复成彩色的_第2张图片
10230.jpeg

如何把一部黑白电影修复成彩色的_第3张图片
10268.jpeg

你可能感兴趣的:(如何把一部黑白电影修复成彩色的)