摄像的流程:从被拍摄景物上传来的入射光依次穿过相机的光学器件,颜色滤镜后到达传感器,经过模拟前端转换为数字信号,最后通过相机内的图像处理系统转换为最终的RGB格式图像并进行存储。
本次实验要实现的就是:相机内的图像处理系统。
即下图红色区域。
什么是Raw图像:经过颜色滤波阵列(CFA)到达传感器的光线,经过模拟前端放大和模数转换器的转换的图像称为RAW图像。RAW图像没有颜色,显示出像马赛克一样的方块。就像下图:
1、将一张.CR2图片变成.tiff格式的图片
首先第一步将raw image 变成tiff文件,因为cr2格式的图像不能被skimage处理。
用dcraw这个工具,在cmd(windows操作系统下)里面敲:dcraw -4 -d -v -T banana_slug.CR2得到banana_slug.CR2.tiff
以及相关的色彩信息。
Scaling with darkness <black>, saturation <white>, and
multipliers <r_scale> <g_scale> <b_scale> <g_scale>
执行了这一步会生成一个勉强还能看得见的图,但是指示里面也说不要用这个图,咱就照着呗。
再次执行dcraw -4 -D -T bata\banana_slug.cr2
原来生成的那个图,被一个黑黑的图覆盖掉了,指示说咱就用这个图,继续后面的操作。(咋感觉是在坑我)
2、初始化图片,查看图片的长宽,位深度,把图片变成线性,双精度图片。
img = io.imread(".\data\\banana_slug.tiff") #4290*285
plt.imshow(img)
plt.show()
用io.imread()读那个Windows里面显示为黑黑的图,竟然能看得见。
def initials(img):
print("图片类型type(image)=", type(img))
print("像素位数image.dtype=", img.dtype)
print("形状:",img.shape)
width = img.shape[0]
height = img.shape[1]
print("图片的width=%d,height=%d" % (img.shape[0], img.shape[1]))
print("***********************************")
img_array = img.astype(np.double) #感觉这样应该算转化为双精度了吧