我在显示器上工作,我想从XYZ内插RGB值。我使用设备来测量与RGB(9x9x9)值相对应的XYZ值。现在,我有图像的XYZ,我想使用测得的XYZ和RGB的插值转换为显示RGB。
我已经创建了一个LUT,可以通过查找最小的CIELAB差异来内插值,并且效果很好。但是它非常慢,因为它是逐像素的。 我尝试了Matlab或interpn的interp3函数。我已经尝试了各种方法,但不确定如何将输入内容输入这些功能。 我的数据看起来像这样(例如,我没有发布9x9x9数据)。
XYZlut=[ 0.085954 0.097486 0.13636
0.19496 0.16676 0.62822
0.30154 0.19816 1.3158
0.68737 0.35471 3.4668
1.5699 0.69064 8.4565
3.052 1.2449 16.831
6.2012 2.4245 34.592
12.034 4.5791 67.462
22.04 8.2393 123.88
39.937 14.723 224.99];
RGBlut=[0 0 0
0 0 19
0 0 38
0 0 57
0 0 76
0 0 95
0 0 114
0 0 133
0 0 152
0 0 171] ;
NewXYZ= [62.10263 66.39005 169.7117
76.8211 82.24026 201.0852
73.61543 78.18117 195.2129
71.9406 76.70645 190.4692];
[NewXYZ1, NewXYZ2, NewXYZ3]=meshgrid(NewXYZ(:,1),NewXYZ(:,2),NewXYZ(:,3));
newRGB=interp3(XYZlut(:,1),XYZlut(:,2),XYZlut(:,3),RGBlut,NewXYZ1, NewXYZ2, NewXYZ3,'cubic')
我想通过使用XYZlut和RGBlut来插值与NewXYZ对应的newRGB。如果有人指导我如何使用interp3 / interpn或任何其他Matlab函数对这种类型的数据进行插值,将不胜感激。我正在研究Matlab2018b。