请选择 进入手机版 | 继续访问电脑版

Hello Mat

 找回密码
 立即注册
查看: 5203|回复: 3

RGB和HSI之间的转化

[复制链接]

1126

主题

1302

帖子

19

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
21659
发表于 2016-10-26 21:23:34 | 显示全部楼层 |阅读模式
  1. %% HSI --> RGB
  2. clc,clear,close all
  3. warning off
  4. feature jit off
  5. im = imread('hestain.png');
  6. figure('color',[1,1,1])
  7. im1 = rgb2hsi(im);     % RGB转化为HSI
  8. subplot(121),imshow(im1,[]);title('HSI')
  9. im2 = hsi2rgb(im1);    % HSV转化为RGB
  10. subplot(122),imshow(im2,[]);title('RGB')
复制代码
RGB颜色空间转化到HSI颜色空间
  1. function im1=rgb2hsi(im)

  2. im = double(im)/255;
  3. r = im(:, :, 1);
  4. g = im(:, :, 2);
  5. b = im(:, :, 3);
  6. num=0.5*((r-g)+(r-b));
  7. den=sqrt((r-g).*(r-g))+(r-b).*(g-b);
  8. theta=acos(num./(den+eps));

  9. H = theta;
  10. H(b>g) = 2*pi-H(b>g);
  11. % H = H/(2*pi);

  12. num=min(min(r,g),b);
  13. den=r+g+b;
  14. den(den==0)=eps;
  15. S=1-3.*num./den;
  16. H(S==0)=0;

  17. I=(r+g+b)/3;

  18. im1(:,:,1) = real(H);
  19. im1(:,:,2) = S;
  20. im1(:,:,3) = I;

  21. % im1(:,:,1) = im2uint8(H);
  22. % im1(:,:,2) = im2uint8(S);
  23. % im1(:,:,3) = im2uint8(I);

  24. % im1 =cat(3,H,S,I);
复制代码


算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复

使用道具 举报

1126

主题

1302

帖子

19

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
21659
 楼主| 发表于 2016-10-26 21:31:13 | 显示全部楼层
  1. function im1 = hsi2rgb(im)
  2. % Convert HSI to sRGB
  3. if ~isa(im,'double')
  4.     im = double(im)/255;
  5. end

  6. h = im(:,:,1);
  7. s = im(:,:,2);
  8. i = im(:,:,3);

  9. for k=1:size(h,1)
  10.     for j=1:size(h,2)
  11.         if h(k,j)<2*pi/3
  12.             x(k,j) = i(k,j).*(1-s(k,j));
  13.             y(k,j) = i(k,j).*(1+ s(k,j).*cos(h(k,j))/cos(pi/3-h(k,j)));
  14.             z(k,j) = 3*i(k,j)-(x(k,j)+y(k,j));
  15.             r(k,j)=y(k,j);
  16.             g(k,j)=z(k,j);
  17.             b(k,j)=x(k,j);
  18.         elseif h(k,j)>=2*pi/3 && h(k,j)<4*pi/3
  19.             h(k,j) = h(k,j)-2*pi/3;
  20.             x(k,j) = i(k,j).*(1-s(k,j));
  21.             y(k,j) = i(k,j).*(1+ s(k,j).*cos(h(k,j))/cos(pi/3-h(k,j)));
  22.             z(k,j) = 3*i(k,j)-(x(k,j)+y(k,j));
  23.             r(k,j)=x(k,j);
  24.             g(k,j)=y(k,j);
  25.             b(k,j)=z(k,j);
  26.         elseif h(k,j)>=4*pi/3 && h(k,j)<2*pi
  27.             h(k,j) = h(k,j)-4*pi/3;
  28.             x(k,j) = i(k,j).*(1-s(k,j));
  29.             y(k,j) = i(k,j).*(1+ s(k,j).*cos(h(k,j))/cos(pi/3-h(k,j)));
  30.             z(k,j) = 3*i(k,j)-(x(k,j)+y(k,j));
  31.             r(k,j)=z(k,j);
  32.             g(k,j)=x(k,j);
  33.             b(k,j)=y(k,j);
  34.         end
  35.     end
  36. end
  37. im1(:,:,1) = r;
  38. im1(:,:,2) = g;
  39. im1(:,:,3) = b;

  40. end
复制代码

算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复 支持 反对

使用道具 举报

1126

主题

1302

帖子

19

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
21659
 楼主| 发表于 2016-11-7 22:00:53 | 显示全部楼层
RGB到HSI公式

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复 支持 反对

使用道具 举报

1126

主题

1302

帖子

19

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
21659
 楼主| 发表于 2016-11-7 22:01:52 | 显示全部楼层
    HSI用色调H、饱和度S、亮度IIuminance)来描述物体的颜色,其中H定义颜色的波长,称为色调;S表示颜色的深浅程度,称为饱和度;I表示强度或亮度,在处理彩色图像时,可仅对I分量进行处理,结果不改变原图像中的彩色种类。
    HSI颜色空间图像和RGB空间图像很不相同,其中H为色调、S表示颜色的深浅程度,可简单的理解为其能量分布图;I表示强度或亮度,一般用户在处理彩色图像时可仅对I分量进行处理,在树叶的提取和识别中,应用广泛。
  需要注意的是,HSIHLS颜色空间可近似等同于HSL颜色空间,因此在很多场合,直接利用HSL取代HSIHLS颜色空间。




算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Python|Opencv|MATLAB|Halcom.cn

GMT+8, 2022-9-27 09:38 , Processed in 0.212947 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表