raw数据的排列方式(之一)如下图,GRGB;下面的代码将raw数据(dng格式)转成4通道的GGRB数据用于后续处理;

    image.png
    Bayer阵列

    1. import rawpy
    2. import scipy.io
    3. import cv2
    4. import numpy as np
    5. with rawpy.imread("3984_2984.dng") as raw:
    6. # un-blur
    7. # np_img = raw.postprocess(use_camera_wb=True, half_size=False, no_auto_bright=True, output_bps=8)
    8. # scipy.misc.toimage(np_img, high=255, low=0, cmin=0, cmax=255).save("rgb.jpg")
    9. print("===============================")
    10. # print(raw.raw_value(9, 0))
    11. raw_img = raw.raw_image # get raw data
    12. # print(raw_img)
    13. raw_H = raw_img.shape[0]
    14. raw_W = raw_img.shape[1]
    15. if raw.raw_pattern[0, 0] == 0: # CFA=RGGB
    16. raw_G1 = raw_img[1:raw_H:2, 0:raw_W:2]
    17. raw_G2 = raw_img[0:raw_H:2, 1:raw_W:2]
    18. raw_R = raw_img[0:raw_H:2, 0:raw_W:2]
    19. raw_B = raw_img[1:raw_H:2, 1:raw_W:2]
    20. elif raw.raw_pattern[0, 0] == 2: # BGGR
    21. raw_G1 = raw_img[1:raw_H:2, 0:raw_W:2]
    22. raw_G2 = raw_img[0:raw_H:2, 1:raw_W:2]
    23. raw_R = raw_img[1:raw_H:2, 1:raw_W:2]
    24. raw_B = raw_img[0:raw_H:2, 0:raw_W:2]
    25. elif raw.raw_pattern[0, 0] == 1 and raw.raw_pattern[0, 1] == 0: # GRBG
    26. raw_G1 = raw_img[0:raw_H:2, 0:raw_W:2]
    27. raw_G2 = raw_img[1:raw_H:2, 1:raw_W:2]
    28. raw_R = raw_img[1:raw_H:2, 0:raw_W:2]
    29. raw_B = raw_img[0:raw_H:2, 0:raw_W:2]
    30. elif raw.raw_pattern[0, 0] == 1 and raw.raw_pattern[0, 1] == 2: # GBRG
    31. raw_G1 = raw_img[0:raw_H:2, 0:raw_W:2]
    32. raw_G2 = raw_img[1:raw_H:2, 1:raw_W:2]
    33. raw_R = raw_img[1:raw_H:2, 0:raw_W:2]
    34. raw_B = raw_img[0:raw_H:2, 1:raw_W:2]
    35. else:
    36. assert False
    37. # blur
    38. # blur_size = (15, 15)
    39. # G1 = cv2.blur(raw_G1, blur_size)
    40. # G2 = cv2.blur(raw_G2, blur_size)
    41. # R = cv2.blur(raw_R, blur_size)
    42. # B = cv2.blur(raw_B, blur_size)
    43. print("==============================")
    44. np_img = raw.postprocess(use_camera_wb=True, half_size=False, no_auto_bright=True, output_bps=8)
    45. # save raw_img to rgb
    46. scipy.misc.toimage(np_img, high=255, low=0, cmin=0, cmax=255).save("blur_rgb.jpg")