【发布时间】:2019-10-30 02:50:25
【问题描述】:
我有一个来自视频的 R、G 和 B 信号向量以及帧捕获时间,每个向量大小(如R)是1 x 100 double。我想从我拥有的这些 RGB 信号向量中生成色调。我从维基百科找到它的公式,它看起来如下:
RGB.mat:下面是 R、G、B、t 的示例。每个都是 1x800 双倍的向量,我这里只包括了一个 5:
R = 12.7 15.7 15.9 15.8 15.7
G= 12.7 12.7 12.7 12.5 12.4
B = 16.4 16.1 16.1 16.0 15.9
t = 0.03 0.06 0.10 0.13 0.16
所以,我是 Matlab 的新手,我自己尝试过,完整的代码是:
%% load R and G and B data
load('RGB.mat')
subplot(3,1,1)
plot(t,R,'r')
subplot(3,1,2)
plot(t,G,'g')
subplot(3,1,3)
plot(t,B,'b')
T1 = max([R; G; B]);
T2 = min([R; G; B]);
T3 = T1 -T2
% get hue
%R, G, B are row vectors
ncols = length([R, G, B]);
hprime = zeros(1, ncols);
for H = 1:ncols
if T3(H) == 0
hprime(H) = 0;
elseif T1(H) == R(H)
hprime(H) = mod((G(H)-B(H))/T3(H), 6);
elseif T1(H) == G(H)
hprime(H) = ((B(H)-R(H))/T3(H))+2;
elseif T1(H) == B(H)
hprime(H) = ((R(H)-G(H))/T3(H))+4;
else
error('undefined hue at index %d', H);
end
end
我发现了一些类似的帖子可以回答我的问题,例如1,但它使用的语言不是 Matlab。 如果您可以为我也可以在我身边运行的代码提供帮助,那就太好了。
【问题讨论】:
-
将
ncols = length([R, G, B]);更改为ncols = length(R);。您遇到了越界错误。 -
@beaker 谢谢你的评论。确实如此。我错了。现在修复了。我想知道您是否对我如何标准化原始色调有任何建议。谢谢。
-
啊,那是你的问题吗?我认为
H = 60 * hprime会给你度数的答案。您还应该通过除以 255 来标准化 RGB 值。