将RGB转换为HSV

时间:2014-06-02 20:48:55

标签: image image-processing octave

我想将RGB值转换为HSV值。但是,如果我将9除以28,则八度计算为0.任何人都可以解释原因吗?

function [hsv] = RGBtoHSV()
    im = imread('picture.png'); 
    R = im(:,:,1); 
    G = im(:,:,2); 
    B = im(:,:,3);

    len = length(R); % R, G, B should have the same length
    for i = 1:len
        MAX = max([R(i),G(i),B(i)]);
        MIN = min([R(i),G(i),B(i)]);
        S = 0;
        if MAX == MIN
            H = 0;
        elseif MAX == R(i)
            disp(G(i) - B(i)); % 9 
            disp(MAX - MIN);  % 28
            H = 0.6 * ( 0 + ( (G(i) - B(i)) / MAX - MIN) ); % 0
            disp(H) % why i get 0 if try to calculate ( 0 + ( (G(i) - B(i)) / MAX - MIN)?
        ....
            end
        return;
    end
endfunction

RGBtoHSV()

克里斯:D

2 个答案:

答案 0 :(得分:4)

您必须执行以下操作将图像投射到Double

im = double(imread('picture.png'));

这将解决因图像类型为UINT8而发生的问题。

答案 1 :(得分:1)

您也可以使用Octave的内置rgb2hsv功能,而不是自己编写。

im_rgb = imread ("picture.png"); 
im_hsv = rgb2hsv (im_rgb);

如果这是一个练习,那么我建议您查看其来源,在Octave提示符下输入type rgb2hsv,看看它是如何实现的。