全真教骑士尹志平:色温值、曝光值与RGB颜色值的关系公式?

来源:百度文库 编辑:高校问答 时间:2024/04/27 21:24:48
我要对RAW图像进行白平衡、曝光值调节,寻求色温值、曝光值与RGB颜色值的关系公式?
我要的不是RGB转HS*,我是要调节RAW的白平衡和曝光值算法!!!!!!不过,还是谢谢你!

不好意思
是matlab源代码
应该比较容易懂的

function [hout,s,v] = rgb2hsv(r,g,b)
%RGB2HSV Convert red-green-blue colors to hue-saturation-value.
% H = RGB2HSV(M) converts an RGB color map to an HSV color map.
% Each map is a matrix with any number of rows, exactly three columns,
% and elements in the interval 0 to 1. The columns of the input matrix,
% M, represent intensity of red, blue and green, respectively. The
% columns of the resulting output matrix, H, represent hue, saturation
% and color value, respectively.
%
% HSV = RGB2HSV(RGB) converts the RGB image RGB (3-D array) to the
% equivalent HSV image HSV (3-D array).
%
% CLASS SUPPORT
% -------------
% If the input is an RGB image, it can be of class uint8, uint16, or
% double; the output image is of class double. If the input is a
% colormap, the input and output colormaps are both of class double.
%
% See also HSV2RGB, COLORMAP, RGBPLOT.
% Undocumented syntaxes:
% [H,S,V] = RGB2HSV(R,G,B) converts the RGB image R,G,B to the
% equivalent HSV image H,S,V.
%
% HSV = RGB2HSV(R,G,B) converts the RGB image R,G,B to the
% equivalent HSV image stored in the 3-D array (HSV).
%
% [H,S,V] = RGB2HSV(RGB) converts the RGB image RGB (3-D array) to
% the equivalent HSV image H,S,V.
% See Alvy Ray Smith, Color Gamut Transform Pairs, SIGGRAPH '78.
% C. B. Moler, 8-17-86, 5-10-91, 2-2-92.
% revised by C. Griffin for uint8 inputs 7-26-96
% Copyright (c) 1984-98 by The MathWorks, Inc.
% $Revision: 5.10 $ $Date: 1998/02/26 20:52:28 $
switch nargin
case 1,
if isa(r, 'uint8'),
r = double(r) / 255;
elseif isa(r, 'uint16')
r = double(r) / 65535;
end
case 3,
if isa(r, 'uint8'),
r = double(r) / 255;
elseif isa(r, 'uint16')
r = double(r) / 65535;
end

if isa(g, 'uint8'),
g = double(g) / 255;
elseif isa(g, 'uint16')
g = double(g) / 65535;
end

if isa(b, 'uint8'),
b = double(b) / 255;
elseif isa(b, 'uint16')
b = double(b) / 65535;
end

otherwise,
error('Wrong number of input arguments.');
end

threeD = (ndims(r)==3); % Determine if input includes a 3-D array
if threeD,
g = r(:,:,2); b = r(:,:,3); r = r(:,:,1);
siz = size(r);
r = r(:); g = g(:); b = b(:);
M = [r,g,b];
elseif nargin==1,
M = r;
g = r(:,2); b = r(:,3); r = r(:,1);
siz = size(r);
else
if ~isequal(size(r),size(g),size(b)),
error('R,G,B must all be the same size.');
end
siz = size(r);
r = r(:); g = g(:); b = b(:);
M = [r,g,b];
end
v = max(M')';
s = zeros(size(v));
h = zeros(size(v));
d = (v - min(M')');
k = find(v);
s(k) = d(k)./v(k);
z = ~d;
d = d + z;
k = find(r == v);
h(k) = (g(k) - b(k))./d(k);
k = find(g == v);
h(k) = 2 + (b(k) - r(k))./d(k);
k = find(b == v);
h(k) = 4 + (r(k) - g(k))./d(k);
h = h/6;
k = find(h < 0);
h(k) = h(k) + 1;
h = (~z).*h;
if nargout<=1,
if (threeD | nargin==3),
hout = zeros([siz,3]);
hout(:,:,1) = reshape(h,siz);
hout(:,:,3) = reshape(v,siz);
else
hout = [h s v];
end
else
hout = reshape(h,siz);
s = reshape(s,siz);
v = reshape(v,siz);
end

哇~~只在做设计的时候接触到那些词,没想到要这么麻烦地编程阿~

!@#$@%!@#$%#!%
那是什么话啊`
看不懂`

看不懂

确实不懂

看不懂