Python コードを実装する手順は次のとおりです。
import numpy as np
import cv2
import os
import matplotlib.pyplot as plt
# 读取多曝光图像
# ... (省略了读取图像的代码)
img_list =[……]
# 提取每个像素的曝光时间
exp_times = np.array([……], dtype=np.float32)
# 估计相机响应函数
calibrateRobertson = cv2.createCalibrateRobertson()
responseRobertson = calibrateRobertson.process(img_list, times=exp_times)
# 显示相机响应函数曲线
x = np.arange(0, 256)
for i in range(responseRobertson.shape[2]):
y = responseRobertson[:, :, i].squeeze()
plt.plot(x, y, label=f'Channel {i+1}')
plt.title('Robertson Camera Response Curve')
plt.xlabel('Pixel Value')
plt.ylabel('Log Exposure')
plt.legend()
plt.show()
このアルゴリズムに従って、必要な多重露出写真と露出時間を置き換え、CRF カーブに適合させて表示することができます。
Robertson のアルゴリズムは各カラー チャネルで独立して計算する必要があるため、3 チャネルの応答関数が必要です。
responseRobertson は 3 次元配列で、3 番目の次元は画像のカラー チャネル (B、G、R) に対応します。したがって、応答関数曲線はカラー チャネルごとに個別にプロットする必要があります。これは、ループ内の各チャネルの応答関数をプロットすることで実現できます。