使用显示器XYZ和RGB对显示器RGB进行3D插值

时间:2019-04-18 16:04:25

标签: matlab image-processing interpolation

我在显示器上工作,我想从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。

0 个答案:

没有答案