8. 彩色图像处理

这一部分,将要讨论利用图像处理工具箱进行彩色图像处理的基本原理

8.1 MATLAB中彩色图像的表示方法

1)彩色图像可以表示为索引图像和RGB图像来处理。一幅RGB图像就是一个MxNx3的一个数组,其中每个彩色像素都对应着RGB空间的红绿蓝分量。
2)如果fR、fG、fB分别代表三种RGB分量图像。一幅RGB图像就是利用cat(级联)操作符将这些分量组合成彩色图像。
在这里插入图片描述

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

3)如果所有分量都是相同的,那么这幅图像就是灰度图。令rgb_image大鸟一幅RGB图像,下面命令可以提取出三幅分量图像:

fr= rgbimage(:,:,1);
fg= rgbimage(:,:,2);
fb= rgbimage(:,:,3);

4) 颜色立方体的可视化:

rgbcube(vx,vy,vz)

在这里插入图片描述
5)示例:

rgb_image = imread('GoldRushYukon_ZH-CN6132080652_1920x1080.jpg');
subplot(2,2,1);imshow(rgb_image);
fr = rgb_image(:,:,1);
fg = rgb_image(:,:,2);
fb = rgb_image(:,:,3);
subplot(2,2,2);imshow(fr);
subplot(2,2,3);imshow(fg);
subplot(2,2,4);imshow(fb);

在这里插入图片描述

8.2 颜色空间及转换

有很多可以表示彩色图像的颜色空间,他们的转换关系如下。

8.2.1 NTSC颜色空间

1)RGB >> NTSC
变换关系如下:
在这里插入图片描述
NTSC制式的优点是亮度信息和彩色信息是分离的:Y表示亮度信息,I表示色调,Q表示饱和度。对应的函数为:

yiq_image = rgb2ntsc(rgb_image);

2)NTSC >> RGB
变换关系如下:
在这里插入图片描述
函数如下:

rgb_image = ntsc2rgb(ntsc_image);

8.2.2 YCbCr颜色空间

Y表示亮度信息,Cb和Cr表示彩色信息。
变换关系如下:
在这里插入图片描述
转换函数如下:

ycbcr_image = rgb2ycbcr(rgb_image);
rgb_image = ycbcr2rgb(ycbcr_image);

8.2.3 HSV颜色空间

HSV(色调、饱和度、数值)是调色板的彩色系统之一。
在这里插入图片描述
其与RGB图像转换函数如下:

hsv_image = rgb2hsv(rgb_image);
rgb_image = hsv2rgb(hsv_image);

8.2.4 CMY颜色空间

变换关系如下:
在这里插入图片描述
函数如下:

cmy_image = imcomplent(rgb_image);
rgb_image = imcomplent(cmy_image);

8.2.5 HSI颜色空间

H表示色度、S表示饱和度、I表示亮度,HSI图像的I分量就可表示灰度。
1)RGB >> HSI:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2)HSI >> RGB:
在不同的区域有不同的转换方法。

8.3 彩色图像处理基础

1)令c为彩色空间的任意向量,则图像上任意一点x、y可表示为:
在这里插入图片描述
在这里插入图片描述
2)处理彩色图像可以分为:
(1)多通道分别处理
(2)每个通道单独处理
(3)将灰度图像进行伪彩色处理
(4)插值映射函数(将三个通道分别处理或者同时处理)

在这里插入图片描述
3)线性插值函数: z=interp1q(x,y,xi)

z=interp1q([0 0.6 1],[0 0.41],linspace(0,1,10));
plot(linspace(0,1,10),z);
grid;

在这里插入图片描述
4)样条差值函数 :z=spline(x,y,xi)

z=spline([0 0.6 1],[0 0.4 1],linspace(0,1,10));
plot(linspace(0,1,10),z);
grid

在这里插入图片描述

8.4 颜色变换

交互式颜色编辑系统 ICE (interactive color editing):

g=ice('Property Name','property value',)

Property Name为句柄,有三种情况如下表:
在这里插入图片描述
每个Property Name对应一个property value。

1)示例1:颜色反转

f=imread('Fig0303(a)(breast).tif');
g=ice('image',f);
subplot(1,2,1);imshow(f);
subplot(1,2,2);imshow(g);

在这里插入图片描述
2)示例2:图像增强

%处理灰度图像 图像增强
f3 = imread('Fig0309(a)(washed_out_aerial_image).tif');
g3=ice('image',f3);

subplot(1,2,1);imshow(f3);
subplot(1,2,2);imshow(g3);

在这里插入图片描述
3)示例3:彩色图像对比度增强

f = imread('Fig0635(top_ left_flower).tif');
g = ice('image',f);
subplot(1,2,1);imshow(f);
subplot(1,2,2);imshow(g);

在这里插入图片描述
4)示例4:伪彩色图像处理

f = imread('Fig0621(a)(weld-original).tif');
g = ice('image',f);
subplot(1,2,1);imshow(f);
subplot(1,2,2);imshow(g);

在这里插入图片描述

5)示例5:色彩平衡

f = imread('Fig0636(woman_baby_original).tif');
g = ice('image',f,'space','cmy');
subplot(1,2,1);imshow(f);
subplot(1,2,2);imshow(g);

在这里插入图片描述
6)示例6:彩色图像直方图均衡

f = imread('Fig0637(a)(caster_stand_original).tif');
g = ice('image',f, 'space','ycbcr');
subplot(1,2,1);imshow(f);
subplot(1,2,2);imshow(g);

在这里插入图片描述

8.5 彩色图像的空域滤波

8.5.1 彩色图像平滑

1)RGB 颜色向量邻域内的均值可通过下式进行计算:
在这里插入图片描述
2)使用线性空域滤波平滑一幅RGB彩色图像需要如下几个步骤:
(1) 提取各颜色通道

fR=fc(:,:,1);

(2)对图像的各个组成部分分别滤波

fR_filtered=imfilter(fR,w);

(3)重建

fc_filtered=cat(3,fR_filtered,..);

3)示例:彩色图像平滑

f = imread('Fig0651(a)(flower_no_compression).tif');
fR = f(:,:,1);fG = f(:,:,2);fB = f(:,:,3);
w = fspecial('average',25);
fR_fitered = imfilter(fR,w,'replicate');
fG_fitered = imfilter(fG,w,'replicate');
fB_fitered = imfilter(fB,w,'replicate');

f_filtered = cat(3,fR_fitered,fG_fitered,fB_fitered);
subplot(1,2,1);imshow(f);
subplot(1,2,2);imshow(f_filtered);

在这里插入图片描述

8.5.2 彩色图像锐化

1)彩色图像锐化使用拉普拉斯算子:
在这里插入图片描述
2)示例:

f = imread('Fig0635(middle_row_left_chalk ).tif');
lapmask=[1 1 1;1 -8 1;1 1 1];
fen=imsubtract(f,0.5*imfilter(f,lapmask,'replicate'));
subplot(1,2,1);imshow(f);
subplot(1,2,2);imshow(fen);

在这里插入图片描述

8.6 RGB向量空间中的图像处理技术

8.6.1 使用梯度的彩色边缘检测

1)二维图像的梯度可以表示为:
在这里插入图片描述
幅值:
在这里插入图片描述
幅角:
在这里插入图片描述
但是在彩色图像中的三维空间就需要用到梯度的向量表示,r,g,b是沿着R, G , B 轴的单位向量,令:
在这里插入图片描述
定义数量:
在这里插入图片描述
角度即为c(x,y)最大改变率的方向:
在这里插入图片描述
对应的变化率的值为:
在这里插入图片描述
2)使用IPT工具箱计算 RGB 图像的颜色梯度:

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

f为彩色图像,T为0-1的阈值,VG是RGB向量梯度F(x,y),A是theta(x,y),PPG是单独彩色图像梯度值之和。

示例:两种计算梯度的方法结果不同

f = imread('Fig0635(top_ left_flower).tif');
[VG,A,PPG]=colorgrad(f);
subplot(2,2,1);imshow(f);
subplot(2,2,2);imshow(VG);
subplot(2,2,3);imshow(PPG);
subplot(2,2,4);imshow(10*imsubtract(VG,PPG));

在这里插入图片描述

8.6.2 RGB 向量空间中的图像分割

比如我们想要分割某一种颜色,用下面的公式计算欧式距离:
在这里插入图片描述
其中z代表某张图片,m代表想要分割出的颜色RGB向量。

还可以使用下面的码是距离来定义:
在这里插入图片描述

使用IPT进行图像分割函数:

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

method代表使用哪种距离,不是‘euclidean’就是‘mahalanobis’,f代表待分隔图像,T是阈值,若选择‘euclidean’,参数输入m,若选择‘mahalanobis’,参数输入m和C。

示例:


f=imread('Fig0642(a)(jupiter_moon_original).tif');
mask=roipoly(f);
imshow(mask);
red=immultiply(mask,f(:,:,1));
green=immultiply(mask,f(:,:,2));
blue=immultiply(mask,f(:,:,3));
g=cat(3,red,green,blue);
subplot(2,2,1);imshow(g);

[M,N,K]=size(g);
I=reshape(g,M*N,3);
idx=find(mask);

I=double(I(idx,1:3));
[C,m]=covmatrix(I);
d=diag(C);
sd=sqrt(d)'
e25 = colorseg('euclidean',f,25,m);
e50 = colorseg('euclidean',f,50,m);
e75 = colorseg('euclidean',f,75,m);
subplot(2,2,2);imshow(e25);title('T = 25')
subplot(2,2,3);imshow(m50);title('T = 50')
subplot(2,2,4);imshow(m75);title('T = 75')

m25 = colorseg('mahalanobis',f,25,m,C);
m50 = colorseg('mahalanobis',f,50,m,C);
m75 = colorseg('mahalanobis',f,75,m,C);

figure;
subplot(2,2,1);imshow(g);
subplot(2,2,2);imshow(m25);title('T = 25');
subplot(2,2,3);imshow(m50);title('T = 50');
subplot(2,2,4);imshow(m75);title('T = 75');

使用欧氏距离:
在这里插入图片描述
使用马氏距离:

在这里插入图片描述

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值