彩色图像处理

彩色基础

什么是彩色
彩色是物体的一种属性,就像纹理、形状、重量同样. 一般, 它依赖于3个方面的因素: 算法

  • 光源一一照射光的谱性质或谱能量分布.
  • 物体-一被照射物体的反射性质.
  • 成像接收器(眼睛或成像传感器)一一光谱能量吸取性质

其中,光特性是颜色科学的核心。假如光没有颜色(捎色的,如观察者看到的黑白电视的光),那么它的属性仅仅是亮度或者数值。能够用灰度值来描述亮度, 光的范围从黑到灰.最后到白。
而对于彩色光,咱们一般用3个基本量来描述其光源的质量: 辐射率、光强和亮度。
(1)辐射率是从光源流出能量的总量, 一般用瓦特(W)度量;
(2)光强用流明度量,它给出了观察者从光源接收的能量总和的度量:
(3)亮度是彩色强度概念的具体化。它其实是一个难以度量的主关描绘子.
一样做为能量的度盘,辐射率与光强却每每没有必然的联系.例如,在进行X光检查时,光从X射线源中发出,它是具备实际意义上的能量的。但因为其处于可见光范围之外,观察者很难感受到。所以对咱们来讲,它的光强几乎为o. 数组

咱们眼中的彩色
人类可以感觉到的物体的颜色是由物体反射光的性质决定的,. 如图7.2所示,可见光是由电磁波谱中较窄的液段组成。若是物体反射的光在全部可见光披长范围内是平衡的, 则站在观察者的角度它就是白色的:若是物体仅对有限的可见光谱范围反射,则物体表现为某种特定颜色。例如,反射披长范围在450~500nm 之间的物体呈现蓝色, 它吸取了其余被长光的多数能量: 而若是物体吸取了全部的入射光,则将呈现为黑色。 markdown

三原色
据详细的实验结果可知,人眼中负责彩色感知的细胞中约有65%对红光敏感, 33%对绿光敏感,而只有2%对蓝光敏感。正是人眼的这些极收特性决定了被看到的彩色是一般所谓的原色红(R )、绿(G )、蓝(B)的各类组合。国际照明委员会(CIE )规定以蓝=435.8nm、绿=546.lnm、红=700nm 做为主原色, 红CR )、绿(G )、蓝( B )也所以被称为3 原色。
在图7.3所示的CIE色度图中,最外围的轮廓对应全部的可见光谱色,在其边缘上标出了对应的波长值(以m为单位〉,该轮廓以内的区域包含了全部的可见颜色.若是将色度圈中的三色点两两链接成一个三角形, 则该三角形内的任何颜色均可以自这3种原色的不一样混合产生。

咱们看到, 图7.3中由R、G、B三种标准原色所连成的三角形并不能涵盖整个可见颜色区域, 这说明仅使用三原色并不能获得全部的可见颜色。事实上, 图7.3中的三角形区域对应着典型的RGB监视器所可以产生的颜色范围, 称为彩色全域:而在三角形内不规则的区域表示高质量的彩色打印设备的彩色域. ui

计算机中的颜色表示
在计算机中,显示器的任何颜色〈色彩全域〉均可以自红、绿、蓝3种颜色组成,称为三基色.每种基色的取值范围是0~255.任何颜色均可以用这3种颜色按不一样的比例混合而成, 这就是三原色原理. 在计算机中, 三原色的原理能够这样解释: spa

  • 计算机中的任何颜色均可以由3种颜色按不一样比例混合而成;而每种颜色也均可以分解成三种基本颜色.
  • 三原色之间相互独立,任何一种颜色都不能由其他两种颜色组成.
  • 混合色的饱和度由3种颜色的比例来决定 混合色的亮度为3种颜色的亮度之和.

彩色模型

彩色模型也称彩色空间或彩色系统, 是用来精确标定和生成各类颜色的一套规则和定义, 它的用途是在某些标准下用一般可接受的方式简化彩色规范. 彩色模型一般能够采用坐标系统来描述, 而位于系统中的每种颜色都由坐标空间中的单个点来表示。
现在使用的大部分彩色模型都是面向应用或是面向硬件, 好比众所周知的针对彩色电视器的RGB( 红、绿、蓝〉模型, 以及面向彩色打印机的CMY(青、深红、黄〉和CMYK(青、深红、黄、黑〉模型。而HSI(色调、饱和度、亮度〉模型很是符合人眼描述和解释颜色的
方式。此外, 目前普遍使用的彩色模型还有如:HSV模型、YUV 模型、YIQ模型、Lab模型等。下面将分别介绍这些彩色模型并给出它们与最为经常使用的RGB模型之间的转换方式。 翻译

RGB模型

RGB模型是工业界的一种颜色标准. 是经过对红(Red)、绿(Green)、蓝(Blue)3种颜色亮度的变化以及它们相互之间的叠加来获得各类各样的颜色的。该标准儿乎包括了人类视觉所能感知的全部颜色,是目前运用最广的颜色模型之一。
理论基础
RGB彩色空间对应的坐标系统是如图7.4所示的立方体. 红、绿和蓝位手立方体的3个顶点上:青、深红和黄位于另外3个顶点上:黑色在原点处, 而白色位于距离原点最远的顶点处, 灰度等级就沿这两点连线分布: 不一样的颜色处于立方体外部和内部, 所以能够用一个3维向量来表示。例如,在全部颜色均己归一化到(O, 1)的状况下,蓝色可表示为(O, 0, 1),而灰色可由向量(0.5, 0.5, 0.5)来表示。
在RGB模型中,3个图像份量组成了所要表示的图像,而每个份量图像都是其原色图像,如图7.5所示。当送入RGB监视器时,这3个份量图像便在屏上混合产生一幅合成彩色图像: 

在RGB空间中,用以表示每一像素的比特数叫作像素深度。RGB图像的3个红、绿、 蓝份量图像都是一幅8比特图像,每个彩色像素有24比特深度。所以,全彩色图像经常使用来定义24比特的彩色图像,颜色总数是 (28)3=16777216 3d

matlab实现
code

CMY、CMYK模型

CMY模型(Cyan、Magenta、Yellow)是采用青、品红、黄色3种基本原色按必定比例合成颜色的方法。因为色彩的显示不是直接来自于光线的色彩,而是由光线被物体吸取掉一部分以后反射回来的剩余光线产生,所以CMY模型又称为减色法混色模型。当光线都被吸取时成为黑色,都被反射时成为白色.xml

像CMY 模型这样的减色混合模型正好适用于彩色打印机和复印机这类须要在纸上沉积彩色颜料的设备, 由于颜料不是像显示器那样发出颜色, 而是反射颜色。例如,当青色颜料涂覆的表面用。白光照射时, 从该表面反射的不是红光, 而是从反射的白光中减去红色获得的青色(白光自己是等量的红、绿、蓝光的组合). CMY模型的颜料混合效果如图7.6所示, 注意这里的混合是原色的相减, 与
RGB模型的混合正好相反。 blog

CMYK模型
由图7.6可见, 等量的颜料原色(青、品红和黄)能够混合产生黑色。然而在实际运用
中, 经过这些颜色混合产生的黑色是不纯的。所以, 为产生真正的黑色〈黑色在打印中起主
要做用〉, 专门在CMY模型中加入了第4种颜色一一黑色, 从而获得CMYK影色模型. 这
样当出版商说到“ 四色打印” 时, 即指CMY彩色模型的3种原色再加上黑色。

HSI模型

HSI模型是从人的视觉系统出发,直接使用颜色三要素色调(Hue)、饱和度(Saturation) 和亮度(intensity,有时也翻译做密度或灰度〉来描述颜色.

  • 亮度是指人眼感受光的明暗程度.光的能量越大,亮度越大.
  • 色调是彩色最重要的属性,决定颜色的本质,由物体反射光线中占优点的波长来决定. 不一样的波长产生不一样的颜色感受,咱们叫来一种颜色为红、橙、黄,这就是说咱们在规定一种色调.
  • 饱和度是指颜色的深浅和浓淡程度,饱和度越高,颜色越深.饱和度的深浅和白色的 比例有关,白色所占比例越高,饱和度越低.

HSI彩色空间能够用一个圆锥空间模型来描述, 如图7.8所示。咱们一般把色调和饱和度统称为色度, 用来表示颜色的类别与深浅程度。在图中
四锥中间的横截面圆就是色度圆, 而圆锥向上或向下延伸的即是亮度份量的表示.
因为人的视觉对亮度的敏感程度远强于对颜色浓淡的敏感程度, 为了便于颜色处理和识别, 人的视觉系统常常采用HSI彩色空间, 它比RGB彩色空间更符合人的视觉特性。此外, 因为HSl空间中亮度和色度具备可分离特性, 使得图像处理和机器视觉中大量灰度处理算法均可在
HSI彩色空间中方便地使用。
HSI彩色空间和RGB 彩色空间只是同一物理量的不一样表示法, 它们之间存在着转换关系. 下面将介绍RGB到到HSI的彩色转换和HSI到RGB的彩色转换

从RGB到HSI的彩色转换及其实现
给定一幅RGB格式的图像, 每个RGB像素和H份量可用下面的公式获得:

matlab实现

function hsi = rgb2hsi(rgb)
% hsi = rgb2hsi(rgb)把一幅RGB图像转换为HSI图像,
% 输入图像是一个彩色像素的M×N×3的数组,
% 其中每个彩色像素都在特定空间位置的彩色图像中对应红、绿、蓝三个份量。
% 假如全部的RGB份量是均衡的,那么HSI转换就是未定义的。
% 输入图像多是double(取值范围是[0, 1]),uint8或 uint16。
%
% 输出HSI图像是double,
% 其中hsi(:, :, 1)是色度份量,它的范围是除以2*pi后的[0, 1];
% hsi(:, :, 2)是饱和度份量,范围是[0, 1];
% hsi(:, :, 3)是亮度份量,范围是[0, 1]。

% 抽取图像份量
rgb = im2double(rgb);
r = rgb(:, :, 1);
g = rgb(:, :, 2);
b = rgb(:, :, 3);

% 执行转换方程
num = 0.5*((r - g) + (r - b));
den = sqrt((r - g).^2 + (r - b).*(g - b));
theta = acos(num./(den + eps)); %防止除数为0

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; %防止除数为0
S = 1 - 3.* num./den;

H(S == 0) = 0;

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

% 将3个份量联合成为一个HSI图像
hsi = cat(3, H, S, I);

从HSI到RGB的彩色转换及其实现
在[O, 1]内给出HSI值, 如今要在相同的值域找到RGB值, 可利用H值公式。在原始色分割中有3个相隔120· 的扇形, 如图7.10所示。从H乘以360" 开始, 这时色调值返回原来的[0,360]的范围.

matlab实现

function rgb = hsi2rgb(hsi)
% rgb = hsi2rgb(hsi)把一幅HSI图像转换为RGB图像,
% 其中hsi(:, :, 1)是色度份量,它的范围是除以2*pi后的[0, 1];
% hsi(:, :, 2)是饱和度份量,范围是[0, 1];
% hsi(:, :, 3)是亮度份量,范围是[0, 1]。
%
% 输出图像份量:
% rgb(:, :, 1)为红;
% rgb(:, :, 2)为绿;
% rgb(:, :, 3)为蓝。

% 抽取图像份量
hsi = im2double(hsi);
H = hsi(:, :, 1) * 2 * pi;
S = hsi(:, :, 2);
I = hsi(:, :, 3);

% 执行转换方程
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扇形(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扇形(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扇形
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));

% 将3个份量联合成为一个RGB图像
rgb = cat(3, R, G, B);
rgb = max(min(rgb, 1), 0);

全彩色图像处理基础

本节主要介绍全彩色图像处理技术,以及面对不一样的图像处理任务怎样处理全彩色图像.一般,全彩色图像处理技术总的能够分为如下两大类。
(1)对3个平面份量单独处理,而后将分别处理过的3个份量合成彩色图像。对每一个份量的处理技术能够应用到对灰度图像处理的技术上。可是这种通道式的独立处理技术忽略了通道间的相互影响。
(2)直接对彩色像素进行处理。由于全彩色图像至少有3个份量,彩色像素其实是一个向量。直接处理就是同时对全部份量进行无差异的处理.这时彩色图像的 3个份量用向量形式表示,即对彩色图像上任一点的像素 c(x,y),有:
c(x,y)= [R(x,y);G(x,y);B(x,y)]
那么对像素点(x,y)处理的操做其实是同时对 R、G、 B这3个份量操做.不过一般大多数图像处理技术都是指对每一个份量的单独处理。接下来将讲述全彩色图像处理的两个经常使用技术:彩色补偿和彩色平衡。

彩色补偿及其Matlab实现

有些图像处理任务的目标是根据颜色分离出不一样类型的物体。但因为经常使用的彩色成像设备具备较宽且相互覆盖的光谱敏感区,加之待拍摄图像的染色是变化的,因此很难在3 个份量图中将物体分离出来,这种现象称为颜色扩散。彩色补偿的做用就是经过不一样的颜色通道提取不一样的目标物。

matlab实现

% compensate.m % 彩色补偿 im=double(imread('plane.bmp')); subplot(1,2,1); imshow(uint8(im)); title('原始图'); [m,n,p]=size(im); [h1,k1]=min(255-im(:,:,1)+im(:,:,2)+im(:,:,3)); [j1,minx]=min(h1); i1=k1(j1);%提取图像中最接近红色的点,其在im中的坐标为i1,j1 r1=im(i1,j1,1); g1=im(i1,j1,2); b1=im(i1,j1,3); R=0.30*r1+0.59*g1+0.11*b1; [h2,k2]=min(255-im(:,:,2)+im(:,:,1)+im(:,:,3)); [j2,minx]=min(h2); i2=k2(j2);%提取图像中最接近绿色的点,其在im中的坐标为i2,j2 r2=im(i2,j2,1); g2=im(i2,j2,2); b2=im(i2,j2,3); G=0.30*r2+0.59*g2+0.11*b2; [h3,k3]=min(255-im(:,:,3)+im(:,:,1)+im(:,:,2)); [j3,minx]=min(h3); i3=k3(j3);%提取图像中最接近蓝色的点,其在im中的坐标为i3,j3 r3=im(i3,j3,1); g3=im(i3,j3,2); b3=im(i3,j3,3); B=0.30*r3+0.59*g3+0.11*b3; A1=[r1 r2 r3 g1 g2 g3 b1 b2 b3]; A2=[R 0 0 0 G 0 0 0 B]; C=A1*inv(A2); for i=1:m for j=1:n imR=im(i,j,1); imG=im(i,j,2); imB=im(i,j,3); temp=inv(C)*[imR;imG;imB]; S(i,j,1)=temp(1); S(i,j,2)=temp(2); S(i,j,3)=temp(3); end end S=uint8(S); subplot(1,2,2); imshow(S); title('补偿后');

彩色平衡及其Matlab实现

一幅彩色图像数字化后, 在显示时颜色常常看起来有些不正常。 这是色通道的不一样敏感度、增光因子和偏移量等缘由致使的,称其为三基色不平衡。将之校订的过程就是彩色平衡

matlab实现

% balance.m
% 彩色平衡

im=double(imread('plane.bmp'));
[m,n,p]=size(im);
F1=im(1,1,:);
F2=im(1,2,:);
F1_(1,1,1)=F1(:,:,2);
F1_(1,1,2)=F1(:,:,2);
F1_(1,1,3)=F1(:,:,2);
F2_(1,1,1)=F2(:,:,2);
F2_(1,1,2)=F2(:,:,2);
F2_(1,1,3)=F2(:,:,2);
K1=(F1_(1,1,1)-F2_(1,1,1))/(F1(1,1,1)-F2(1,1,1));
K2=F1_(1,1,1)-K1*F1(1,1,1);
L1=(F1_(1,1,3)-F2_(1,1,3))/(F1(1,1,3)-F2(1,1,3));
L2=F1_(1,1,3)-L1*F1(1,1,3);
for i=1:m
    for j=1:n
          new(i,j,1)=K1*im(i,j,1)+K2;
          new(i,j,2)=im(i,j,2);
          new(i,j,3)=L1*im(i,j,3)+L2;
    end
end
im=uint8(im);
new=uint8(new);
subplot(1,2,1);
imshow(im);
title('原始图');
subplot(1,2,2);
imshow(new);
title('平衡后');

相关文章
相关标签/搜索