Read color value from custom chart

조회 수: 4 (최근 30일)
Beycan Ibrahimoglu
Beycan Ibrahimoglu 2022년 3월 22일
편집: DGM 2022년 3월 22일
Hello,
I have custom color chart, as in the picture.
I have rgb color codes for each color.
I would like to read numerical value of new color from this scale.
Thanks in advance for helps.
Best Regards,
Ben

답변 (1개)

DGM
DGM 2022년 3월 22일
편집: DGM 2022년 3월 22일
I'm sure there are better ways, but this is what I rolled with off the top of my head.
% the information from the swatch chart
CT = [1 1 1;
0.9451 0.7922 0.8392;
0.851 0.5333 0.6588;
0.8392 0.4588 0.6078;
0.7608 0.3451 0.5451;
0.5686 0.2392 0.4314];
key = [0 25 50 100 250 500]';
imshow(permute(CT,[3 1 2])) % show the chart colors
% pretend these are our sample colors to look up
samples = [0.8451 0.4960 0.6333;
0.8039 0.4078 0.5765;
0.6471 0.2824 0.4824;
0.6745 0.5098 0.6627];
imshow(permute(samples,[3 1 2])) % show the sample colors
% ignore samples which are not within the same hue range
samphue = rgb2hsv(samples);
samphue = samphue(:,1);
goodcolors = (samphue >= 0.89 & samphue <= 0.96) | samphue == 0;
samples = samples(goodcolors,:);
% find color distances
CTlab = permute(rgb2lab(CT),[1 3 2]);
samplab = permute(rgb2lab(samples),[3 1 2]);
DE = sqrt(sum((CTlab-samplab).^2,3)); % one column per sample
% find sample value by linear interpolation between nearest colors
sampvalue = zeros(size(samples,1),1);
for k = 1:size(samples,1)
[~,idx] = mink(DE(:,k),2);
idx = sort(idx);
sampvalue(k) = key(idx(1)) + range(key(idx))*DE(idx(1),k)/sum(DE(idx,k));
end
sampvalue
sampvalue = 3×1
75.2198 165.6172 396.7581
Note that some cursory attempt is made to reject colors which aren't on the same trajectory. Also, it's assumed that any sample colors extracted from photographic sources came from photographs taken under conditions (illumination and camera settings) comparable to those which the chart represents.

카테고리

Help CenterFile Exchange에서 Color and Styling에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by