zoukankan      html  css  js  c++  java
  • MATLAB RGB2HSV、HSV2RGB

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

     1 clear all;
     2 close all;
     3 clc;
     4 
     5 img=imread('lena_color.jpg');
     6 img=mat2gray(img);  %任意区间映射到[0,1];
     7 [m n dim]=size(img);
     8 imshow(img);
     9 %%图像的RGB
    10 R=img(:,:,1);
    11 G=img(:,:,2);
    12 B=img(:,:,3);
    13 
    14 %%图像的RGB2HSV
    15 H=zeros(m,n);   %色相角
    16 S=zeros(m,n);   %饱和度
    17 V=zeros(m,n);   %明度
    18 for i=1:m
    19    for j=1:n
    20        r=R(i,j);
    21        g=G(i,j);
    22        b=B(i,j);
    23        MAX=max([r,g,b]);
    24        MIN=min([r,g,b]);
    25 
    26        if MAX==MIN
    27             H(i,j)=0;
    28        elseif MAX==r && g>=b
    29             H(i,j)=60*(g-b)/(MAX-MIN);
    30        elseif MAX==r && g<b
    31             H(i,j)=60*(g-b)/(MAX-MIN)+360;
    32        elseif MAX==g
    33             H(i,j)=60*(b-r)/(MAX-MIN)+120;
    34        elseif MAX==b
    35             H(i,j)=60*(r-g)/(MAX-MIN)+240;
    36        end
    37 
    38        if MAX==0
    39             S(i,j)=0;
    40        else
    41             S(i,j)=1-MIN/MAX;
    42        end
    43 
    44        V(i,j)=MAX;
    45    end
    46 end
    47 
    48 %%图像HSV2RGB
    49 for i=1:m
    50     for j=1:n
    51         h=floor(H(i,j)/60);
    52         f=H(i,j)/60-h;
    53         v=V(i,j);
    54         s=S(i,j);
    55         p=v*(1-s);
    56         q=v*(1-f*s);
    57         t=v*(1-(1-f)*s);
    58 
    59         if h==0
    60             R(i,j)=v;G(i,j)=t;B(i,j)=p;
    61         elseif h==1
    62             R(i,j)=q;G(i,j)=v;B(i,j)=p;            
    63         elseif h==2
    64             R(i,j)=p;G(i,j)=v;B(i,j)=t;            
    65         elseif h==3
    66             R(i,j)=p;G(i,j)=q;B(i,j)=v;            
    67         elseif h==4
    68             R(i,j)=t;G(i,j)=p;B(i,j)=v;            
    69         elseif h==5
    70             R(i,j)=v;G(i,j)=p;B(i,j)=q;            
    71         end
    72     end
    73 end
    74 
    75 %%如果正反变换都没错的话,那么图像是不变的
    76 img(:,:,1)=R;
    77 img(:,:,2)=G;
    78 img(:,:,3)=B;
    79 figure;
    80 imshow(img)

     

  • 相关阅读:
    【Redis】事务
    【Web】Apache HttpClient & HttpAsyncClient
    【Spring】导入配置文件
    【SpringBoot】@Conditional注解家族
    【前端开发】dva+antd+react
    【Spring】EnableXXX
    POJ-2240-Arbitrage
    POJ-2387-Til the Cows Come Home
    hdu-1847-畅桶工程续
    Floyd算法模板(多源最短)
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/13646219.html
Copyright © 2011-2022 走看看