数字图像处理——第六章(彩色图像处理)

matlab 同时被 2 个专栏收录
25 篇文章 6 订阅
17 篇文章 8 订阅

一、彩色基础

颜色是人类认知系统对物体表面、光照及视觉环境的综合反映,缺少其中任意一个,都不会有颜色感觉。
人类和其他动物感知物体颜色是由物体反射光的性质(频率和波长)决定的。
白色:物体反射的光在所有可见光波长范围是平衡的。
某种颜色:一个物体反射有限的可见光谱。(如,绿色物体反射具有500~570nm范围内的主要波长的光,吸收其他波长的多数能量)

1.1 彩色

彩色是物体的一种属性。依赖于3个方面的因素:

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

描述彩色光源质量的三个量:

  • 辐射:光源流出的能量总量,用瓦特(W)度量。
  • 光强:观察者从光源感知的能量总和,用流明度量。
  • 亮度:是一个主观描绘子,是难以度量的。

1.2 三原色

人类对蓝色最不敏感。
光和颜料的原色及二次色
在这里插入图片描述
区别不同颜色特性的是:亮度(无色的强度)、色调(观察者感知的主要颜色)、饱和度(相对纯净度,或一个色调混合的白光量,纯色谱是全饱和的)。饱和度与所加白光的数量成反比。纯色是全饱和的。
色调和饱和度一起成为
色度

1.3 颜色表示

形成任何特殊彩色的红、绿、蓝的数量称为三色值。分别用X,Y,Z表示。故一种颜色可由其三色值系数定义:
在这里插入图片描述
显然: x + y + z = 1
CIE色度图
该图以x(红)和y(绿)的函数表示颜色的组成。
在这里插入图片描述
最外围的轮廓对应着所有的可见光谱色,在其边缘上标出了对应的波长值(nm),该轮廓内的区域包含了所有的可见颜色。如果将色度图中的三色点两两连接成一个三角形,则该三角形内的任意颜色都可以由这3种原色的不同混合产生。
由R、G、B3种标准原色所连成的三角形并不能涵盖整个可见颜色区域,即仅使用三原色并不能得到所有的可见颜色。图中三角形区域对应着典型的RGB监视器所能够产生的颜色范围,称为彩色全域,而三角形内不规则区域表示高质量的彩色打印设备的彩色域。

二、彩色模型

彩色模型(也称为彩色空间或彩色系统)的目的是,在某些标准下用通用可以接受的方式方便地对彩色加以说明。

2.1 RGB模型(相加混色模型,主要用于显示)

RGB模型是工业界的一种颜色标准,该标准几乎包括了人类视觉所能感知的所有颜色,是目前应用最广的颜色模型之一。
在这里插入图片描述
图中RGB原色值位于3个定顶点上,二次色青色、深红色和黄色位于另外3顶点上,黑色位于原点处,白色位于离原点最远的顶点上。灰度(RGB的值相等)沿着连接着两点的直线从黑色延伸到白色;不同的颜色处在立方体上或其内部,可用1个三维向量来表示。
每个像素的比特数称为像素深度,若每幅红、绿、蓝图像都是一幅8比特图像,则每个RGB彩色像素有24比特深度。全彩色图像通常用来表示一种24比特的RGB图像,颜色总数为(28)3 = 16777216。
但实际使用的只有216种稳定色。

实现
令 PR 、 PG 和 PB 分别表示三幅 RGB 分量图像。则RGB 图像就是利用 cat(级联)操作将这些分量图像组合而成的彩色图像:

RGB_iamge = cat(3,PR,PG,PB); % 将PR、PG、PB 3个矩阵在第三个维度上进行级联

在进行cat操作时,图像应按照R、G、B的顺序放置。
cat(dim,A1,A2……)沿着由dim指定的方式级联 (它们必须是相同尺寸)。
dim=1,垂直安排;dim=2,水平安排; 如果dim=3,按照三维方式堆叠。
分量提取
若RGB_image表示一幅RGB图像,则可以使用如下命令提取3个分量:

PR = RGB_image(:,:,1);
PG = RGB_image(:,:,2);
PB = RGB_image(:,:,3);

完整代码

RGB_image = imread('C:\Users\win\Desktop\sunflower.jpg');
PR = RGB_image(:,:,1);
PG = RGB_image(:,:,2);
PB = RGB_image(:,:,3);

figure(1);
subplot(2,2,1);
imshow(RGB_image);
title('原图');

subplot(2,2,2);
imshow(PR);
title('红色分量');

subplot(2,2,3);
imshow(PG);
title('绿色分量');

subplot(2,2,4);
imshow(PB);
title('蓝色分量');

% 使用cat函数进行级联
RGB_red = cat(3,PR,zeros(size(PR)),zeros(size(PR)));
RGB_green = cat(3,zeros(size(PG)),PG,zeros(size(PG)));
RGB_blue = cat(3,zeros(size(PB)),zeros(size(PB)),PB);

figure('Name','使用级联函数');
subplot(2,2,1);
imshow(RGB_image);
title('原图');

subplot(2,2,2);
imshow(RGB_red);
title('红色分量图');

subplot(2,2,3);
imshow(RGB_green);
title('绿色分量图');

subplot(2,2,4);
imshow(RGB_blue);
title('蓝色分量图');

实验结果
在这里插入图片描述
在这里插入图片描述
自然界中任何一种色光都可由R、G、B三原色按不同的比例相加混合而成。当三个分量都为0时,混合成黑色;当三个分量都为1时,混合成白色;当三个分量都相等时,混合成灰度图。

2.2 CMY和CMYK彩色模型(相减混色模型)

CMY描述的是颜料的三原色(青色、深红色、黄色)。色彩的显示不是直接来自于光纤的色彩,而是光线被物体吸收掉一部分之后反射回来的剩余光线所产生的。当光纤都被吸收时,呈现黑色;当光线都被反射时,呈现白色。
CMY适用于彩色打印机和复印机。要求输入CMY数据或在内部将RGB转换为CMY。
在这里插入图片描述
假定RGB值都归一化到了[0,1]区间。
如上式所示,涂有青色颜料的表面所反射的光中不包含红色。其余的两个类似。
等量的青色、深红色和黄色可以产生黑色。但实际上,基于打印目的组合这几种颜色所产生的黑色不纯,为了生成真正的黑色,加入了第四种颜色——黑色,即CMYK模型

RGB图像和CMY之间的转换的实现:
通过imcomplement()函数实现

rgb = imread('C:\Users\win\Desktop\sunflower.jpg');
cmy = imcomplement(rgb);
figure();
subplot(1,2,1)
imshow(rgb);
title('rgb图像');

subplot(1,2,2);
imshow(cmy);
title('cmy图像');

实验结果:
在这里插入图片描述

2.3 HSI彩色模型

从人的视觉系统出发,直接使用颜色三要素:色调(Hue)、饱和度(Saturation)、亮度(Intensity)来描述颜色。

  • 色调。是彩色最重要的属性,决定颜色的本质,由物体反射光线中占优势的波长来决定,不同波长产生不同的颜色感觉。即观察者感觉到的主要颜色。
  • 饱和度。指颜色的深浅和浓淡程度,饱和度越高,颜色越深。饱和度的深浅和白色的比例有关,白色比例越多,饱和度越低。
  • 亮度。人眼感觉光的明暗程度。光的能量越大,亮度越大。

色调和饱和度统称为色度。
在这里插入图片描述
强调:与红轴的夹角为色调,向量的长度是饱和度。色度平面以什么样的形状出现,是无关紧要的。
HSI彩色空间可用如下的空间模型来表示。中间的横截面就是色度平面,上下平移色度平面即亮度的表示。
在这里插入图片描述
色调H的取值范围:0~360;饱和度的取值范围:0-1;亮度的取值范围:0-1
HSI空间中亮度和色度具有可分离特性,使得图像处理和及其视觉中大量灰度处理算法都可在HSI彩色空间中方便使用。

RGB到HSI的彩色转换及实现
给定一幅RGB彩色格式图像,其对应的HSI空间的分量表示如下:
在这里插入图片描述
假定RGB值都归一化到了[0,1]区间。
实现
rgb2hsi()函数

function hsi = rgb2hsi(rgb)
% 功能:将一幅RGB图像转换为HSI图像
% 输入图像是M*N*3的矩阵
% 假如所有的RGB分量是均衡的,那么HSI转换就是未定义的
% 输入图像可能是double([0,1]),unit8或unit16
% 输出图像是double的

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

% 进行转换
temp1 = 0.5 * ((r - g) + (r - b));
temp2 = sqrt((r - g).^2 + (r - b).*(g-b));
theta = acos(temp1./(temp2 + eps)); % acos()为arccos函数的实现,给除数加一个很小的数eps。是防止除数为0
H = theta; 
H(b > g) = 2*pi - H(b > g); 
H = H/(2*pi); 

temp3 = min(min(r,g),b);   % min()只支持两个数的比较
temp4 = r + g + b;
if(temp4 == 0)
    temp4 = eps;  % 防止除数为零
end
S = 1 - 3.* (temp3./ temp4);

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

hsi = cat(3,H,S,I);
end

实验结果:
在这里插入图片描述
HSI到RGB的彩色转换及实现
RG扇区(0<= H < 120):当H的值在该扇区中时,RGB分量由下式给出:
在这里插入图片描述
GB扇区(120<= H < 240):当H的值在该扇区中时,首先从H中减去120,即H = H - 120,然后RGB分量为:
在这里插入图片描述
BR扇区(240<= H < 360):当H的值在该扇区中时,则从H中减去240,即H = H - 240,则RGB分量为:
在这里插入图片描述
hsi2rgb()函数

function rgb = hsi2rgb(hsi)
% 功能:将一幅HSI图像转换为RGB图像
% 其中hsi的三个分量都是归一化后的

% 抽取图像分量
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));  % 寻找在RG扇区的H
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));

% GB扇区(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扇区(4*pi/3 <= H <= 2*pi)
idx = find((4*pi/3 <= H) & (H <= 2*pi));  % 注意这里要算上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));

% 将R、G、B分量级联成以一幅RGB图像
rgb = cat(3,R,G,B);
rgb = max(min(rgb,1),0);
end

测试

rgb = imread('C:\Users\win\Desktop\sunflower.jpg');
hsi = rgb2hsi(rgb);
rgb1 = hsi2rgb(hsi);
figure();
subplot(1,3,1);
imshow(rgb);
title('原图');

subplot(1,3,2);
imshow(hsi);
title('RGB转HSI图像');

subplot(1,3,3);
imshow(rgb1);
title('HSI转RGB图像');

实验结果
在这里插入图片描述

2.4 其他彩色模型

HSV模型
是人们用来从调色板或颜色轮中挑选颜色(例如颜料、墨水等)所采用的的彩色系统之一。HSV表示色调、饱和度和数值。该系统比RGB更接近于人们的经验和对彩色的感知。
matlab中的实现:rgb2hsv()函数、hsv2rgb()函数
YIQ彩色模型
Y指亮度(Brightness),即灰度值,可提供黑白电视机的所有影像信息;I和Q指色调和饱和度(存储彩色信息)。是北美NTSC彩色系统,主要用于美国的电视系统。
matlab中的实现:rgb2ntsc()函数、ntsc2rgb()函数
YUV彩色模型
Y指亮度,即灰度值,可提供黑白电视的所有影像信息;U和V代表色差,是构成彩色的两个分量。一个主要优势是它的亮度信号Y和色度信号U、V是分离的。如果只有Y信号分量而没有U、V分量,那图像就是黑白灰度图。被用于的电视系统(属于PAL系统)。
matlab中的实现:rgb2yuv()函数、yuv2rgb()函数
YCbCr彩色模型
Y指亮度,即灰度值,与YUV中的Y相同,Cb和Cr有U和V调整得到。JPEG采用的彩色空间。
matlab中的实现:rgb2ycbcr()函数、ycbcr2rgb()函数

三、彩色图像处理基础

3.1 伪彩色图像处理

伪彩色图像处理是指基于一种指定的规则对灰度值赋以颜色的处理。主要应用是对单幅图像或序列图像中灰度级事件的人类可视化和解释。

灰度分层
灰度分层和彩色编码技术是伪彩色图像处理中最简单的例子之一。
在这里插入图片描述
图中li表示灰度图像的某一个灰度级,li将灰度图像分成两部分,给两部分分别赋予不同的彩色。
在这里插入图片描述
最简单的是将整个灰度分成两个区间,当使用更多的灰度级时,灰度级和颜色的映射函数将呈现阶梯式。
灰度到彩色的变换
对任何输入像素的灰度执行3个独立的变换,然后将这3个变换结果分别送入彩色电视监视器的红绿蓝通道。用这种方法产生一幅合成图像,合成图像的彩色内容由变换函数(可以是平滑的非线性函数)的特性调制。
注意:是在图像亮度值上进行的变化,和位置无关。
一幅单色图像处理
在这里插入图片描述
多幅单色图像处理
在这里插入图片描述

3.2 全彩色图像处理

处理方法分为两大类:

  • 分别处理每一幅图像的分量,然后由分别处理过的分量图像形成一幅处理过的合成彩色图像。对每个分量的处理技术可以应用到对灰度图像处理的技术上,但这种通道式的独立处理技术忽略了通道间的相互影响。
  • 直接处理彩色像素(向量)。全彩色图像至少有3个分量,所以彩色像素实际上是向量。

如,在RGB系统中。令c表示RGB彩色空间中的一个任意向量:
在这里插入图片描述
c的分量仅是一幅彩色图像在一点处的RGB分量。
彩色分量是坐标(x,y)的函数,表示为:
在这里插入图片描述
对大小为M*N的图像,有MN个这样的向量c(x,y)。
为了使每种彩色分量的处理和基于向量的处理达到同样的效果,需要满足以下两个条件:

  • 处理必须对向量和标量都可用;
  • 对向量的每个分量的操作对于其他分量必须是独立的。

3.3 彩色变换

涉及在单一彩色模型下,以处理彩色图像的分量为基础。
公式
与之前的灰度变换技术类似,彩色变换的模型如下:
在这里插入图片描述
f(x,y)为彩色输入图像,g(x,y)为变换后的彩色输出图像,T为空间域上的算子。其中的像素值是从彩色空间选择的、用来表示图像的彩色控件的3元组或4元组。
在这里插入图片描述
上式也表示彩色变换。ri和si是f(x,y)和g(x,y)在任何点处彩色分量的变量,n是彩色分量数,其取决于所用的彩色空间,如RGB空间,n = 3;CMYK空间,n = 4。

补色

补色:彩色环上,与色调直接相对的另一端。
在这里插入图片描述
补色对于增强嵌在彩色图像暗区的细节很有用,特别是区域在大小上占优势时。
在RGB中做反转是一分量对一分量的,但是,在HSI中,反转图的S分量不能从原图的S分量单独获得。

彩色补偿

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

function S = compensate(im)
[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中的坐标为i2,j2
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);
end

调用函数即可,实验结果如下:
在这里插入图片描述

彩色分层

突出图像中某个特定彩色区域对从其周围分离出目标物体很有用。
对彩色图像进行分层的简单方法之一是,把某些感兴趣区域之外的彩色映射为不突出的中性颜色。

色调和彩色校正

背景:在图像形成、运输、显示过程中,存在非线性可能造成颜色的不平衡。
CIE L*a*b*模型。其中L*a*b*分量计算如下:
在这里插入图片描述
其中,XW、YW、ZW是参考白色三激励值,即CIE标准D65照度下的一种完美的漫反射白色。
L*a*b*系统是一种优秀的亮度(由L*表示)和彩色(a*表示红减绿,b*表示绿减蓝)分离器。在图像操作(色调和对比度编辑)和图像压缩方面很有用。
校准图像成像系统的主要意义是,它允许交互地和独立地校正色调和色彩的不平衡,即按两个顺序操作。

彩色平衡:

function new = color_balance(im)
% 彩色平衡函数
[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)=F1(:,:,2);
F2_(1,1,2)=F1(:,:,2);
F2_(1,1,3)=F1(:,:,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);

直方图处理

直方图均衡化基本思想是对图像中像素个数多的灰度级进行扩展,而对图像中像素个数少的灰度进行压缩,从而扩展像素的取值范围,提高对比度和灰度色调的变化,使图像更加清晰。
直方图均衡化一来可以提高图像的对比度,二来可以把图像变换成像素值是几乎均匀分布的图像。
HSI彩色空间是适合该类方法的理想空间。

四、彩色图像处理

4.1 平滑和锐化

平滑
和灰度图像平滑类似。
在一幅RGB彩色图像中,令Sxy表示中心位于(x,y)的邻域定义的一组坐标。在该邻域中RGB分量的向量平均值为:
在这里插入图片描述
满足3.2节及向量相加的性质,故有:
在这里插入图片描述
将该向量的分量视为几幅标量图像,每幅标量图像可以通过灰度级邻域处理,单独平滑RGB图像的每个分量。
结论:邻域平均平滑可以在每个彩色平面的基础上进行,其结果与使用RGB彩色向量执行平均是相同的。
实现:

如第三章描述的那样,线性空间滤波器是用函数fspecial()产生的,然后再使用函数imfilter执行滤波。

fc_filtered = imfilter(fc,w);

w为平滑滤波器。
有两种方法对图像进行平滑处理

  • 直接对RGB图像进行平滑滤波
  • 对RGB图像转换到HSI空间,对I分量进行平滑滤波后,再将处理后的HSI图像转换回RGB图像。

因为HSI彩色模型的一个重要优点是,强度和彩色信息是独立的,使得其适合于许多灰度处理技术,有时只对I分量进行平滑处理可能效果更好。

两种平滑方法的差别会随着滤波器尺寸的增加而变得更加显著。

img = imread('C:\Users\win\Desktop\paint_brushes.jpg');
hsi = rgb2hsi(img);
H = hsi(:,:,1);
S = hsi(:,:,2);
I = hsi(:,:,3);
% 生成滤波器
w = fspecial('average',5);

%对RGB图像直接进行平滑滤波
img_filtered = imfilter(img,w.'replicate');

%对HSI图像中的I分量进行平滑滤波
I_filtered = imfilter(I,w,'replicate');
HSI = cat(3,H,S,I_filtered);
hsi_filtered = hsi2rgb(HSI);

figure();
subplot(1,3,1);
imshow(img);
title('RGB原图');

subplot(1,3,2);
imshow(img_filtered);
title('对RGB图像平滑');

subplot(1,3,3);
imshow(hsi_filtered);
title('对HSI中的I分量进行平滑');

实验结果:
在这里插入图片描述
锐化
使用拉普拉斯算子进行图像锐化。
在RGB彩色模型中,向量c的拉普拉斯变换为:
在这里插入图片描述
故可通过计算每幅图像的拉普拉斯变换来计算全彩色图像的拉普拉斯变换。

img = imread('C:\Users\win\Desktop\fence-climbing.jpg');
hsi = rgb2hsi(img);
H = hsi(:,:,1);
S = hsi(:,:,2);
I = hsi(:,:,3);
% 生成滤波器
w = fspecial('laplacian');
%对RGB图像直接进行锐化滤波
temp = imfilter(img,w,'replicate');  % 得到的只是图像的对比度高的轮廓信息
img_filtered = img + temp;  % 将两者叠加,即起到锐化的作用
%对HSI图像中的I分量进行锐化滤波
temp = imfilter(I,w);
I_filtered = I + temp;
HSI = cat(3,H,S,I_filtered);
hsi_filtered = hsi2rgb(HSI);

figure();
subplot(1,3,1);
imshow(img);
title('RGB原图');

subplot(1,3,2);
imshow(img_filtered);
title('对RGB图像锐化');

subplot(1,3,3);
imshow(hsi_filtered);
title('对HSI中的I分量进行锐化');

实验结果:
在这里插入图片描述
可以看出两种锐化方法的差异还是挺大的。

4.2 基于彩色的图像分割

分割是把一幅图像分成多个区域的处理。
HSI彩色空间的分割
如果我们希望以彩色为基础来分割一幅图像,则可在HSI空间中,利用色调不同进行分割,将饱和度作为一个模板。彩色图像分割中不常使用亮度图像,因为它不携带彩色信息。

RGB向量空间中的分割
分割用RGB向量能得到更好的结果。
假定我们的目的是在RGB图像中分割一个特定染色区域的物体。给定一组感兴趣的有代表性彩色的彩色样点集,可得到我们希望分割的颜色的“平均”估计。用RGB向量a来表示这个平均彩色。分割的目的是将给定图像中的每个RGB像素按照是否具有指定范围内的颜色来划分。最简单的相似性度量是欧式距离
z表示RGB空间中的任意一点。若za之间的距离小于特定的阈值D0,则称它们相似。z和a间的欧式距离如下:
在这里插入图片描述
其中下标R、G、B表示向量a和z的RGB分量。
上式的推广是形如下式的距离度量:
在这里插入图片描述
其中C表示我们希望分割的有代表性颜色的样本的协方差矩阵。
分割过程通过函数colorseg()实现。具体语法如下:
s = colorseg(method,f,T,parameters)
method:euclidean(欧氏距离)、mahalanobis(马氏距离);
f:待分割的RGB图像;
T(D0):上述提及的阈值
参数:若选择的是‘euclidean’,则输入参数是a,若选择的是‘mahalanobis’,则输入参数是a和C。a即上述表示平均色彩的向量a,它的形式不是行就是列,C是3*3的协方差矩阵。

彩色边缘检测
边缘检测对图像分割来说是一个重要工具。本节是以单一图像为基础计算边缘的,而不是直接在彩色向量空间中计算边缘。
回忆可知,对于标量函数f(x,y),梯度是坐标(x,y)处指向f的最大变化理念方向的向量。
r、g、b是沿RGB彩色空间的R、G、B轴的单位向量,并定义向量
在这里插入图片描述
令gxx,gyy和gxy表示上述向量的点积:
在这里插入图片描述
其中R、G和B以及g都是x和y的函数。c(x,y)的最大变化率方向的角度如下:
在这里插入图片描述
点(x,y)处的变化率的值如下:
在这里插入图片描述
:θ(x,y)和Fθ(x,y)是与输入图像大小相同的图像。θ(x,y)的元素是在计算梯度后每个点的角度,Fθ(x,y)是梯度图像。
实现函数:colorgrad(),具体语法如下:
[VG,A,PPG] = colorgrad(f,T)
f:一幅RGB图像
T:范围[0,1]内的一个可选阈值(默认为0)
VG:RGB向量梯度Fθ(x,y)
A:以弧度计的角度,用于实现RGB图像
PPG:是对单独彩色平面(为比较目的而产生)的二维梯度求和形式的梯度。
当T在参数列表中时,输出VG和PPG通过函数colorgrad归一化到范围[0,1]内,并且它们被阈值处理,以便其值小于或等于T时VG(x,y) = 0,其他情况下VG(x,y) = VG(x,y)。PPG的情况与此类似;当T不在参数列表中时,将T设置为0.

f=imread('C:\Users\win\Desktop\sunflower.jpg');
[VG,A,PPG]=colorgrad(f,0.2); %VG为向量梯度,A为向量角度,PPG为计算每一维梯度后合成  
subplot(2, 2, 1), imshow(f);title('原图像');
subplot(2, 2, 2), imshow(VG);title('T=0.2,在rgb空间计算梯度图像(VG)');
subplot(2, 2, 3), imshow(PPG);title('T=0.2,分别在rgb计算梯度然后相加(PPG)');
subplot(2, 2, 4), imshow(abs(VG-PPG),[]);title('T=0.2,2种梯度差值的绝对值'); 

实验结果:
在这里插入图片描述
T值越小能够检测的边线越多,越容易从图像中挑出不相关信息;T越大,会丢失细的或者短的线条,当T=0时检测的边线最多,当T=1时,几乎检测不到边线,图像为纯黑色。VG和PPG两种计算彩色图像梯度的方法,所产生的效果也不同;VG效果要好一点,边线更多;两种梯度的绝对差检测的边线最少。

4.3 彩色图像中的噪声

彩色图像的噪声内容在每个彩色通道中具有相同的特性,但噪声对不同彩色通道锁造成的影响不同。一种可能是个别通道的电子学故障。然而,不同的噪声水平更可能是由每个彩色通道的相对照射强度的差异造成的。

4.4 彩色图像压缩

描述彩色所要求的比特数比描述灰度级所要求的比特数大3~4倍,所以数据压缩在存储和传输彩色图像中很重要。
压缩:减小或消除冗余和/或不相干数据的处理。

  • 5
    点赞
  • 1
    评论
  • 44
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值