Pages: [1]   Go Down
Print
Author Topic: RGB to HSV: Matlab  (Read 1188 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
zElOtO
Forumista
***
Offline Offline

Gender: Male
Posts: 845



WWW
« on: 26-06-2012, 18:15:16 »

Nel progetto precedente c'era di implementare una funziona che permetta il passaggio da RGB -> HSV.
Ho trovato in rete questo algoritmo:

Quote
/**
 * Converts an RGB color value to HSV. Conversion formula
 * adapted from http://en.wikipedia.org/wiki/HSV_color_space.
 * Assumes r, g, and b are contained in the set [0, 255] and
 * returns h, s, and v in the set [0, 1].
 *
 * @param   Number  r       The red color value
 * @param   Number  g       The green color value
 * @param   Number  b       The blue color value
 * @return  Array           The HSV representation
 */
function rgbToHsv(r, g, b){
    r = r/255, g = g/255, b = b/255;
    var max = Math.max(r, g, b), min = Math.min(r, g, b);
    var h, s, v = max;

    var d = max - min;
    s = max == 0 ? 0 : d / max;

    if(max == min){
        h = 0; // achromatic
    }else{
        switch(max){
            case r: h = (g - b) / d + (g < b ? 6 : 0); break;
            case g: h = (b - r) / d + 2; break;
            case b: h = (r - g) / d + 4; break;
        }
        h /= 6;
    }

    return [h, s, v];
}


quindi ho costruito la sua implementazione in Matlab

Code:
function rgbTOhsv_Callback(hObject, eventdata, handles) %RGB to HSV
global A;
%A = rgb2hsv(A);
[m,n,t]= size(A);
output = zeros(m,n,t);
for i=1:m %x
    for j=1:n %y
        R = A(i,j,1) / 255;
        G = A(i,j,2) / 255;
        B = A(i,j,3) / 255;
        massimo = max([R,G,B]);
        minimo = min([R,G,B]);
        V = massimo;
        d = massimo - minimo;
       
        if (massimo == 0)
            S = 0;
        else
            S = d / massimo;
        end
       
        if (massimo == minimo)
            H = 0;
        else
            switch(massimo)
                case R
                    if (G < B)
                        tmp = 6;
                    else
                        tmp = 0;             
                    end
                    H = (G - B) / d + tmp;
                case G
                    H = (B - R) / d + 2;
                case B
                    H = (R - G) / d + 4;
                end
            H = H / 6;
        end
        output(i,j,1) = H;
        output(i,j,2) = S;
        output(i,j,3) = V;
    end
end
A = output;
image(A);

Cosa non funziona??

HELP PLEASE
Logged

I computer sono incredibilmente veloci, accurati e stupidi. Gli uomini sono incredibilmente lenti, inaccurati e intelligenti. Insieme sono una potenza che supera l'immaginazione. (A. Einstein)

Damiano Cancemi
www.damianocancemi.com
www.nerdbren.com
www.nerdbren.com/blog
Pages: [1]   Go Up
Print
Jump to: