zoukankan      html  css  js  c++  java
  • matlab练习程序(RGB2HSV、HSV2RGB)

      色相饱和度明度和三原色的相互转换

    clear all;
    close all;
    clc;
    
    img=imread('lena_color.jpg');
    img=mat2gray(img);  %任意区间映射到[0,1];
    [m n dim]=size(img);
    imshow(img);
    %%图像的RGB
    R=img(:,:,1);
    G=img(:,:,2);
    B=img(:,:,3);
    
    %%图像的RGB2HSV
    H=zeros(m,n);   %色相角
    S=zeros(m,n);   %饱和度
    V=zeros(m,n);   %明度
    for i=1:m
       for j=1:n
           r=R(i,j);
           g=G(i,j);
           b=B(i,j);
           MAX=max([r,g,b]);
           MIN=min([r,g,b]);
    
           if MAX==MIN
                H(i,j)=0;
           elseif MAX==r && g>=b
                H(i,j)=60*(g-b)/(MAX-MIN);
           elseif MAX==r && g<b
                H(i,j)=60*(g-b)/(MAX-MIN)+360;
           elseif MAX==g
                H(i,j)=60*(b-r)/(MAX-MIN)+120;
           elseif MAX==b
                H(i,j)=60*(r-g)/(MAX-MIN)+240;
           end
    
           if MAX==0
                S(i,j)=0;
           else
                S(i,j)=1-MIN/MAX;
           end
    
           V(i,j)=MAX;
       end
    end
    
    %%图像HSV2RGB
    for i=1:m
        for j=1:n
            h=floor(H(i,j)/60);
            f=H(i,j)/60-h;
            v=V(i,j);
            s=S(i,j);
            p=v*(1-s);
            q=v*(1-f*s);
            t=v*(1-(1-f)*s);
    
            if h==0
                R(i,j)=v;G(i,j)=t;B(i,j)=p;
            elseif h==1
                R(i,j)=q;G(i,j)=v;B(i,j)=p;            
            elseif h==2
                R(i,j)=p;G(i,j)=v;B(i,j)=t;            
            elseif h==3
                R(i,j)=p;G(i,j)=q;B(i,j)=v;            
            elseif h==4
                R(i,j)=t;G(i,j)=p;B(i,j)=v;            
            elseif h==5
                R(i,j)=v;G(i,j)=p;B(i,j)=q;            
            end
        end
    end
    
    %%如果正反变换都没错的话,那么图像是不变的
    img(:,:,1)=R;
    img(:,:,2)=G;
    img(:,:,3)=B;
    figure;
    imshow(img)

    参考:http://zh.wikipedia.org/wiki/HSV_%E8%89%B2%E5%BD%A9%E7%A9%BA%E9%97%B4#.E4.BB.8E_HSV_.E5.88.B0_RGB_.E7.9A.84.E8.BD.AC.E6.8D.A2

  • 相关阅读:
    家庭记账本_2
    家庭记账本_1
    安卓学习进度_25
    安卓软件学习进度_24
    对体温上报app的总结
    安卓软件学习进度_23
    安卓软件学习进度_22
    安卓开发
    安卓开发
    安卓开发
  • 原文地址:https://www.cnblogs.com/tiandsp/p/2829140.html
Copyright © 2011-2022 走看看