如何还原处理火星车传来的黑白照片

如何还原火星车传来的黑白照片

咱们的火星车祝融号已经成功登陆火星的乌托邦平原,但是迟迟没有发来照片,那是因为祝融号目前并没有与天问一号轨道器建立数据链路,仅依靠直传地球的X波段天线,传输速率最高2B/s,只能传递工程参数.
这几天与轨道器建立链接,每天的数据窗口也很短,即便这样还是发来了几张图片.一张是黑白的,是避障相机拍照的,另外一张是顶部巡视相机拍照的,这张是彩色的.
是避障相机拍照只是用于看清前方物体,看路用的,所以相机采用黑白,另外为了视角更大,采用了广角镜头,所以,我们看到的第一张图片是黑白的,并且有些变形,远处的火星地平线也是弯曲的.
那么,我们能不能通过计算机视觉算法,把变形的图片矫正过来,再通过人工智能算法,把黑白还原成彩色呢?

如何还原处理火星车传来的黑白照片_第1张图片
避障相机拍照

如何还原处理火星车传来的黑白照片_第2张图片
顶部巡视相机拍照的

1. 消除枕形失真

桶形畸变中,从图像的中心点到图像的边缘点图像的相对大小逐渐变小,
看起来就像把一张正常大小的图片包裹在一个球上一样。鱼眼相机,
就是利用这种类型的畸变将一个无限宽的物体平面映射成有限的图像区域
来呈现出一种半球形状的效果的。当使用变焦镜头时如果把焦距调至镜头
的中段就会出现桶形畸变,此外使用广角镜头时桶形畸变的效果最明显。

# 直接上代码
import numpy as np
import cv2

src = cv2.imread('../res/img/mars01.jpg')
width = src.shape[1]
height = src.shape[0]

distCoeff = np.zeros((4, 1), np.float64)

# 矩阵参数
k1 = -0.1e-3  # 复数消除桶形失真
k2 = 0.0
p1 = 0.0
p2 = 0.0

distCoeff[0, 0] = k1
distCoeff[1, 0] = k2
distCoeff[2, 0] = p1
distCoeff[3, 0] = p2

# assume unit matrix for camera
cam = np.eye(3, dtype=np.float32)

cam[0, 2] = width / 2.0  # define center x
cam[1, 2] = height / 2.0 - 100# define center y
cam[0, 0] = 10.  # define focal length x
cam[1, 1] = 10.  # define focal length y

# here the undistortion will be computed
dst = cv2.undistort(src, cam, distCoeff)
cv2.imwrite('m1007.jpg', dst)
cv2.imshow('src',src)
dst = cv2.resize(dst, (0, 0), fx=0.5, fy=0.5)
cv2.imshow('dst', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

处理完后,我们得到如下照片:


如何还原处理火星车传来的黑白照片_第3张图片
矫正后照片

2. 黑白照片着色

有关这个的代码参见我以前的文章: 如何把一部黑白电影修复成彩色的

具体过程从略: 见效果图


矫正后彩色图像

你可能感兴趣的:(如何还原处理火星车传来的黑白照片)