《数字图像处理》上机实验报告4.docx
《《数字图像处理》上机实验报告4.docx》由会员分享,可在线阅读,更多相关《《数字图像处理》上机实验报告4.docx(18页珍藏版)》请在冰豆网上搜索。
《数字图像处理》上机实验报告4
数字图像处理
上机实验报告
实验名称:
彩色图像处理
学期:
2014/2015上学期
班级:
电子1102班
姓名:
陈玮
学号:
3110209424
实验时间:
2014.11.24
实验四彩色图像处理
目的
1.了解彩色图像导入到Matlab中的书籍结构,掌握对R,G,B分量的表示方法;
2.了解彩色图像处理的基本原理和方法;
3.掌握彩色图像与灰度图像质检相互转化的基本原理
2器材
(1)bmp格式灰度图像
(2)matlab软件(3)台式PC
3原理
1彩色图像及其增强方法
(1)图像增强
图像增强就是通过对图像的某些特征,如对比度、轮廓等进行强调,使之更适合于人眼的观察或机器处理的一种技术。
图像增强技术分为两大类,一类是空间域方法,即在图像平面对图像的像素灰度值进行运算处理的方法;另一类是频率域方法,是指在图像的频率域中对图像进行某种处理[1]。
(2)彩色图像与灰度图像区别
彩色图像和灰度图像的根本区别是:
在彩色图像中,每个像素用一个矢量(一般包括三个分量)来表示,即R分量、G分量和B分量。
而灰度图像每一个像素只用一个标量来表示。
这样,处理彩色图像时处理的是矢量,处理灰度图像处理的是标量。
我们也可以把彩色图像中的三个分量分开,分别计算加工再进行结合,这种处理技术称为基于单色的技术。
如果不把这三个分量分开计算,而是根据矢量规范将彩色信息当矢量空间中的彩色矢量来进行加工,这样的技术称为矢量值技术。
2.彩色空间简介
(1)RGB彩色空间简介
一幅RGB图像就是彩色像素的一个
数组,其中每一个彩色像素点都是在特定空间位置的红、绿、蓝三个分量[2]。
由于彩色显示器采用红、绿和蓝来生成目标颜色,所以RGB颜色空间是计算机图形学最通常的选择。
但是,当处理图像时,使用RGB颜色空间并不是很有效。
此外,要在RGB颜色空间中生成任何一种颜色,三个RGB分量都需要占用相同的带宽。
这就使得每个RGB颜色分量需要同样的像素深度和现实分辨率。
(2)HSI彩色空间简介
HIS[3](hue,色度;saturation,饱和度;intensity,亮度)颜色空间将亮度分量与一幅彩色图像中携带的彩色信息分开。
因此,HIS模型对于开发基于彩色描述的图像处理算法是一个理想的工具,使得图像看起来更加自然和直观。
RGB彩色图像是有三幅单色的亮度图像构成的,所以一定可以从一幅RGB图像中提取出图像的亮度信息。
(3)RGB彩色空间到HIS彩色空间的转换
若给出一幅RGB图像,则每一个RGB像素的H、S、I分量分别可由下面的方程得出[2]:
(式2-1)
其中,
(式2-2)
(式2-3)
(式2-4)
(4)HSI彩色空间到RGB彩色空间的转换
对于HSI空间在[0,1]范围内S和I的值,对应的RGB模型中的在[0,1]范围内的R、G、B值可分段地按如下公式计算得出[3]。
当
时:
(式2-5)
(式2-6)
(式2-7)
当
时:
(式2-8)
(式2-9)
(式2-10)
当
时:
(式2-11)
(式2-12)
(式2-13)
3彩色图像增强处理方法
彩色图像的增强一般根据其处理对象的不同可以分为伪彩色增强、真彩色增强和假彩色增强三种。
本文主要讨论伪彩色增强和真彩色增强的实现方法。
伪彩色增强
所谓伪彩色,就是假的颜色,即不是物体本身的颜色,所以这个颜色是人为加到物体上的,换句话说,就是伪彩色增强处理就是给灰度图像或单色图像增加色彩。
此外,根据人眼的生理特性及日常生活体验可知,人眼对灰度差异的识别区分能力很差,一般能够区分的灰度级只有20多个。
但是人眼识别和区分彩色的能力却很大,可以达到灰度分辨能力的百倍以上。
伪彩色就是利用人眼的这个特性,把人眼难以区分的灰度图像以一定的方式映射为彩色图像,以达到人眼对图像的分辨能力。
那么,如果按某种映射方式把灰度图像映射到彩色图像的色彩越丰富,人眼所能提取的信息也就越多,图像增强的效果也就越突出。
伪彩色增强主要有密度分割法、彩色变换法和频率滤波法的伪彩色增强三种方法[4]。
(1)密度分割法
密度分割法是伪彩色图像增强中最简单、最基本的方法。
该算法基本思想是将灰度图像中的任意一点的灰度值看作该点的密度函数,把密度函数分割成几个相互独立的区间,给每个区间分配一种颜色。
接下来具体阐述密度分割法的实现原理。
设一幅灰度图像
可以看成是坐标
的一个密度函数。
把图像的灰度分为若干个等级。
设原黑白图像的灰度范围为
,用
灰度级把该灰度范围分为
段:
给每一段灰度映射一种颜色,映射关系为:
(式2-14)
这里
为输出的伪彩色像;
为灰度在
范围内映射的色彩。
需要说明的是,这
段可以是均匀的,也可以是不均匀的,是可以根据图像的灰度范围以及实际需求,设定每段的长度,以达到细节显示。
经过这种映射处理后,原始黑白图像就成了伪彩色图像。
如下图所示:
图2-1密度分割原理平面图
从上图我们可以看出,密度分割法只是简单地把分割的灰度区域与个彩色进行映射,所以得到的伪彩色图像的颜色受到分割层数的限制。
但是,密度分割法可以根据实际情况,随时改变映射关系,以适合人眼的识别能力。
(2)灰度级-彩色变换法
彩色变换法的基本思想是对图像中每个像素点的灰度值
采用不同的变换函数,并将结果映射为彩色图像的R、G、B分量值,这样就可以得到一幅RGB空间上的彩色图像。
下图给出了变换的过程示意图:
图2-2灰度级-彩色变换法示意图
典型的变换函数如下图所示:
图2-3典型变换函数示意图
由图2-3可计算出红、绿、蓝的变换函数为:
(式2-15)
(3)频域伪彩色处理
在频域伪彩色图像处理中,伪彩色图像的彩色取决于黑白图像的空间频率,也就是说频域伪彩色图像处理是将原始灰度图像中感兴趣的空间频率成分以某种特定的彩色表示。
首先对原始图像进行傅里叶变换,再设计三种不同的滤波器,对原始图像进行滤波,再对三个滤波器的输出进行傅里叶反变换,最后输出频域处理后的伪彩色图像。
本次设计的三个滤波器分别为:
(式2-16)
(式2-17)
4内容
1.彩色图像的数据结构
在彩色图像中,每个像素点用三个字节分别表示R,G,B分量。
当M*N大小的彩色图像导入到Matlab时,将存储在三维的数组(M,N,3)中。
其中(M,N,1)表示(M,N)位置的R变量
其中(M,N,2)表示(M,N)位置的G变量
其中(M,N,3)表示(M,N)位置的B变量
2.打开彩色图像
clear;
P=imread('Miss.bmp');
P_double=double(P);
[mnk]=size(P);
Q=zeros(m,n,3);
Q_double=double(Q);
m
n
k
3.分别观察R,G,B分量图,比较分量图与原彩色图。
4.分别对R,G,B分量进行增强处理(平滑),然后再把处理后的三个分量在合成彩色图像,观测并比较变换结果。
5.把彩色图像的R、G、B分量图转换成H、S、I分量图,对H、S、I分量图分别进行操作,然后转换回R、G、B分量图,记录并对比图像变换。
6伪彩色图像处理
(1)亮度分割
把灰度图像中不同的灰度映射成不同的颜色。
(2)频率滤波
先对图像进行频谱变换,然后分别滤除高、中、低频成分,再分别进行逆变换,
分别把逆变换后的分量作为彩色图像的R、G、B分量。
5实验(设计)步骤
1.查找资料
2.理解算法原理
3.编写程序
4.仿真查错
6设计结果与分析
观察R,G,B分量图
总结分析:
原图像经分解后,总体上R层呈红色,G层呈绿色,B层呈蓝色,细节部分由色调的浓度体现。
R,G,B分量进行平滑处理后合并
总结分析:
可以看到图像经R,G,B分量分别平滑处理后合并变模糊
R,G,B分量图转换为H,S,I分量图
总结分析:
转换后可以很直观的观察图像的色调(H)、饱和度(S、亮度(I)三者的细节情况。
伪彩色亮度分割
总结分析:
可以看到色彩分布较丰富,色彩的过渡也比较柔和,大部分的人物背光面细节及人物的细节可以很好地显现。
伪彩色频域滤波
分析总结:
频域伪彩色增强显示了很多细节,比如头发、衣服及背景的轮廓,都能很好的显示其变化的细节,但是脸部的细节却显示的不是很好,主要是由于脸部的颜色变化非常小,所以无法显示。
该法根据不同的需求可以设计不同的滤波器,所以运用其他的滤波器又可以得到不同的效果,这使得滤波器的设计尤为重要。
7参考文献
《数字图像处理(第三版)》电子工业出版社阮秋琦阮宇智等译
8实验代码
R,G,B分量图
clear;%清除记录
RGB=imread('Miss.bmp');%读取图像
RGB(:
:
1)=uint8(double(RGB(:
:
1))*1.2);%改变原始图像红色分量
RGB(:
:
2)=uint8(double(RGB(:
:
2))*1.5);%改变原始图像绿色分量
RGB(:
:
3)=uint8(double(RGB(:
:
3))*1.3);%改变原始图像蓝色分量
subplot(2,2,1),imshow(RGB);title('原始图像')%显示原始图像,标题为原始图像
subplot(2,2,2),imshow(RGB(:
:
1));title('原始图像红色分量')%显示改变后原始图像红色分量,子标题为原始图像红色分量'
subplot(2,2,3),imshow(RGB(:
:
2));title('原始图像绿色分量')%显示改变后原始图像绿色分量,子标题为原始图像绿色分量'
subplot(2,2,4),imshow(RGB(:
:
3));title('原始图像蓝色分量')%显示改变后原始图像蓝色分量,子标题为原始图像蓝色分量'
I=imread('Miss.bmp');%读入彩色图像
J1(:
:
1)=I(:
:
1);J1(:
:
2)=0;J1(:
:
3)=0;%提取I中的红色
J2(:
:
2)=I(:
:
2);J2(:
:
1)=0;J2(:
:
3)=0;%提取I中的绿色
J3(:
:
3)=I(:
:
3);J3(:
:
1:
2)=0;%提取I中的蓝色
subplot(221);imshow(I);title('原图像');%显示原图
subplot(222);imshow(J1);title('红色');%显示提取的红色部分
subplot(223);imshow(J2);title('绿色');%显示提取的绿色部分
subplot(224);imshow(J3);title('蓝色');%显示提取的蓝色部分
R,G,B分量进行平滑处理后合并
clearall;
A=imread('Miss.bmp');%¶ÁȡͼÏñ
figure
(1);imshow(A);title('ÔͼÏñ');
R=A(:
:
1);%ÌáȡͼÏñµÄR²ã
G=A(:
:
2);%ÌáȡͼÏñµÄG²ã
B=A(:
:
3);%ÌáȡͼÏñµÄB²ã
w=fspecial('average');
fR_filtered=imfilter(R,w);%¶ÔR²ã×öƽ»¬´¦Àí
fG_filtered=imfilter(G,w);%¶ÔG²ã×öƽ»¬´¦Àí
fB_filtered=imfilter(B,w);%¶ÔB²ã×öƽ»¬´¦Àí
rgb_filter=cat(3,fR_filtered,fG_filtered,fB_filtered);%ºÏ²¢R¡¢G¡¢B·ÖÁ¿
figure
(2);imshow(rgb_filter);title('ƽ»¬ºóµÄͼÏñ');
R,G,B分量图转换为H,S,I分量图
clearall;
A=imread('Miss.bmp');%读取图像
R=A(:
:
1);G=A(:
:
2);B=A(:
:
3);
r=double(R);g=double(G);b=double(B);
min=min(min(r,g),b);
I=(r+g+b)/3;%计算I分量
S=1-min./I;%计算S分量
m=sqrt((r-g).^2+(r-b).*(g-b));
w=acos(0.5*((r-g)+(r-b))./(m+eps));
ifG>B
H=w;
else
H=2*pi-w;
end;
H=H/(2*pi);%计算H分量
subplot(231);imshow(R);xlabel('R分量');%分别显示彩色图象的R,G,B分量
subplot(232);imshow(G);xlabel('G分量');
subplot(233);imshow(B);xlabel('B分量');
subplot(234);imshow(H);xlabel('H分量');%分别显示1幅彩色图象的H,S,I分量
subplot(235);imshow(S);xlabel('S分量');
subplot(236);imshow(I,[]);xlabel('I分量');
伪彩色亮度分割
I=imread('Miss.bmp');
I=double(I);
[M,N]=size(I);
L=256;
fori=1:
M
forj=1:
N
ifI(i,j)R(i,j)=0;
G(i,j)=4*I(i,j);
B(i,j)=L;
elseifI(i,j)<=L/2
R(i,j)=0;
G(i,j)=L;
B(i,j)=-4*I(i,j)+2*L;
elseifI(i,j)<=3*L/4
R(i,j)=4*I(i,j)-2*L;
G(i,j)=L;
B(i,j)=0;
else
R(i,j)=L;
G(i,j)=-4*I(i,j)+4*L;
B(i,j)=0;
end
end
end
end
end
fori=1:
M
forj=1:
N
G2C(i,j,1)=R(i,j);
G2C(i,j,2)=G(i,j);
G2C(i,j,3)=B(i,j);
end
end
G2C=G2C/256;
figure;
imshow(G2C);
伪彩色频域滤波
I=imread('Miss.bmp’);
I=rgb2gray(I);
[M,N]=size(I)
F=fft2(I);
fftshift(F);
foru=1:
M
forv=1:
N
D(u,v)=sqrt(u^2+v^2);
redh(u,v)=1/(sqrt
(2)*(D(u,v)/100)^2);
greenh(u,v)=1/(sqrt
(2)*(200/D(u,v))^2);
blued(u,v)=sqrt((u-10)^2+(v-10)^2);
blueh(u,v)=1-1/(1+blued(u,v)*100/((blued(u,v))^2-150^2)^2);
end
end
red=redh.*F;
redcolor=ifft2(red);
green=greenh.*F;
greencolor=ifft2(green);
blue=blueh.*F;
bluecolor=ifft2(blue);
redcolor=real(redcolor)/256;
greencolor=real(greencolor)/256;
bluecolor=real(bluecolor)/256;
fori=1:
M
forj=1:
N
out(i,j,1)=redcolor(i,j);
out(i,j,2)=greencolor(i,j);
out(i,j,3)=bluecolor(i,j);
end
end
out=abs(out);
figure;imshow(out);