MATLAB图像颜色空间转化

常见的颜色空间有哪几种?

 

HSV空间:分别是H(色调)——S(饱和度)——V(亮度)

HSI空间:分别是H(色调)——S(饱和度)——I(强度)

强度和亮度差不多是一个概念,

饱和度代表的是渗入白光的数量级,白光阅读,饱和度越小,白光越少,饱和度越大,表示颜色的纯度更大。

如何从RGB空间转化为HSV空间?

HSV = rgb2hsv(RGB)

如何从RGB空间转化为HSI空间?

function hsi = rgb2hsi(rgb) 
rgb = im2double(rgb); 
r = rgb(:, :, 1); 
g = rgb(:, :, 2); 
b = rgb(:, :, 3); 
% Implement the conversion equations. 
num = 0.5*((r - g) + (r - b)); 
den = sqrt((r - g).^2 + (r - b).*(g - b)); 
theta = acos(num./(den + eps)); 
H = theta; 
H(b > g) = 2*pi - H(b > g); 
H = H/(2*pi); 

num = min(min(r, g), b); 
den = r + g + b; 
den(den == 0) = eps; 
S = 1 - 3.* num./den; 
H(S == 0) = 0; 
I = (r + g + b)/3;
% Combine all three results into an hsi image. 
hsi = cat(3, H, S, I);

如何从HSI空间转化为RGB?

% HSI 转 RGB
function rgb = hsi2rgb(hsi) 
% Extract the individual HSI component images. 
H = hsi(:, :, 1) * 2 * pi; 
S = hsi(:, :, 2); 
I = hsi(:, :, 3); 
% Implement the conversion equations. 
R = zeros(size(hsi, 1), size(hsi, 2)); 
G = zeros(size(hsi, 1), size(hsi, 2)); 
B = zeros(size(hsi, 1), size(hsi, 2)); 
% RG sector (0 <= H < 2*pi/3). 
idx = find( (0 <= H) & (H < 2*pi/3)); 
B(idx) = I(idx) .* (1 - S(idx)); 
R(idx) = I(idx) .* (1 + S(idx) .* cos(H(idx)) ./ ... 
                     cos(pi/3 - H(idx))); 
G(idx) = 3*I(idx) - (R(idx) + B(idx)); 
% BG sector (2*pi/3 <= H < 4*pi/3). 
idx = find( (2*pi/3 <= H) & (H < 4*pi/3) ); 
R(idx) = I(idx) .* (1 - S(idx)); 
G(idx) = I(idx) .* (1 + S(idx) .* cos(H(idx) - 2*pi/3) ./ ... 
                    cos(pi - H(idx))); 
B(idx) = 3*I(idx) - (R(idx) + G(idx)); 

% BR sector. 
idx = find( (4*pi/3 <= H) & (H <= 2*pi)); 
G(idx) = I(idx) .* (1 - S(idx)); 
B(idx) = I(idx) .* (1 + S(idx) .* cos(H(idx) - 4*pi/3) ./ ... 
                       cos(5*pi/3 - H(idx))); 
R(idx) = 3*I(idx) - (G(idx) + B(idx)); 
rgb = cat(3, R, G, B); 
rgb = max(min(rgb, 1), 0); 

如何单独提取出来HSV空间的三个通道并显示出来?

figure
H = HSV(:,:,1)
imshow(H)

figure
S = HSV(:,:,2)
imshow(S)

figure
V = HSV(:,:,3)
imshow(V)

figure显示的时候如何显示标题?

如何将RGB空间转化到YCbCr空间?

 figure(1)
 im = imread('1.jpg');
 imshow(im)
 
 figure(2)
 ycrcb_trees = rgb2ycbcr(im);
 imshow(ycrcb_trees)

如何将两张图片融合到一起?

img1 = imread('2.jpg');
img2 = imread('3.jpg');
img = imadd(img1,img2);

figure
imshow(img1)
figure 
imshow(img2)
figure
imshow(img)

如何叠加两张图片的亮度值?

使用imread读取进来的时候是RGB颜色空间,RGB颜色空间没有亮度的概念,因此应该将其先转化到HSV或者HSI颜色空间才可以进行亮度值的叠加。

什么是YCbCr颜色空间?

YCbCr是YUV经过缩放和偏移的翻版,可以看做YUV的子集。主要用于优化彩色视频信号的传输,使其向后相容老式黑白电视。与RGB视频信号传输相比,它最大的优点在于只需占用极少的频宽(RGB要求三个独立的视频信号同时传输)。

Y:明亮度(Luminance或Luma),也就是灰阶值。“亮度”是透过RGB输入信号来建立的,方法是将RGB信号的特定部分叠加到一起。

U&V:色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。“色度”则定义了颜色的两个方面─色调与饱和度,分别用Cr和CB来表示。

Cb:反映的是RGB输入信号蓝色部分与RGB信号亮度值之间的差异。
Cr:反映了RGB输入信号红色部分与RGB信号亮度值之间的差异。

在以下两个公式中RGB和YCbCr各分量的值的范围均为0-255。

RGB转换为YCbCr

这个公式来自:Genesis Microchip. gm6010/gm6015 Programming Guide[M]. California US: Genesis Microchip Company, 2002:85-90

|Y   |    |16  |                    |65.738   129.057  25.06 |   |R|
|Cb | = |128| +  (1/256) * |-37.945  -74.494  112.43| *|G|
|Cr  |    |128|                    |112.439  -94.154  -18.28|   |B|

即:

Y   = 0.257*R+0.564*G+0.098*B+16
Cb = -0.148*R-0.291*G+0.439*B+128
Cr  = 0.439*R-0.368*G-0.071*B+128

YCbCr转换为RGB

这个公式来自:Genesis Microchip. gm6015 Preliminary Data Sheet[M]. California US: Genesis Microchip Company, 2001:33-34

|R|                   |298.082  0               408.58 |   |Y   -16  |
|G| = (1/256) * |298.082  -100.291 -208.12  | * |Cb-128 |
|B|                   |298.082  516.411   0           |    |Cr -128 |

即:

R = 1.164*(Y-16)+1.596*(Cr-128)
G = 1.164*(Y-16)-0.392*(Cb-128)-0.813*(Cr-128)
B = 1.164*(Y-16)+2.017*(Cb-128)

RGB与YCbCr颜色空间之间相互转化的公式是什么?

在人脸检测中会用到YCbCr颜色空间,因此就要进行RGB与YCbCr颜色空间的转换。在下面的公式中RGB和YCbCr各分量的值的范围均为0-255。

RGB转到YCbCr:

     float y= (color.r * 0.256789 + color.g * 0.504129 + color.b * 0.097906)+ 16.0;

     float cb= (color.r *-0.148223 + color.g * -0.290992 + color.b * 0.439215)+ 128.0;

     float cr= (color.r * 0.439215 + color.g * -0.367789 + color.b *-0.071426)+ 128.0;

YCbCr转到RGB:

    R' = 1.164*(Y’-16) + 1.596*(Cr'-128) 

  G' = 1.164*(Y’-16) - 0.813*(Cr'-128) - 0.392*(Cb'-128) 

  B' = 1.164*(Y’-16) + 2.017*(Cb'-128)

MATLAB如何实现RGB转化为YCbCr颜色空间?

一行代码的事,rgb2ycbcr。

clc, clear, close all
I = imread('lena.jpg');
figure('Name', 'RGB');imshow(I);

YCbCr = rgb2ycbcr(I);
figure('Name', 'YCbcCr');imshow(YCbCr);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值