您的位置:首页 > 编程语言 > MATLAB

计算图片的hsv值matlab程序

2007-05-05 16:30 1106 查看
function hsv = hsv()
n = input('请输入图像的n值(图像的宽度):');
m = input('请输入图像的m值(图像的高度):');
s = input('请输入图像的名字(包括后缀):');
m = double(m);
n = double(n);
divide = m*n;
hsv = ones(1,3);
imgTemp = imread(s);%在输入图像名字时请输入名字及后缀,图像请事先保存在D:/matlabs/work目录下面
r = 1.0*imgTemp(:,:,1) + 0.0*imgTemp(:,:,2) + 0.0*imgTemp(:,:,3);%提取R
g = 0.0*imgTemp(:,:,1) + 1.0*imgTemp(:,:,2) + 0.0*imgTemp(:,:,3);%提取G
b = 0.0*imgTemp(:,:,1) + 0.0*imgTemp(:,:,2) + 1.0*imgTemp(:,:,3);%提取B
r = double(r);
g = double(g);
b = double(b);
temp_h = double(ones(m,n));%声称一个m by n的单位矩阵来存放h值
temp_h2 = double(ones(m,n));
temp_s = double(ones(m,n));%声称一个m by n的单位矩阵来存放s值
temp_v = double(ones(m,n));%声称一个m by n的单位矩阵来存放v值
i = double(0);
while (i < divide)
    MAX = max(r(i+1),max(g(i+1),b(i+1)));
    MIN = min(r(i+1),min(g(i+1),b(i+1)));
    delta = MAX - MIN;
    MAX = double(MAX);
    MIN = double(MIN);
    delta = double(delta);
    %计算每一个像素的明度
    temp_v(i+1) = MAX/255.0;
    %计算每一个向度的饱和度
    if MAX == 0
         temp_s(i+1) = 0;
    else temp_s(i+1) = delta/MAX;
    end
    %计算每一个像素的色彩
    if delta == 0
        temp_h2(i+1) = r(i+1)/360.0;
    elseif r(i+1) == MAX
        if g(i+1) == b(i+1)
            temp_h2(i+1) = 0;
        else temp_h2(i+1) = (g(i+1) - b(i+1))/delta;
        end
    elseif g(i+1) == MAX
        if b(i+1) == r(i+1)
            temp_h2(i+1) = 0;
        else temp_h2(i+1) = 2.0 + (b(i+1) - r(i+1))/delta;
        end
    elseif b(i+1) == MAX
        if r(i+1) == g(i+1)
             temp_h2(i+1) = 0;
        else temp_h2(i+1) = 4.0 + (r(i+1) - g(i+1))/delta;
        end
    else
        temp_h2(i+1) = 0;
    end
   
    if temp_h2(i+1) < 0
        temp_h2(i+1) = temp_h2(i+1) + 6.0;%避免负的角度
    end
    temp_h(i+1) = 60 * temp_h2(i+1);
    i = i + 1;
end    
i = 0;
sum_h = double(0);
sum_s = double(0);
sum_v = double(0);
temp_h = double(temp_h);
temp_s = double(temp_s);
temp_v = double(temp_v);
while (i< divide)
    sum_h = sum_h + temp_h(i+1);
    sum_s = sum_s + temp_s(i+1);
    sum_v = sum_v + temp_v(i+1);
    i = i + 1;
end
sum_h = double(sum_h);
sum_s = double(sum_s);
sum_v = double(sum_v);
hsv(1) = sum_h / divide;
hsv(2) = sum_s / divide;
hsv(3) = sum_v / divide;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  matlab input function 360