第六章 彩色图像处理

第六章 彩色图像处理

RGB图像

  • RGB图像形成
    由三幅单色亮度图像组成。 fR, fG和fB分别表示三幅RGB分量图像

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

  • 提取分量图像

>> f = imread('D:\picture\素\sky.jpg');
>> fR = f(:, :, 1);
>> fG = f(:, :, 2);
>> fB = f(:, :, 3);
>>> subplot(121), imshow(f)
>> subplot(122), imshow(fR)
>> subplot(121), imshow(fG)
>> subplot(122), imshow(fB)

sky1
sky2

  • 自定义函数rgbcube
    rgbcube(vx, vy, vz)该函数生成一个从点(vx, vy, vz)观察的RGB立方体。
>> rgbcube(10,10,4); 
>> axis on;
>> title('RGB立方体');
![RGB立方体](https://img-blog.csdn.net/20170627103731064?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzgzMTEwNDE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

索引图像

索引图像有两个分量:一个整数数据矩阵X和一个彩色映射矩阵map。
索引图像

>> f = imread('D:\picture\素材\tower.jpg');
>> [X, map] = rgb2ind(f, 16, 'nodither');
>> subplot(221), imshow(f), title('原图')
>> subplot(222), imshow(X), title('X')
>> subplot(223), imshow(map), title('map')
>> subplot(224), imshow(X, map), title('索引图')
![这里写图片描述](https://img-blog.csdn.net/20170629092523503?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzgzMTEwNDE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 2. 处理RGB和索引图像的函数 ![函数](https://img-blog.csdn.net/20170627111722482?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzgzMTEwNDE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

dither主要与函数rgb2ind联合使用,以减少图像中的颜色数。

>> f = imread('D:\picture\MATLAB\flower.png');
>> [X1, map1] = rgb2ind(f, 8, 'nodither');
>> [X2, map2] = rgb2ind(f, 8, 'dither');
>> g = rgb2gray(f);
>> g1 = dither(g);
>> subplot(221); imshow(X1, map1), title('rgb2ind(f, 8, ''nodither'')');
>> subplot(221); imshow(f), title('原图');
>> subplot(222); imshow(X1, map1), title('rgb2ind未抖动');
>> subplot(223); imshow(X2, map2), title('rgb2ind抖动');
>> subplot(224); imshow(g), title('rgb2gray');
>> figure, imshow(g1), title('dither');
![这里写图片描述](https://img-blog.csdn.net/20170627161849850?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzgzMTEwNDE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) ![这里写图片描述](https://img-blog.csdn.net/20170627161916860?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzgzMTEwNDE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

彩色空间转换

NTSC彩色空间

NTSC彩色制式用于模拟电视。这种形式主要优点是:灰度信息和彩色数据是分离的。所以同一信号既可以用于彩色电视又可以用于黑白电视。
这里写图片描述
图像数据的三个分量: Y(亮度),I(色调),Q(饱和度)

  • yiq_image = rgb2ntsc(rgb_image)将RGB图像转化为NTSC图像
>> f = imread('D:\picture\MATLAB\flower.png');
>> g = rgb2ntsc(f);
>> imshow(g)  

flower

>> f = imread('D:\picture\MATLAB\flower.png');
>> g = rgb2ntsc(f);
>> g1 = g(:, :, 1);
>> g2 = g(:, :, 2);
>> g3 = g(:, :, 3);
>> subplot(131), imshow(g1), title('亮度图像');
>> subplot(132), imshow(g2), title('色调图像');
>> subplot(133), imshow(g3), title('饱和度图像');            

flower

YCbCr彩色空间

YCbCr彩色空间广泛用于数字视频。亮度信息用Y表示,彩色信息存储为两个色差分量Cb和Cr。Cb是蓝色分量和参考值的差,Cr是红色分量和参考值的差。
这里写图片描述

  • ycbcr_image = rgb2ycbcr(rgb_image)函数实现RGB图像转换为YCbCr图像。
>> f = imread('D:\picture\MATLAB\flower.png');
>> g = rgb2ycbcr(f);
>> imshow(g)

这里写图片描述

HSV彩色空间

HSV(色调Hue,饱和度Saturation,数值Value)是人们从颜色轮或调色版中挑选颜色时所用的几种彩色系统之一。这种系统比RGB系统更接近人们经验和描述彩色感觉时所用的方式。HSV彩色系统基于圆柱坐标系
这里写图片描述
轴表示灰度深浅,色调表示为围绕彩色六边形的角度,饱和度由距V轴的距离来度量。

  • hsv_image = rgb2hsv(rgb_image)函数实现RGB转换为HSV。
>> f = imread('D:\picture\MATLAB\flower.png');
>> g = rgb2hsv(f);
>> imshow(g)

这里写图片描述

CMY和CMYK彩色空间

青色(Cyan),深红色(Magenta),黄色(Yellow)是光的二次色。纯青色涂覆的表面反射的光中不包含红色,深红色不反射绿色,纯黄色不反射蓝色。从RGB转换为CMY近似于以下公式:
这里写图片描述
理论上等量的青色,深红色和黄色混合后会产生黑色。但实际中会产生模糊不清的黑色。所以为生成纯黑色,又加入了黑色,便出现了CMYK彩色模型。

  • cmy_image = imcomplement(rgb_image)函数可近似的把RGB模型转换为CMY模型。
>> f = imread('D:\picture\MATLAB\flower.png');
>> g = imcomplement(f);
>> imshow(g)

这里写图片描述

HSI彩色空间

HSI(色彩hue,饱和度saturation, 强度intensity)

  • 自定义函数hsi = rgb2hsi(rgb)实现RGB转换为HSI。
>> imshow(rgb2hsi(f));

这里写图片描述

彩色图像处理基础

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

  • 彩色变换(彩色映射)
  • 各个彩色平面的空间处理
  • 彩色向量处理
    在RGB系统中,每个彩色点都可以解释为一个从原点延伸到RGB坐标系中该点的向量
    这里写图片描述
    这里写图片描述

彩色变换

自定义函数ice(交互颜色编辑)
g = ice(‘Property Name’, ‘Property Value’, …)
这里写图片描述

g = ice('image', f);
![这里写图片描述](https://img-blog.csdn.net/20170629130101146?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzgzMTEwNDE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
  • 负片
    这里写图片描述

  • 对单色图像进行对比度增强
    这里写图片描述
    这里写图片描述

  • 对彩色图像进行对比度增强
    这里写图片描述
    这里写图片描述
  • 伪彩色映射

    主要应用于人眼可视化,因为人眼可以分辨上百万种颜色,但只能分辨为数不多的灰度级。
    这里写图片描述
    这里写图片描述
    这里写图片描述

  • 彩色平衡

    独立地映射一幅图像思维彩色分量,一个重要应用是照片增强。
    这里写图片描述
    这里写图片描述
    减少了深红色对图像颜色的影响,校正平衡。

  • 基于直方图的映射

    直方图均衡是一种灰度级映射处理,它试图产生具有均匀灰度直方图的单色图像。

>> f = imread('D:\picture\MATLAB\冈萨雷斯数字图像处理MATLAB版图片\dipum_images_ch06\laboratory.tif');
>> g = ice('image', f, 'space', 'HSI'); 
>> subplot(121), imshow(f), title('原图');
>> subplot(122), imshow(g), title('映射后的结果');

这里写图片描述

彩色图像的空间滤波

彩色图像平滑

使用一个线性空间滤波器来平滑一幅RGB图像fc的步骤:

  • 抽取三幅分量图像
  • 分别对每幅分量图像滤波
  • 重建滤波后的RGB图像

函数fc_filtered = imfilter(fc, w, ‘replicate’)可以实现以上步骤

>> f = imread('D:\picture\MATLAB\flower.png');
>> fR = f(:, :, 1);
>> fR = f(:, :, 2);
>> fB = f(:, :, 3); 
>> subplot(141), imshow(f), title('原图');
>> subplot(142), imshow(fR), title('红分量');
>> subplot(143), imshow(fG), title('绿分量');
>> subplot(144), imshow(fB), title('蓝分量');   

这里写图片描述

>> h = rgb2hsi(f);
>> H = h(:, :, 1);
>> S = h(:, :, 2);
>> I = h(:, :, 3);
>> subplot(131), imshow(H), title('色调分量');
>> subplot(132), imshow(S), title('饱和度分量');
>> subplot(133), imshow(I), title('亮度分量');       

这里写图片描述

>> w = fspecial('average', 25);
>> I_filtered = imfilter(I, w, 'replicate');%仅对亮度分量平滑
>> h = cat(3, H, S, I_filtered);
>> f = hsi2rgb(h);
>> imshow(f)    

这里写图片描述

>> fR_filtered = imfilter(fR, w, 'replicate');
>> fG_filtered = imfilter(fG, w, 'replicate');
>> fB_filtered = imfilter(fB, w, 'replicate');
>> g = cat(3, fR_filtered, fG_filtered, fB_filtered);%分别平滑RGB分量
>> imshow(g)    

这里写图片描述

>> imshow(g)
>> H_filtered = imfilter(H, w, 'replicate');
>> S_filtered = imfilter(S, w, 'replicate');
>> h = cat(3, H_filtered, S_filtered, I_filtered);%分别平滑HSI分量
>> f = hsi2rgb(h);
>> imshow(f)     

这里写图片描述

彩色图像锐化

>> f = imread('D:\picture\MATLAB\flower.png');
>> w = fspecial('average',5);
>> fb = imfilter(f, w, 'replicate');
>> lapmask = [1 1 1; 1 -8 1; 1 1 1]; %拉普拉斯滤波器模板
>> fb = tofloat(fb);
>> fen = fb - imfilter(fb, lapmask, 'replicate');
>> subplot(121), imshow(fb), title('模糊图像')
>> subplot(122), imshow(fen), title('拉普拉斯算子增强')

这里写图片描述

直接在RGB向量空间的处理

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

  • 自定义函数colorgrad:
    语法:[VG, A, PPG] = colorgrad(f, T)
    其中,f是一幅RGB图像,T是区间[0, 1]内的一个可选阀值(默认为0);VG是RGB向量梯度,A是以弧度计的角度图像,PPG是通过对各个彩色平面的二维梯度图像求和形成的梯度图像。
>> f1 = imread('D:\picture\MATLAB\冈萨雷斯数字图像处理MATLAB版图片\dipum_images_ch06\box1.tif');
>> f2 = imread('D:\picture\MATLAB\冈萨雷斯数字图像处理MATLAB版图片\dipum_images_ch06\box2.tif');
>> f3 = imread('D:\picture\MATLAB\冈萨雷斯数字图像处理MATLAB版图片\dipum_images_ch06\box3.tif');
 >> f = cat(3, f1, f2, f3);
>> subplot(221), imshow(f1)
>> subplot(222), imshow(f2)
>> subplot(223), imshow(f3)
>> subplot(224), imshow(f), title('合并后的RGB')    
![这里写图片描述](https://img-blog.csdn.net/20170629201239218?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzgzMTEwNDE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
>> [VG, A, PPG] = colorgrad(f);
>> subplot(121), imshow(VG), title('在RGB向量空间中直接计算的梯度')
>> subplot(122), imshow(PPG), title('分别计算每幅RGB图像的二维梯度并将结果相加得到的合成梯度')   
![这里写图片描述](https://img-blog.csdn.net/20170629201916493?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzgzMTEwNDE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
>> f = imread('D:\picture\MATLAB\flower.png');
>> [VG, A, PPG] = colorgrad(f);
>> imshow(VG)
>> imshow(VG)
>> subplot(141), imshow(f), title('RGB图像')
>> subplot(142), imshow(VG), title('在RGB中计算梯度')
>> subplot(143), imshow(PPG), title('合成梯度')
>> subplot(144), imshow(abs(VG - PPG)), title('绝对差') 
![这里写图片描述](https://img-blog.csdn.net/20170629202840879?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzgzMTEwNDE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

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

  • 自定义函数colorseg实现图像分割

    语法: S = colorseg(method, f, T, parameters)
    其中,method不是’euclidean’就是’mahalanobis’,f是待分割的RGB彩色图像,T是阀值。选择’euclidean’时,输入参数是m(均值),选择’mahalanobis’时,输入参数是m和C(协方差矩阵)。输出S是二值图像。

  • roipoly函数生成一个交互选择的区域二值模板

>> f = imread('D:\picture\MATLAB\冈萨雷斯数字图像处理MATLAB版图片\dipum_images_ch06\MARS.tif');
>> mask = roipoly(f);
>> red = immultiply(mask, f(:, :, 1));
>> green = immultiply(mask, f(:, :, 2));
>> blue = immultiply(mask, f(:, :, 3));
>> g = cat(3, red, green, blue);
>> subplot(121), imshow(f), title('原图')
>> subplot(122), imshow(g), title('切割后的图像')             

这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值