第六章 彩色图像处理

MATLAB中图像的表示

图像处理工具箱会将彩色图像当做索引图像或RGB图像(红,绿,蓝)来处理。

RGB图像

一幅RGB图像是一个M * N * 3的彩色像素数组,其中每个色彩像素是一个三值组,这三个值分别对应一个特定空间位置处该RGB图像的红,绿,蓝分量。
RGB图像
另 fR,fG,fB分别表示三幅RGB图像,一幅RGB图像就是使用cat(连接)运算符通过堆叠这些分量图像形成的:rgb_image = cat(3,fR,fG,fB),该运算中,要求图像按顺序放置。
用下面的命令提取三幅分量图像:
fR = rgb_image(:,:,1)
fG = rgb_image(:,:,2)
fB = rgb_image(:,:,3)
RGB色彩空间通常以图解方式显示为一个RGB色彩立方体
这里写图片描述
为从任意角度查看该彩色立方体,可使用自定义函数 rgbcube(vx,vy,vz)

rgbcube(5,5,2)

彩色立方体

索引图像

索引图像有两个分量:一个整数数据矩阵X和一个彩色映射矩阵map.矩阵map是一个m*3的double类数组,其值是区间[0,1]上的浮点数。
要显示一幅索引图像,可写出imshow(x,map)image(x);colormap(map)
有时需要用具有较少颜色的映射去近似一个索引映射。为此,我们使用函数imapprox
语法:[Y,newmap] = imapprox(X,map,n)

处理RGB和索引图像的函数

dither 采用“抖动”方法从RGB图像创建索引图像
grayslice 从灰度图像通过阈值处理创建索引图像
gray2ind 从灰度图像创建索引图像
ind2gray 从索引图像创建灰度图像
rgb2ind 从RGB图像创建索引图像
ind2rgb 从索引图像创建RGB图像
rgb2gray 从RGB图像创建灰度图像

使用dither
dither
使用grayslice
grayslice

[X map]=rgb2ind(f,256);subplot(241),imshow(X,map);title('256索引');
[X map]=rgb2ind(f,128);subplot(242),imshow(X,map);title('128索引');
[X map]=rgb2ind(f,64);subplot(243),imshow(X,map);title('64索引');
[X map]=rgb2ind(f,32);subplot(244),imshow(X,map);title('32索引');
[X map]=rgb2ind(f,16);subplot(245),imshow(X,map);title('16索引');
[X map]=rgb2ind(f,8);subplot(246),imshow(X,map);title('8索引');
[X map]=rgb2ind(f,4);subplot(247),imshow(X,map);title('4索引');
[X map]=rgb2ind(f,2);subplot(248),imshow(X,map);title('2索引');

索引图像

彩色空间转换

颜色基本概念:

  • 亮度

    明亮程度,光作用于人眼时所引起的明亮程度不同。
    它与被观察物体的发光强度有关,强度大小,决定我们的感觉亮或暗。
    如果彩色光的强度降到使人们看不到了,在亮度这个分量上他就以黑色对应,如果其强度变得很大,那么亮度就以白色对应。亮度是非彩色的属性,它描述亮还是暗,彩色图象中的亮度对应于黑白图象中的灰度。
    对同一物体照射的光越强,反射光也越强,则越亮。
    对不同物体在相同照射情况下,发射越强者看起来越亮。(例如:镜子的反射)
    亮度还与人类视觉系统的视觉敏感函数相关,即使强度相同,不同颜色的光当照射同一物体时也会产生不同的亮度。

  • 色调

    明亮程度,光作用于人眼时所引起的明亮程度不同。
    它与被观察物体的发光强度有关,强度大小,决定我们的感觉亮或暗。
    如果彩色光的强度降到使人们看不到了,在亮度这个分量上他就以黑色对应,如果其强度变得很大,那么亮度就以白色对应。亮度是非彩色的属性,它描述亮还是暗,彩色图象中的亮度对应于黑白图象中的灰度。
    对同一物体照射的光越强,反射光也越强,则越亮。
    对不同物体在相同照射情况下,发射越强者看起来越亮。(例如:镜子的反射)
    亮度还与人类视觉系统的视觉敏感函数相关,即使强度相同,不同颜色的光当照射同一物体时也会产生不同的亮度。

  • 饱和度

    饱和度是指颜色的纯度即掺入白光的程度。
    饱和度(saturation)是颜色的另一个属性,它描述纯颜色用白色冲淡的程度,高饱和度的颜色含有较少的白色。
    饱和度也是可以指颜色的深浅程度。对于同一个色调的彩色光,饱和度越深颜色越鲜明或者说越纯。
    例如:当红色加进白光之后冲淡为粉红色,其基本色调还是红色,但饱和度降低;也就是说,淡色的饱和度比鲜艳的颜色要低一些。
    饱和度还和亮度有关,如果在就饱和的彩色光中加入白光的成分,增加了光的强度,会变得更亮,但它的饱和度降低了。如果在某色调的彩色光中,掺入别的彩色光,则会引起色调的变化,既基本的颜色变了,只有掺入白光时,仅仅引起饱和度的变化。

  • 色度

    通常,把色调和饱和度称为色度,则亮度表示某彩色光的明亮程度,色度表示颜色的类别和深浅程度。

NTSC彩色空间

NTSC彩色空间用于模拟电视。这种格式的主要优势是灰度信息和彩色数据是分离开来的,所以同一信号可以用于彩色电视机和黑白电视机。在NTSC格式中,图像数据由三部分组成:亮度(Y)、色调(I)和饱和度(Q)。在这里,字母YIQ的选择常常是按照惯例进行的。亮度分量描述灰度信息,其他两个分量携带电视信号的彩色信息。YIQ分量都是用线性变换从一幅图像的RGB分量得到的:

NTSC

f = imread('hua.png');
g = rgb2ntsc(f);
subplot(121),imshow(f),title('原图');
subplot(122),imshow(g),title('rgb2ntsc');

相应的函数ntsc2rgb可以将图片转化回去
rgb2ntsc

YCbCR彩色空间

YCbCr彩色空间广泛用于数字视频。在这种格式中,亮度信息用单独的分量Y来表示,彩色信息是用两个色差分量Cb和Cr来存储的。分量Cb是蓝色分量与参考值的差,分量Cr是红色分量与参考值的差。工具箱采用的从RGB转换为YcbCr的变换是:

g = rgb2ycbcr(f);
subplot(121),imshow(f),title('原图');
subplot(122),imshow(g),title('rgb2ycbcr');

相应的函数ycbr2rgb可以将图片转化回去
ycbcr

HSV彩色空间

HSV(色调、饱和度、值)是人们用来从颜色轮或调色板中挑选颜色(例如颜料或墨水)时使用的彩色系统之一,值得考虑的是,这个颜色系统比RGB系统更接近人们的经验和对彩色的感知。在画家的术语里,色调、饱和度和数值被称作色调、明暗和色值。
HSV彩色空间可以通过从RGB彩色立方体沿灰度轴(连接黑色顶点和白色顶点的轴)用公式来表达,从而得出图6-5(a)所示的六边形表示的彩色调色板。当我们沿着图6-5(b)中的垂直轴(灰)轴移动时,这个与轴垂直的六边形平面的大小是变化的,并产生了图中描述的量。
这里写图片描述这里写图片描述

g = rgb2hsv(f);
subplot(121),imshow(f),title('原图');
subplot(122),imshow(g),title('rgb2hsv');

使用函数rgb2hsv,hsv2rgb可以转换回去
rgb2hsv

CMY和CMYK彩色空间

imcomplement
imcomplement

HSI彩色空间

HSI模型是美国色彩学家孟塞尔(H.A.Munseu)于1915年提出的,它反映了人的视觉系统感知彩色的方式,以色调、饱和度和强度三种基本特征量来感知颜色。
rgb = rgb2hsi(‘img’),rgb = hsi2rgb(‘img’)可以转换回来
rgb2hsi

彩色图像处理的基础知识

1) 颜色变换(也叫彩色映射)
2) 单独彩色平面的空间处理
3) 颜色向量的处理

  • ice函数(交互颜色编辑)
    属 性 名 属 性 值
    image 一幅RGB或单色输入图像f,由交互指定的映射来变换
    space 被修改的分量彩色空间。可能的值是’rgb’、’cmy’、’hsi’、’hsv’、’ntsc’(或’yiq’)和’ycbcr’,默认值是’rgb’
    wait 如果是’on’(默认),g是被映射的图像;如果是’off’,g是映射输入图像的句柄
g = ice('image',f);
![ice](https://img-blog.csdn.net/20170628173852874?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzY3NzE4NTA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) ![这里写图片描述](https://img-blog.csdn.net/20170628174242345?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzY3NzE4NTA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) ![这里写图片描述](https://img-blog.csdn.net/20170628174909261?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzY3NzE4NTA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) ![这里写图片描述](https://img-blog.csdn.net/20170628192501656?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzY3NzE4NTA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) ![这里写图片描述](https://img-blog.csdn.net/20170629133220145?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzY3NzE4NTA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

彩色图像的空间滤波

彩色图像平滑

  • 抽取三幅分量图
f = imread('hua.png');
 fR = f(:, :, 1);
fG = f(:, :, 2);
fB = f(:, :, 3);
subplot(221);imshow(f);title('原图');
subplot(222);imshow(fR);title('原图');
subplot(222);imshow(fR);title('RED');
subplot(223);imshow(fG);title('GREEN');
subplot(224);imshow(fB);title('BLUE');

这里写图片描述

  • 分别对每幅分量图像滤波
w = fspecial('average',5);
fR_filtered = imfilter(fR,w,'replicate');
fR_filtered = imfilter(fG,w,'replicate');
fR_filtered = imfilter(fB,w,'replicate');
  • 重建滤波后的RGB图像
fc_filtered = cat(3,fR_filtered,fG_filtered,fB_filtered);

rgb
上诉三步可以合并为:fc_filtered = imfilter(f,w,’replicate’);

HSI亮度分量平滑

h = rgb2hsi(f);
H = h(:,:,1);
S = h(:,:,2);
I = h(:,:,3);
w = fspecial('average',25);
I_filtered = imfilter(I,w,'replicate');
h = cat(3,H,S,I_filtered);
fc = hsi2rgb(h);
imshow(fc)

hsi

彩色图像锐化

w = fspecial('average',5);
fa = imfilter(f, w, 'replicate');
lapmask = [1 1 1; 1 -8 1; 1 1 1];
fen = imsubtract(fa, imfilter(fa, lapmask, 'replicate'));
subplot(121),imshow(fa);
subplot(122),imshow(fen);

锐化

直接在RGB向量空间的处理

使用梯度进行色彩边缘检测

[VG,A,PPG] = colorgrad(f);

其中,f是RGB图像,T是[0,1]范围内的阈值选项(默认为0);VG是RGB向量梯度Fθ(x, y);A是以弧度计的角度θ(x, y),并且PPG是由单独彩色平面的2D梯度之和形成的梯度图像。计算上述方程时,要求全部微分都可用函数clorgrad中的Sobel算子来实现。输出VG和PPG通过clorgrad被归一化到[0, 1]范围内,并且把它们作为阈值进行处理。所以,它们的值小于或等于T,VG(x,y)=0;对于其他的情况,VG(x,y) = VG(x,y)。类似的解释可用于PPG。

f1 = imread('1.jpg');
f2 = imread('2.jpg');
f3 = imread('3.jpg');
g = cat(3,f1,f2,f3);
[VG, A, PPG] = colorgrad(g);

这里写图片描述

在RGB向量空间中进行图像分割

 mask = roipoly(f); % Select region interactively.
red = immultiply(mask, f(:, :, 1));
green = immultiply(mask, f(:, :, 2));
blue = immultiply(mask, f(:, :, 3));
g = cat(3, red, green, blue);
figure, imshow(g);

这里写图片描述

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值