第六章(1至4节) 彩色图像处理

本文介绍了MATLAB中处理彩色图像的基本方法,包括RGB图像的表示、提取与合成,索引图像的概念及其处理函数dither与grayslice的使用。此外还讲解了彩色空间的转换方法及彩色图像的空间滤波和平滑技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这周,我主要复习了第三章,然后第六章的话,看到了第四节。(学到的东西不是很多吧,主要以浏览和实验为主)

1. MATLAB中彩色图像的表示方法

1.1RGB图像

一幅RGB图像就是彩色像素的一个M*N*3数组,其中每一个像素点都是在特定空间位置的彩色图像相对应的红,绿,蓝三个分量。RGB也可以看成是一个由三幅灰度图像形成的“堆”,当将其送到彩色监视器的红绿蓝输入端时,便在屏幕上产生了一幅彩色图像。

提取RGB分量

t=imread('tem.jpg');
r=t(:,:,1);
g=t(:,:,2);
b=t(:,:,3);

比如,我显示r分量(其它分量也行)上的灰度图。

这里写图片描述

合成RGB图像

可以利用cat操作符来完成合成。

rgb_image=cat(3,r,g,b);
imshow(rgb_image);

合成彩图之后的效果如下:

这里写图片描述

在操作中,图像按顺序放置。通常来说,cat(dim,A1,A2,…)沿着dim指定的方向级联数组。例如,若dim=1,则数组垂直放置,若dim=2,则数组水平放置,若dim=3,则它们会在第三个方向放置。

如图:

这里写图片描述

1.2 索引图像

基本概念:索引图像有两个分量,即整数的数据矩阵X和彩色映射矩阵map。矩阵map是一个大小为m*3且范围由【0 1】之间的浮点值构成的double类数组。map的长度m同它所定义的颜色数目相等。map的每一行都定义单色的红,绿,蓝三个分量。索引图像将像素的亮度值“直接映射”到彩色值。每个像素的颜色由对应的整数矩阵X的值作为指向map的一个指针决定。
如图更能清晰地表达索引图像是什么。

这里写图片描述

函数dither

该函数可用于灰度图像和彩色图像。“抖动”是在印刷业和出版页中常用的一种处理。在灰度图像的情况下,“抖动”调试图像用在白色背景上产生黑点的二值图像来得到灰色调。点的大小变化多样,从明亮区域的小点到黑暗区域的逐渐增大的较大点。

代码实例如下:

b=imread('test4.jpg');
whitebg('g');
bw=dither(b);

说明一点,函数whitebg可以改变显示的图像的背景,‘g’表示绿色,关于这个参数有很多种形式,不一一赘述了。那接来下看一下效果吧。
如图所示

这里写图片描述

其中dither函数返回的图像是个二值图像(抖动后的结果)。

函数grayslice

代码实例

X=grayslice(h,256);

该函数通过赋给h一个阈值来生成一幅索引图像,阈值为
1/256 2/256 3/256….. 255/256

其他一些函数如下表,用法都比较简单。

这里写图片描述

具体对这些函数的应用

函数rgb2ind对减少一幅RGB图像中的色彩数很有用。
采用非抖动的方式。
具体代码如下:

[X1,map]=rgb2ind(f,8,'nodither');
figure,imshow(X1,map);

执行效果如下:

这里写图片描述

采用抖动的效果如下。(不要忘了把’nodither’改成‘dither’)

这里写图片描述

两幅图像均只有8种颜色,与24比特RGB图像f可能有超过1600万种颜色相比,8种颜色几乎可以忽略不计。其中抖动处理后的图像显示出了更好的色调,而且轮廓错误明显减少,这是抖动引入的“随机性”的结果。
那么把抖动处理用在灰度图像,会是什么效果呢?

代码如下:

g=rgb2gray(f);
g1=dither(g);
subplot(1,2,1),imshow(g);
subplot(1,2,2),imshow(g1);

效果如下:

这里写图片描述

我们可以发现用灰度图像来观察抖动效果会更明显一些。其中g是一个灰度图像,g1是一个二值图像,由于dither的返回值。而且g1同样显示出了数据的明显减少。

2. 转换至其他彩色空间

2.1 NTSC彩色空间

在NTSC格式中制式中,图像是由三部分组成的,亮度(Y),色调(I),饱和度(Q)。亮度分量描述灰度信息,其他两个分量电视信号的彩色信息。Y,I,Q这几个分量都是利用如下变换从一幅图像的RGB分量中得到的:

这里写图片描述

我们可以看到等式的右边,是两个矩阵相乘的形式,在只包含常数的矩阵中,第一行各元素之和为1,而下两行的和为0。这和预想的一样,因为在一幅灰度图像中,所有的RGB分量都相等。因此,I(色调)和Q(饱和度)分量必然为0。

函数rgb2ntsc

代码实例:

b=imread('tem.jpg');
yig_image=rgb2ntsc(b);
y=yig_image(:,:,1);
I=yig_image(:,:,2);
Q=yig_image(:,:,3);

这里写图片描述

其中输入图像的类型为uint8,输出类型为double类型,后三行就是利用变换后的图像,提取亮度,色调,饱和度。

2.2 YCbCr彩色空间

在这种格式中,亮度信息用单个分量Y来表示,彩色信息用两个色差分量Cb和Cr来存储。分量Cb是蓝色分量和一个参考值的差。其中将RGB转换成YCbCr所用的函数为

b=imread('美食.jpg');
h=rgb2ycbcr(b);
subplot(2,2,2),imshow(h);
title('YCbCr彩色空间变换');

代码效果:

这里写图片描述

2.3HSV彩色空间

该颜色系统比RGB系统更接近于人们的经验和对彩色的感知。
将RGB转换为HSV的MATLAB函数是rgb2hsv。

代码实例:

h=rgb2hsv(b);
subplot(2,2,2),imshow(h);
title('Hsv彩色空间变换');

代码效果:

这里写图片描述

3.彩色图像处理基础

3.1彩色变换

函数interp1q

代码实例:

z=interp1q([0 25]',[0 25]',[0:25]');

这个函数是为了线性插值,它返回一个列向量,该向量包括在点xi([0:25]’的每个元素)处使用一维函数的线性插值的值。列向量[0 25]’和[0 25]’指定控制点的水平和垂直坐标。x的元素必须单调增长。z的长度等于最后一个参数的长度。产生一个有着26个元素的一一映射,已连接控制点(0,0)和(25,25)。

4.彩色图像的空间滤波

4.1彩色图像平滑

正如第三章学的,用于图像平滑的IPT线性空间滤波器是由函数fspecial产生的。概念上,使用线性空间滤波器平滑RGB彩色图像的步骤如下:

1.提取三幅分量图像。
2.分别对每幅分量图像滤波。
3.重建滤波后的图像。

但是实际操作的时候可以不用这3步都去做,因为IPT的imfilter函数可以直接对RGB图像变换。
代码实例:

h=rgb2hsi(b);
H=b(:,:,1);
S=b(:,:,2);
I=b(:,:,3);
w=fspecial('average',25);
filter=imfilter(I,w,'replicate');
h=cat(3,H,S,filter);
f=hsi2rgb(im2double(h));
f=min(f,1);
figure,imshow(f);
subplot(2,2,1),imshow(b);
title('原图');
subplot(2,2,2),imshow(f);
title('经过滤波器变换后的图像');

执行效果:

这里写图片描述

变换后的图像明显不是很清晰了,这是由于“平均滤波器”较大,产生了较大的模糊。一般来说,当 掩膜的尺寸减小时,对RGB分量图像进行滤波和对同一幅HSI亮度分量进行滤波时,得到的差别也就减少了。



图像简单去雾

这周的话,我第六章目前看到了这个地方。然后记得上周,老师和我们讨论的时候,提到了图像去雾问题,相信很多同学应该早就做出来了,我也尝试了一下,主要应用了均衡化函数histeq,使图像的直方图从集中于某个颜色的状态转化成均匀分布状态。

代码如下:

function In=removeFog(img)
%这个函数是通过全局平衡直方图对图像去雾处理
%拆分三原色
r=img(:,:,1);
g=img(:,:,2);
b=img(:,:,3);
%对每个分量进行均衡化
R=histeq(r);
G=histeq(g);
B=histeq(b);
%再把新的RGB分量合成一下
In=cat(3,R,G,B);
%以上就是简单地对一幅图像进行去雾,下面是比较与显示
figure
subplot(2,2,1),imshow(img);
title('原图');
subplot(2,2,2),imshow(In);
title('经过去雾处理后的图像');
t1=rgb2gray(img);
t2=rgb2gray(In);
subplot(2,2,3),imhist(t1);
subplot(2,2,4),imhist(t2);
end

效果如下:

这里写图片描述

目前,我在学习限制对比度的自适应直方图均衡。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值