【发布时间】:2016-08-05 18:11:46
【问题描述】:
我想将 RGB 图像矩阵转换为对应的 Wavelenth 矩阵。如果有任何方法或算法,请在此处提及。
【问题讨论】:
-
我的回答对您有帮助吗?
-
波长以纳米为单位的光波大小?你不能这样做,只有非常小的一组值对应于一个波长。例如,您没有棕色或粉红色的波长。
标签: javascript scilab
我想将 RGB 图像矩阵转换为对应的 Wavelenth 矩阵。如果有任何方法或算法,请在此处提及。
【问题讨论】:
标签: javascript scilab
查看其他答案,您可以分两步进行:
从 RGB 转换为 HSV
function [h,s,v] = rgb2hsv(r, g, b)
MAX_PIXEL_VALUE = 255.0;
assert_checktrue ( r <= MAX_PIXEL_VALUE )
assert_checktrue ( g <= MAX_PIXEL_VALUE )
assert_checktrue ( b <= MAX_PIXEL_VALUE )
r = r / MAX_PIXEL_VALUE;
g = g / MAX_PIXEL_VALUE;
b = b / MAX_PIXEL_VALUE;
max_val = max(r, g, b);
min_val = min(r, g, b);
v = max_val;
if max_val == 0.0 then
s = 0;
h = 0;
elseif (max_val - min_val) == 0.0 then
s = 0;
h = 0;
else
s = (max_val - min_val) / max_val;
if max_val == r then
h = 60 * ((g - b) / (max_val - min_val)) + 0;
elseif max_val == g then
h = 60 * ((b - r) / (max_val - min_val)) + 120;
else
h = 60 * ((r - g) / (max_val - min_val)) + 240;
end
end
if h < 0 then
h = h + 360.0;
end
h = h / 2;
s = s * MAX_PIXEL_VALUE;
v = v * MAX_PIXEL_VALUE;
return [h, s, v]
endfunction
从色调转换为波长
function wavelength = hue2wavelength(hue)
// There is nothing corresponding to magenta in the light spectrum,
// So let's assume that we only use hue values between 0 and 270.
assert_checktrue(hue >= 0);
assert_checktrue(hue <= 270);
// Estimating that the usable part of the visible spectrum is 450-620nm,
// with wavelength (in nm) and hue value (in degrees), you can improvise this:
wavelength = 620 - 170 / 270 * hue;
endfunction
放在一起
function wavelength = rgb2wavelength(r,g,b)
[h,s,v] = rgb2hsv(r,g,b);
wavelength = hue2wavelength(h);
endfunction
【讨论】: