第五章 彩色图像处理

  • MATLAB中彩色图像的表示

    • RGB图像
    • 索引图像
    • 处理RGB和索引图像的函数
  • 彩色空间转换
    • NTSC彩色空间
    • YCbCr彩色空间
    • CMY和CMYK彩色空间
    • HSI彩色空间
    • 与设备无关的彩色空间
  • 彩色图像处理基础
  • 彩色变换
  • 彩色图像的空间滤波
    • 彩色图像平滑
    • 彩色图像锐化
  • 直接在RGB向量空间的处理
    • 使用梯度进行彩色边缘检测
    • 在RGB向量空间中进行图像分割

一.MATLAB中彩色图像的表示

RGB图像

一幅RGB图像是一个MxNx3的彩色像素组。可视为三幅灰度图像形成的“堆叠”。
- 堆叠图像

rgb_image = cat(3, fR, fG, fB)

进行三幅分量图像的提取

fR = rgb_image(:, :, 1);

fG = rgb_image(:, :, 2);

fB = rgb_image(:, :, 3);

>> fR = f(:, :, 1);
>> fG = f(:, :, 2);
>> fB = f(:, :, 3);
>> subplot(221), imshow(f);
>> subplot(222), imshow(fR);
>> subplot(223), imshow(fG);
>> subplot(224), imshow(fB);

  • 自定义函数rgbcube
    可以从任意角度查看彩色立方体

    rgbcube(vx, vy, vz)

function rgbcube(vx, vy, vz)
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;patch('Vertices', vertices_matrix, 'Faces', faces_matrix, 'FaceVertexCData', colors, 'FaceColor', 'interp', 'EdgeAlpha', 0)if nargin == 0vx = 10;vy = 10;vz = 4;
elseif nargin ~= 3error('Wrong number of inputs.')
endaxis off
view([vx, vy, vz])
axis square

索引图像

索引图线有两个分量:一个整型数组矩阵X和一个彩色映射矩阵map。在我自己的理解看来就是把RGB图像分成了两部分存储。 map的每一行都指定单一颜色的红、绿、蓝分量。

imshow(X, map)

或者

image(X);
colormap(map);

后面对索引图像有更多的应用。 - 指定图像的背景色

>> whitebg('g');
>> whitebg('green');
>> whitebg([0 1 0]);
处理RGB和索引图像的函数
  • “抖动”——dither函数
    使用于灰度图像和彩色图像。这种技术常在由点组成的印刷页上给出色调变化的直观印象。

    g = dither(gray_image)

g是抖动处理过的二值图像(logical类)

>> bw = dither(g);
>> subplot(121), imshow(g);
>> subplot(122), imshow(bw);

  • 处理索引图像的函数

    • 将灰度图像处理为索引图像

    [X, map] = gray2ind(gray_image, n)

函数可以显示出整型的数据矩阵和彩色映射矩阵

>> [X, map] = gray2ind(g);
>> subplot(131), imshow(g);
>> subplot(132), imshow(X);
>> subplot(133), imshow(map);

将彩色图像处理为索引图像也是同样的方法。

[X, map] = rgb2ind(rgb_image, n, dither_option)

dither_option有两个值:‘dither’(默认),以损失空间分辨力为代价达到更好的颜色分辨力;‘nodither’将原始图像中的每个颜色映射为新映射中最接近的颜色,不执行抖动。

>> [X1, map1] = rgb2ind(g, 4, 'nodither');
>> imshow(X1, map1);

这样从图中就可以清晰的数出map中有4种颜色数量。

  • 整型的数据矩阵和彩色映射矩阵整合成灰度图像或彩色图像

rgb_ image = ind2rgb(X, map)

  • RGB图像转换为灰度图像

gray_image = rgb2gray(rgb_image)

>> f1 = rgb2gray(f);
>> imshow(f1);
>> subplot(121), imshow(f);
>> subplot(122), imshow(f1);

  • 总结使用函数
>> [X1, map1] = rgb2ind(g, 8, 'nodither');
>> subplot(231),imshow(g);
>> subplot(232),imshow(X1, map1);
>> [X2, map2] = rgb2ind(g, 8, 'dither');
>> subplot(233),imshow(X2, map2);
>> g1 = rgb2gray(g);
>> subplot(234),imshow(g1);
>> g2 = dither(g1);
>> subplot(235),imshow(g2);

二.彩色空间转换

NTSC彩色空间

NTSC格式中,图像数据由三个分量组成:亮度(Y), 色调(I), 饱和度(Q)。

Y:Luminance,颜色的明视度即亮度,其实就是图像的灰度值(Gray value);I和Q携带颜色信息,In-phase从橙色到青色,Quadrature-phase从紫色到黄绿色。

相互转换过程

yiq_image = rgb2ntsc(rgb_image)

rgb_image = ntsc2rgb(yiq_image)

>> y = rgb2ntsc(g);
>> subplot(131), imshow(g);
>> subplot(132), imshow(y);
>> y = ntsc2rgb(y);
>> subplot(133), imshow(y);

YCbCr彩色空间

Cb是蓝色分量和参考值的差,Cr是红色分量和参考值的差。

ycbcr_image = rgb2ycbcr(rgb_image)

rgb_image = ycbcr2rgb(ycbcr_image)

>> y = rgb2ycbcr(f);
>> subplot(131), imshow(f);
>> subplot(132), imshow(y);
>> y = ycbcr2rgb(y);

HSV彩色空间

HSV是更接近于人们描述彩色感觉时所用的方式, 也就是色调、饱和度和数值。

hsv_image = rgb2hsv(rgb_image)

rgb_image = hsv2rgb(hsv_image)

>> y = rgb2hsv(g);
>> subplot(131), imshow(g);
>> subplot(132), imshow(y);
>> y = hsv2rgb(y);
>> subplot(133), imshow(y);

CMY和CMYK彩色空间

大多数要将材料淀积与纸上的设备都要求输入CMY数据, 比如彩色打印机和复印机等。

cmy_image = imcomplement(rgb_image)

rgb_image = imcomplement(cmy_image)

这个函数很熟悉,其实就是==图像转负片==的处理

>> y = imcomplement(g);
>> subplot(131), imshow(g);
>> subplot(132), imshow(y);
>> y = imcomplement(y);
>> subplot(133), imshow(y);

HSI彩色空间

自定义的HSI和RGB之间转换的函数使用方法同上

>> y = rgb2hsi(g);
>> imshow(y);

与设备无关的彩色空间
  • CIE和sRGB彩色空间转换

cform = makecform(type)

g = applycform(f, cform)

applycform使用cform结构来转换颜色

以上函数可用于几个设备无关的彩色空间之间进行转换

>> cform = makecform('srgb2xyz');
>> g3 = applycform(g, cform);
>> subplot(121), imshow(g);
>> subplot(122), imshow(g3);

  • 构建一个可用于彩色和灰度出版的彩色标尺
>> L = linspace(40, 80, 1024);
>> radius = 70;
>> theta = linspace(0, pi, 1024);
>> a = radius * cos(theta);
>> b = radius * sin(theta);
>> L = repmat(L, 100, 1);
>> a = repmat(a, 100, 1);
>> b = repmat(b, 100, 1);
>> lab_scale = cat(3, L, a, b);
>> cform = makecform('lab2srgb');
>> rgb_scale = applycform(lab_scale, cform);
>> imshow(rgb_scale);

  • ICC彩色剖面

为了在输入、输出和显示设备间高质量地再现颜色,需要创建一个变换,来将颜色从一种设备映射到另一种设备中。

在进行练习之前,我先从ICC剖面网站上下载了一个新的.icc剖面作为输出,这样进行对比。

在图片周围加上白框更易于显示图片产生的变化。

>> ff = Fig0612;
>> ff = padarray(f, [40 40], 255, 'both');
>> ff = padarray(ff, [4 4], 230, 'both');
>> subplot(121), imshow(ff);
>> p_srgb = iccread('sRGB.icm');
>> p_snap = iccread('PSOcoated_v3.icc');
>> cform1 = makecform('icc', p_srgb, p_snap);
>> fp_newsprint = applycform(ff, cform1);
>> cform2 = makecform('icc', p_snap, p_srgb, 'SourceRenderingIntent', 'AbsoluteColorimetric', 'DestRenderingIntent', 'AbsoluteColorimetric');
>> fp_proof = applycform(fp_newsprint, cform2);
>> subplot(122), imshow(fp_proof);

这个剖面是,根据ISO 12647-2:2013标准涂布纸(印刷基材1)进行单张纸和热固式卷筒纸胶印。

图片显示是打印出原图片之后发生的变化。

三.彩色图像处理基础

彩色图像处理细分为三个领域:

1.彩色变换(也称彩色映射)

2.各个彩色平面的空间处理

3.彩色向量处理

四.彩色变换

这一节引入一种使用图形法操作控制点的方法交互产生,并实时显示被处理的图形结果。

先说一下函数ice的开发,ice是一种自定义的函数,在学习过程中我们可以使用DIPUM工具箱里已有的ice.mat包和ice.fig显示。

g = ice(‘Property Name’, ‘Property Value’)

  • 图像及界面显示
>> g = ice('image', f);

>> g = ice('image', f, 'space', 'hsi');

该图片的负片如下图所示

  • 彩色对比增强

  • 单色对比增强

  • 伪彩色映射

在RGB彩色空间中表示衣服单色图像且对结果分量分别映射时,变换的结果是一幅伪彩色图像,其中输入图像的灰度级已被任意彩色代替。

  • 彩色平衡

一个重要的应用是照片的增强

>> f2 = ice('image', f, 'space', 'CMY');

将图片中过量的红色修改。

  • 直方图的映射

HSI在空间中处理RGB图像,ice中的参数值使用‘space’/‘hsi’

五.彩色空间滤波

彩色图像平滑

线性滤波器平滑一幅RGB图像:
1.抽取三幅分量图像

>> fR = f(:, :, 1);
>> fG = f(:, :, 2);
>> fB = f(:, :, 3);
>> subplot(221), imshow(f), title('RGB');
>> subplot(222), imshow(fR), title('R');
>> subplot(223), imshow(fG), title('G');
>> subplot(224), imshow(fB), title('B');

2.分别对每幅分量图像滤波,w表示使用special生成的平滑滤波器

fR_filtered = imfilter(fR, w, ‘replicate’)

>> w = [0.2 0.3 0.3; 0.3 0.2 0.4; 0.2 1 0.5];
>> fR_filtered = imfilter(fR, w, 'replicate');
>> fG_filtered = imfilter(fG, w, 'replicate');
>> fB_filtered = imfilter(fB, w, 'replicate');
>> fc_filtered = cat(3, fR_filtered, fG_filtered, fB_filtered);
>> subplot(221), imshow(fR_filtered), title('R');
>> subplot(222), imshow(fG_filtered), title('G');
>> subplot(223), imshow(fB_filtered), title('B');
>> subplot(224), imshow(fc_filtered), title('fc');

3.重建滤波后的RGB图像

fc_filtered = cat(3, fR_filtered, fG_filtered, fB_filtered)

也可以将==前面三个步骤合并为一步==

fc_filtered = imfilter(fc, w, ‘replicate’)

>> fc_filtered = imfilter(f, w, 'replicate');
>> imshow(fc_filtered);

与上面图片中的fc是同样的。

  • 彩色图像平滑

==fspecial函数==用于建立预定义的滤波算子,下面代码中用到的fspecial(‘average’, 25), 表示使用大小25 x 25像素的同一滤波器来对亮度分量滤波。平均滤波器大到足以产生有意义的模糊度。

>> h = rgb2hsi(f);
>> H = h(:, :, 1);
>> S = h(:, :, 2);
>> I = h(:, :, 3);
>> w = fspecial('average', 25);
>> hsi_filter = imfilter(h, w, 'replicate');
>> fH_imfiltered = imfilter(H, w, 'replicate');
>> Hsi_filtered = cat(3, fH_imfiltered, S, I);
>> subplot(231), imshow(H), title('H');
>> subplot(232), imshow(S), title('S');
>> subplot(233), imshow(I), title('I');
>> subplot(234), imshow(hsi_filter), title('HSI都平滑');
>> subplot(235), imshow(Hsi_filtered), title('H平滑');

彩色图像锐化

在处理灰度图像时我们使用了拉普拉斯滤波器, 在进行彩色图像锐化时,我们也可以使用拉普拉斯算子来锐化图像。

>> f = Fig0625;
>> w = [1 1 1; 1 -8 1; 1 1 1];
>> fdouble = tofloat(f);
>> g = fdouble - imfilter(fdouble, w, 'replicate');
>> subplot(121), imshow(f), title('原');
>> subplot(122), imshow(g), title('锐化');

图片可以清楚的显示出对比,图像的清晰度得到了明显的增强。

六.直接在RGB向量空间的处理

各个彩色平面的处理不等于直接在RGB向量空间的处理,所以需要有彩色图片的向量处理。

使用梯度进行彩色边缘检测
  • RGB图像的彩色梯度

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

colorgrad是自定义函数,可以实现计算RGB图像空间中的梯度。

VG是RGB向量梯度Fθ(x, y);A是以弧度计的角度图像θ(x, y);PPG是通过对各个彩色平面的二维梯度图像求和形成的梯度图形。

  • 检测RGB图像边缘示例

给出RGB图像的三个分量来形成RGB图像,并观察边缘。

>> g = cat(3, a, b, c);
>> subplot(231), imshow(a);
>> subplot(232), imshow(b);
>> subplot(233), imshow(c);
>> subplot(234), imshow(g), title('合成');
>> [VG, A, PPG] = colorgrad(g);
>> subplot(235), imshow(VG), title('VG');
>> subplot(236), imshow(PPG), title('PPG');

上图使用方块可能对显示结果不明显,所以我们处理一幅颜色更丰富的图片

>> f = Fig0604;
>> subplot(141), imshow(f), title('原图');
>> [VG, A, PPG] = colorgrad(f);
>> subplot(142), imshow(VG), title('RGB空间中梯度');
>> subplot(143), imshow(PPG), title('合成梯度');
>> subplot(144), imshow(abs(VG - PPG)), title('绝对差');

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

s = colorseg(method, f, T, parameters)

  • RGB彩色图像分割示例
>> mask = roipoly(f);
>> red = immultiply(mask, f(:, :, 1));
>> green = immultiply(mask, f(:, :, 2));
>> blue = immultiply(mask, f(:, :, 3));
>> g = cat(3, red, green, blue);
>> figure, imshow(g);

roipoly是形成交互选择区域的一个二值模板,可以切割成任意多边形图样。

第五章 彩色图像处理相关推荐

  1. 数字图像处理 第六章 彩色图像处理

    第六章 彩色图像处理 一.彩色基础 物理性质 消色与彩色光 人眼传感器 原色和合成色 颜色特征 二.彩色模型 2.1RGB彩色模型 2.1.1RGB示意图 2.2CMY和CMYK彩色模型 2.3HSI ...

  2. 数字图像处理——第六章 彩色图像处理

    数字图像处理--第六章 彩色图像处理 文章目录 数字图像处理--第六章 彩色图像处理 1 彩色模型 1.1 RGB彩色模型 1.2 CMY 和CMYK彩色模型 1.3 HSI彩色模型 2 伪彩色图像处 ...

  3. 数字图像处理--第六章彩色图像处理基础

    文章目录 6 彩色图像处理 6.1 彩色基础 6.2 彩色模型 6.2.1 RGB彩色模型 6.3 伪彩色图像处理 6.3.1 强度分层 6.4 全彩色图像处理 6.5 查色标(查找表)Look Up ...

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

    数字图像处理第六章 数字图像处理---彩色图像处理 (一) 在 MATLAB 中彩色图像的表示 1.1 RGB图像 1.2 索引图像 1.3 处理 RGB图像和索引 (二)彩色空间之间的转换 2.1 ...

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

    数字图像处理第六章 数字图像处理---彩色图像处理 (五) 彩色图像的空间滤波 5.1 彩色图像的平滑处理 5.2 彩色图像的锐化处理 (六) 直接在 RGB 矢量空间中处理 6.1 使用梯度的彩色边 ...

  6. 数字图像处理第六章 彩色图像处理

    彩色图像处理 1 彩色模型 1.1 RGB彩色模型 1.2 HSI彩色模型 2 彩色空间之间的转换 2.1 NTSC彩色空间 2.2 YCbCr彩色空间 2.3 CMY和CMYK彩色空间 2.4 HS ...

  7. 数字图像处理第六章——彩色图像处理

    目录 引言 一.彩色基础 二.彩色模型 2.1 RGB彩色模型 2.2 CMY和CMYK彩色模型 2.3 HSI彩色模型 三.伪彩色图像处理 3.1 灰度分层 3.2 灰度到彩色的变换 四.彩色变换 ...

  8. 第六章 彩色图像处理

    文章目录 6.2 彩色模型 6.2.1 RGB模型 6.2.2 CMY模型 6.2.3 HSI彩色模型 从RGB到HSI的彩色转换 6.3 伪彩色模型 6.3.1 灰度分层 6.3.2 灰度到彩色的变 ...

  9. 数字图像处理——第六章彩色图像处理

    文章目录 6.1 彩色模型简介 6.1.1 RGB彩色模型 6.1.2 CMY/CMYK模型 6.1.3 HSI模型 6.2 伪图像处理 6.3 彩色变换 总结 6.1 彩色模型简介 彩色模型也称为彩 ...

最新文章

  1. Gridview数据控件的七种字段类型
  2. 信息时代计算机应用技术,计算机应用技术
  3. 让ie6(opera)支持微软雅黑字体
  4. 怎么改变github的用户名字,身份?
  5. javaweb学习总结(十一):使用Cookie进行会话管理
  6. 蔡骏:17年前,我也只是个做着无聊工作的小青年
  7. switchhosts 没有修改hosts的权限解决方案
  8. 【C 语言】一元二次方程
  9. 2022年第十二届MathorCup高校数学建模挑战赛
  10. 小米小爱蓝牙音箱_至今为止功能最全面的「小爱同学」!小米小爱音箱Pro体验...
  11. 强化学习之Q-learning简介
  12. SPSS-论文常用格式-三线表
  13. 微信小程序云开发教程-墨刀原型工具入门
  14. 批量压缩图片软件 JAVA
  15. 热门商业模式解剖:哪个适合中国
  16. Android Menu菜单栏
  17. Jep解析字符串数学公式
  18. 什么是虚拟主机?有什么用?
  19. python中常用的转义字符
  20. 实用工具和网站合集分享

热门文章

  1. linux系统怎么远程进服务器
  2. 智能车竞赛·通过虚拟示波器实现电机PID调参
  3. 企业服务总线(ESB)
  4. 前端大全(基础总结)(根据js权威指南扩展)
  5. hbase bulkload java,HBase Bulkload 失败问题处理以及改进
  6. Axure如何实现全选、全不选功能
  7. c语言求根公式编程,c语言,求根公式
  8. 【回归分析】[6]--残差分析
  9. javapoet使用
  10. apache-Tomcat 8.5.39安装包 安装过程以及启动文件详解