Чтение изображений Nikon raw (NEF) с помощью rawpy vs imageio в python - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь правильно прочитать изображение Nikon RAW (NEF) и обнаружил, что было несколько предложений; rawpy, imageio и simple numpy читает:

RAW Обработка изображений в Python

Однако при чтении в Nikon RAW я получаю некоторые странные результаты изображения (пока imageio не работает с Sony ARW, другой формат, который я хотел бы прочитать).

Код здесь:

# -*- coding: utf-8 -*-
"""
Code to import RAW image from Nikon NEF file, in two ways.  
Display with opencv and matplotlib 
"""

import numpy as np
import cv2
import rawpy
import matplotlib
import matplotlib.pyplot as plt
import imageio

# Reading a Nikon RAW (NEF) image
# This uses rawpy library
filename='DSC_0001.NEF'

print("reading RAW file using rawpy.")
raw = rawpy.imread(filename)
image_rawpy = raw.postprocess()
print("Size of image read:" + str(image_rawpy.shape))

# Optional 
# Convert RGB to BGR 
# image_rawpy = image_rawpy[:, :, ::-1].copy()

####################
# Show using matplotlib
fig = plt.figure("image_rawpy read file: " + filename)
plt_image = image_rawpy
imgplot = plt.imshow(plt_image)
plt.show(block=False)
# Show using OpenCV
cv2.imshow("image_rawpy read file: " + filename, image_rawpy)

####################
# This uses imageio 
print("reading RAW file using rawio.")
image_imageio=imageio.imread(filename)
print("Size of image read:" + str(image_imageio.shape))
fig2 = plt.figure("image_imageio read file: " + filename)
plt_image2 = image_imageio
imgplot2 = plt.imshow(plt_image2)
plt.show(block=False)
# Show using OpenCV
cv2.imshow("image_imageio read file: " + filename, image_imageio)


cv2.waitKey()
cv2.destroyAllWindows()

При чтении с помощью rawpy, он читает полный размер массива (4000x6000), но с imageio кажется, что он читает только миниатюру (120x160). Метод rawpy показывает изображение с небольшим количеством розового оттенка (см. Примечание ниже), а изображение imageio представляет собой простое изображение в градациях серого.

К счастью, эти результаты одинаковы как для Ubuntu, так и для Win10.

[Примечание - камера Nikon настроена для инфракрасной фотографии с удалением и добавлением внутренних фильтров, к которым мы не можем получить доступ. Это будет влиять на то, что попадает на сенсор, но полученное изображение должно просматриваться так же со стороны программного обеспечения.]

Вопрос

Любые лучшие способы чтения Nikon RAW изображения в Python? Каноническая ссылка была пропущена?

...