1. 彩色图像处理
1.1. 彩色空间
- RGB
- CCD技术直接感知R,G,B三个分量
- 是图像成像、显示、打印等设备的基础
- CMY(青、深红、黄)、CMYK (青、深红、黄、黑)
- 运用在大多数在纸上沉积彩色颜料的设备,如彩色打印机和复印机
- CMYK
- 打印中的主要颜色是黑色
- 等量的CMY原色产生黑色,但不纯
- 在CMY基础上,加入黑色,形成CMYK彩色空间
- HSV
- Hue 、Saturation、Value (色调、饱和度、数值)
- 基于圆柱坐标系的颜色模型
- 圆锥体来表示HSV
- 圆锥的顶面对应于V=1
- 色彩H由绕V轴的旋转角给定。
- 红色对应于角度0° ,绿色对应于角度120°,蓝色对应于角度240°
- 饱和度S取值从0到1,所以圆锥顶面的半径为1
- HSI(色调、饱和度、亮度)
- 两个特点:
- I 分量与图像的彩色信息无关
- H和S分量与人感受颜色的方式是紧密相连的
- 将亮度( I )与色调(H)和饱和度(S)分开
- 避免颜色受到光照明暗(I)等条件的干扰
- 仅仅分析反映色彩本质的色调和饱和度
- 广泛用于计算机视觉、图像检索和视频检索
- 两个特点:
- YIQ
- Y指亮度(Brightness),即灰度值
- I和Q指色调,描述色彩及饱和度
- 用于彩色电视广播,被北美的电视系统所采用(属于NTSC系统)
- Y分量可提供黑白电视机的所有影像信息
- YUV
- Y指亮度,与YIQ的Y相同
- U和V也指色调,不同于YIQ的I和Q
- 用于彩色电视广播,被欧洲的电视系统所采用(属于PAL系统)
- Y分量也可提供黑白电视机的所有影像信息
- YCbCr
- Y指亮度,与YIQ和YUV的Y相同
- Cb和Cr由U和V调整得到
- JPEG采用的彩色空间
- CLE Lab
- 国际照明委员会制定的色彩模式
- 自然界中任何一点色可以在Lab空间表达出来
- 色彩空间比RGB空间大
- Lab 颜色模型取坐标Lab
- L:亮度(lightness)
- a:正数代表红色,负数代表绿色
- b:正数代表黄色,负数代表蓝色
- 以数字化的方式来描述人的视觉感应
- 与设备无关
- 弥补了RGB和CMYK模式必须依赖设备色彩特性的不足
1.2. 彩色空间转换
- RGB -> CMY
- RGB 和 CMY 值都归一化[0,1]
- 在Matlab中,可以通过指令“imcomplement”实现RGB格式的图像与CMY格式图像的转换?
- RGB模型
# RGB颜色模型
function rgbcube(vx, vy, vz)
%RGBCUBE Displays an RGB cube on the MATLAB desktop.
% RGBCUBE(VX, VY, VZ) displays an RGB color cube, viewed from point
% (VX, VY, VZ). With no input arguments, RGBCUBE uses (10, 10, 4)
% as the default viewing coordinates. To view individual color
% planes, use the following viewing coordinates, where the first
% color in the sequence is the closest to the viewing axis, and the
% other colors are as seen from that axis, proceeding to the right
% right (or above), and then moving clockwise.
%
% -------------------------------------------------
% COLOR PLANE ( vx, vy, vz)
% -------------------------------------------------
% Blue-Magenta-White-Cyan ( 0, 0, 10)
% Red-Yellow-White-Magenta ( 10, 0, 0)
% Green-Cyan-White-Yellow ( 0, 10, 0)
% Black-Red-Magenta-Blue ( 0, -10, 0)
% Black-Blue-Cyan-Green (-10, 0, 0)
% Black-Red-Yellow-Green ( 0, 0, -10)
%
% Set up parameters for function patch.
vertices_matrix = [0 0 0;0 0 1;0 1 0;0 1 1;1 0 0;1 0 1;1 1 0;1 1 1];
faces_matrix = [1 5 6 2;1 3 7 5;1 2 4 3;2 4 8 6;3 7 8 4;5 6 8 7];
colors = vertices_matrix;
% The order of the cube vertices was selected to be the same as
% the order of the (R,G,B) colors (e.g., (0,0,0) corresponds to
% black, (1,1,1) corresponds to white, and so on.)
% Generate RGB cube using function patch.
patch('Vertices', vertices_matrix, 'Faces', faces_matrix, ...
'FaceVertexCData', colors, 'FaceColor', 'interp', ...
'EdgeAlpha', 0)
% Set up viewing point.
if nargin == 0
vx = 10; vy = 10; vz = 4;
elseif nargin ~= 3
error('Wrong number of inputs.')
end
axis off
view([vx, vy, vz])
axis square
HSI模型
- HSI → RGB
HSI → RGB
# HSI转换为RGB模型
function rgb = hsi2rgb(hsi)
%HSI2RGB Converts an HSI image to RGB.
% RGB = HSI2RGB(HSI) converts an HSI image to RGB, where HSI is
% assumed to be of class double with:
% hsi(:, :, 1) = hue image, assumed to be in the range
% [0, 1] by having been divided by 2*pi.
% hsi(:, :, 2) = saturation image, in the range [0, 1].
% hsi(:, :, 3) = intensity image, in the range [0, 1].
%
% The components of the output image are:
% rgb(:, :, 1) = red.
% rgb(:, :, 2) = green.
% rgb(:, :, 3) = blue.
% Copyright 2002-2004 R. C. Gonzalez, R. E. Woods, & S. L. Eddins
% Digital Image Processing Using MATLAB, Prentice-Hall, 2004
% $Revision: 1.5 $ $Date: 2003/10/13 01:01:06 $
% 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));
% Combine all three results into an RGB image. Clip to [0, 1] to
% compensate for floating-point arithmetic rounding effects.
rgb = cat(3, R, G, B);
rgb = max(min(rgb, 1), 0);
- RGB → HSI
# RGB转换为HSI模型
function hsi = rgb2hsi(rgb)
%RGB2HSI Converts an RGB image to HSI.
% HSI = RGB2HSI(RGB) converts an RGB image to HSI. The input image
% is assumed to be of size M-by-N-by-3, where the third dimension
% accounts for three image planes: red, green, and blue, in that
% order. If all RGB component images are equal, the HSI conversion
% is undefined. The input image can be of class double (with values
% in the range [0, 1]), uint8, or uint16.
%
% The output image, HSI, is of class double, where:
% hsi(:, :, 1) = hue image normalized to the range [0, 1] by
% dividing all angle values by 2*pi.
% hsi(:, :, 2) = saturation image, in the range [0, 1].
% hsi(:, :, 3) = intensity image, in the range [0, 1].
% Copyright 2002-2004 R. C. Gonzalez, R. E. Woods, & S. L. Eddins
% Digital Image Processing Using MATLAB, Prentice-Hall, 2004
% $Revision: 1.5 $ $Date: 2005/01/18 13:44:59 $
% Extract the individual component images.
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);
- RGB → YIQ
- 从RGB格式图像到YIQ格式图像实现通过指令“rgb2ntsc”
YIQ → RGB
- 从YIQ格式图像到RGB格式图像实现通过指令“ntsc2rgb”
- 从YIQ格式图像到RGB格式图像实现通过指令“ntsc2rgb”
RGB → YUV
YUV → RGB
RGB → YCbCr
- 从 RGB 到 YCbCr 通过指令 “rgb2ycbcr” 来实现
YCbCr → RGB
- 从 YCbCr 到 RGB 通过指令 “ycbcr2rgb” 来实现
RGB → CIE Lab
- CIE Lab 模型 (1976 CIE 提出)
- Lab系统是在三维坐标系统上的,基于一种对称理论,即 使用black-white L, red-green a,yellow-blue b 模块
- 它与具体设备无关的 where,
- , , 是CIE X,Y,Z相对于白色的参考三色值
- RGB 模型与CLE Lab* 模型,能够通过指令"makecform"和"applycform"来实现
clc; clear; imRGB = imread('../pic/7.jpg'); figure; imshow(imRGB);title('原始RGB图像'); cform = makecform('srgb2lab','AdaptedWhitePoint', whitepoint('D65')); imLab = applycform(imRGB, cform); figure; imshow(imLab);title('Lab模型图像'); cform2 = makecform('lab2srgb','AdaptedWhitePoint', whitepoint('D65')); rgb = applycform(imLab,cform2); figure; imshow(rgb);title('Lab模型到RGB图像');
- CIE Lab 模型 (1976 CIE 提出)
1.3. 伪彩色处理
- 什么叫伪彩色图像处理?
- 也叫假彩色图像处理
- 根据一定的准则对灰度值赋以彩色的处理
- 区分:伪彩色图像、真彩色图像、单色图像
- 为什么需要伪彩色图像处理?
- 人类可以辨别上千种颜色和强度
- 只能辨别二十几种灰度
- 应用
- 为人们观察和解释图像中的灰度目标
- 怎样进行伪彩色图像处理?
- 把一幅图像描述为三维函数(x,y,f(x,y))
- 分层技术:放置平行于(x,y)坐标面的平面
- 每一个平面在相交区域切割图像函数
- 令[0,L-1]表示灰度级,使l0代表黑色(f(x , y)=0), $l_{L-1}$代表白色(f(x , y)=L-1)。假设垂直于强度轴的P个平面定义为量级, , ,…,,P个平面将灰度级分为个间隔,,,...,,则灰度级到彩色的赋值关系:
- 是与强度间隔第级强度有关的颜色
- 是由在和分割平面定义的
- 左图难以区分病变,右图强度分层结果,清楚的显示恒定强度的不同区域。
- 下图图像的强度值直接与降雨相对应,目测困难
- 上图:蓝色表示低降雨量,红色表示高降雨量
- 上面2个图片显得更加清楚
1.3.2. 灰度级到彩色的转换
- 对任何输入像素的灰度级执行3个独立变换
- 3个变换结果分别送入彩色监视器的红、绿、蓝三个通道
- 产生一幅合成图像,matlab实现:
Cat(3,R,G,B)
1.4. 全彩色图像处理
- 全彩色图像处理基础
- 全彩色图像处理研究分为两大类:
- 分别处理每一分量图像,然后合成彩色图像
- 直接对彩色像素处理:3个颜色分量表示像素向量。令C代表RGB彩色空间中的任意向量
- 对大小M×N的图像
- 其中:x=0,1,2,…,M-1, y=0,1,2,…,N-1.
- 全彩色图像处理研究分为两大类:
- 彩色变换函数
- 是彩色输入图像,$g(x,y)$是变换或者处理过的彩色输出图像,是在空间领域上对的操作
- 彩色变换的简单形式
- ,其中i= 1,2,...,n。 和 是 和在任何点处彩色分量的变量
- 是一个对 操作产生的变换或彩色映射函数集
- 选择的彩色空间决定n的值,如RGB彩色空间,n=3,,,表示红、绿、蓝分量;CMYK,则n=4。
1.5. 彩色图像平滑和锐化
彩色图像平滑
- 令表示在RGB彩色图像中定义一个中心在(x,y)的邻域的坐标集,在该邻域中RGB分量的平均值为表示在RGB彩色图像中定义一个中心在
# RGB -> HSI
fc = imread('../pic/lema.png');
figure;
subplot(221);
imshow(fc)
title('原始真彩色(256*256*256色)图像')
fr = fc(:,:,1);
fg = fc(:,:,2);
fb = fc(:,:,3);
subplot(222);
imshow(fr);
title('红色分量图像');
subplot(223);
imshow(fg);
title('绿色分量图像');
subplot(224);
imshow(fb);
title('蓝色分量图像');
h = rgb2hsi(fc);
H = h(:,:,1);
S = h(:,:,2);
I = h(:,:,3);
figure;
subplot(221);
imshow(h);title('HSI图像');
subplot(222);
imshow(H)
title('色调分量图像');
subplot(223);
imshow(S);
title('饱和度分量图像')
subplot(224);
imshow(I);
title('亮度分量图像');
# 彩色图像平滑
w = fspecial('average',15);
I_filtered = imfilter(I,w,'replicate');
h = cat(3,H,S,I_filtered);
f = hsi2rgb(h);
% f = min(f,1);
figure;
imshow(f);
title('仅平滑HSI图像的亮度分量所得到的RGB图像')
fc_filtered = imfilter(fc,w,'replicate');
figure;
imshow(fc_filtered)
title('分别平滑R、G、B图像分量平面得到的RGB图像');
h_filtered = imfilter(h,w,'replicate');
f = hsi2rgb(h_filtered);
f = min(f,1);figure;
imshow(f)
title('分别平滑H、S、I图像分量平面得到的RGB图像')
h_filtered = imfilter(h,w,'replicate');
figure;
imshow(h_filtered);
title('分别平滑H、S、I图像分量平面得到的HSI图像');
1.5.1. 彩色图像锐化
- RGB彩色空间,分别计算每一分量图像的拉普拉斯变换
fc = imread('../pic/2.jpg'); figure; subplot(231); imshow(fc); title('原始真彩色(256*256*256色)图像'); w = fspecial('average',15); fc_filtered = imfilter(fc,w,'replicate'); subplot(232); imshow(fc_filtered) title('分别平滑R、G、B图像分量平面得到的RGB模糊图像') lapmask = [1 1 1; 1 -8 1; 1 1 1]; fen = imsubtract(fc_filtered,imfilter(fc_filtered,lapmask,'replicate')); subplot(233); imshow(fen); title('用拉普拉斯算子增强模糊图像') LPA = imfilter(fc,lapmask,'replicate'); subplot(234); imshow(LPA); title('对原始真彩色图像用拉普拉斯算子提取出的图像') fen = imsubtract(fc,imfilter(fc,lapmask,'replicate')); subplot(235); imshow(fen); title('用拉普拉斯算子增强原始真彩色图像(采用提高边缘亮度手段)');