数字图像处理实验报告书八彩色图像处理.docx
《数字图像处理实验报告书八彩色图像处理.docx》由会员分享,可在线阅读,更多相关《数字图像处理实验报告书八彩色图像处理.docx(17页珍藏版)》请在冰豆网上搜索。
数字图像处理实验报告书八彩色图像处理
电子信息学院
实验报告书
课程名:
《数字图像处理》
题目:
实验八彩色图像处理实验
实验类别:
【设计】
班级:
BX0901
学号:
111103020103
姓名:
窦中锋
1、实验目的
(1)了解彩色空间的基本概念及转换原理;
(2)熟悉MATLAB中彩色图像的表示方法;
(3)使用MATLAB函数实现各类彩色空间和图像类型的转换;
(4)实验MATLAB对彩色图像进行分割和边缘检测的处理。
2、实验原理
1.彩色图像介绍和处理原理
彩色图像的数据不仅包含亮度信息,还包含颜色信息。
彩色的表示方法是多样化的,最常见的是三基色模型,例如RGB(Red/Green/Blue,红绿蓝)三基色模型,利用RGB三基色可以混合成任意颜色。
因此,RGB模型在各种彩色成像设备和彩色显示设备中使用,常规的彩色图像也都是用RGB三基色来表示的,每个像素包括RGB三基色数据,每个基色用1个字节(8位二进制位)表示,则每个像素的数据为3个字节(即24位二进制位),这就是人们常说的24位真彩色
(1)彩色图像的转换
转换色彩是一件极为耗时的工作,为了解决这项困难,彩色图像分析过程一般采用高分辨率色彩查询表机制;查询表是一组数值数组,包含了输进输出之间的对应关系。
只要预先计算查询表,就能检查套用转换至每个图像上的情况。
查询表的运算值可用于将图像从一个色彩系统转换为另一个色彩系统,此外,也能进行设定以套用使用者定义的转换内容,例如Gamma补偿与色彩平衡校正。
另外,部分操纵会“对照”查询查询表的内容,避免储存已转换图像的需求。
例如,在图像还是以RGB格式进行储存的情况下,可以变更图像ISH色彩空间的H组件。
(2)彩色图像的色彩分割
传统的彩色图像处理方法多种多样,包括Bayer制式至色彩空间转换或色彩平衡校正外,彩色图像的色彩分析功能,采用“阈值”对彩色图像进行分割是常用的方法。
“阈值”是进行分割的基本机制,可根据对比从图像背景中区分出对象。
在彩色图像的部分,还可自由指定特定对象的数值范围,使用者可选择每个组件的数值范围,例如仅根据色相选择“橄榄绿”像素,加上对饱和度及彩度宽松的辨识力,以消除表面的光线效果。
另一项区分场景中不同对象的更有效方法,就是考虑一组特定颜色,并指定每个最接近这些颜色的像素。
彩色图像分割功能让您可以指定每个像素的“层级”(整数指数值),以分解不同区域里的彩色图像。
2.使用MATLAB对彩色图像的处理过程
(1)使用RGB、索引和灰度级图像间转换的函数
f=imread('lenargb.tif');
imshow(f)
title('原图像');
[X1,map1]=rgb2ind(f,8,'nodither');
figure
imshow(X1,map1);%无抖动处理的颜色数减少到8的图像
title('无抖动处理的颜色数减少到8的图像');
[X2,map2]=rgb2ind(f,8,'dither');
figure
imshow(X2,map2)%有抖动处理的颜色数减少到8的图像
title('有抖动处理的颜色数减少到8的图像');
g=rgb2gray(f);
g1=dither(g);
figure,imshow(g);
title('使用函数rgb2gray得到的原图像的灰度级图像');
figure,imshow(g1);
title('经抖动处理后的灰度图像(这是一幅二值图像)');
H=fspecial('disk',10);%均值滤波PSF
blurredfilter=imfilter(I,H);
figure,imshow(blurredfilter);
title('FilterBlurredimage')
(2)彩色图像的锐化
clearall
clc
fc=imread(''lenargb.tif');
imshow(fc)
lapmask=[111;1-81;111];
fen=imsubtract(fc,imfilter(fc,lapmask,'replicate'));
figure,imshow(fen)
(3)RGB彩色图像的分割
function[C,m]=covmatrix(X)
[K,n]=size(X);
X=double(X);
ifn==1
C=0;m=x;
else
m=sum(X,1)/K;
X=X-m(ones(K,1),:
);
C=(X'*X)/(K-1);
m=m';
end
functionI=colorseg(varargin)
f=varargin{2};
if(ndims(f)~=3)|(size(f,3)~=3)
error('InputimagemustbeRGB!
');
end
M=size(f,1);N=size(f,2);
[f,L]=imstack2vectors(f);
f=double(f);
I=zeros(M*N,1);
T=varargin{3};
m=varargin{4};
m=m(:
)';%makesurethatmisarowvetor
iflength(varargin)==4
method='euclidean';
elseiflength(varargin)==5
method='mahalanobis';
else
error('wrongnumberofinputs!
');
end
switchmethod
case'euclidean'
p=length(f);
D=sqrt(sum(abs(f-repmat(m,p,1)).^2,2));
case'mahalanobis'
C=varargin{5};
D=mahalanobis(f,C,m);
otherwise
error('Unknownsegmentationmethod!
');
end
J=find(D<=T);
I(J)=1;
I=reshape(I,M,N);
function[X,R]=imstack2vectors(S,MASK)
[M,N,n]=size(S);
ifnargin==1
MASK=true(M,N);
else
MASK=MASK~=0;
end
[I,J]=find(MASK);
R=[I,J];
Q=M*N;
X=reshape(S,Q,n);
MASK=reshape(MASK,Q,1);
X=X(MASK,:
);
%%%%%%RGB图像分割主程序
clearall
clc
f=imread('lenargb.tif');
mask=roipoly(f);
figure,imshow(mask)%mask是一幅2值图像(大小与f相同)
red=immultiply(mask,f(:
:
1));
figure,imshow(red)
title('red分量');
green=immultiply(mask,f(:
:
2));
figure,imshow(green)
title('green分量');
blue=immultiply(mask,f(:
:
3));
figure,imshow(blue)
title('blue分量');
g=cat(3,red,green,blue);
figure,imshow(g)
%计算ROI中的点的均值向量和协方差矩阵
[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);
%colorseg('m',f,T,m)T值可取的值为25的倍数时得到的不同结果
3、实验步骤
(1)打开计算机,启动MATLAB程序,设置MATLAB的程序组中的当前活动文件夹;
(2)找到待处理的图像文件;
(3)根据实验内容和实验要求进行实验;
(4)记录和整理实验报告。
4、实验内容
(1)编写MATLAB程序,生成一张128*128的RGB图像,要求图像左上角为红色,左下角为蓝色,右上角为绿色,右下角为黑色。
如例9.1所示。
(2)编写MATLAB程序,将一彩色图像从RGB空间转换为HIS空间,并观察其效果。
如例9.2所示。
(3)编写MATLAB程序,将一彩色图像在RGB空间进行彩色分割,并观察其效果。
如例9.11所示。
(4)编写MATLAB程序,将一彩色图像在向量空间进行边缘检测,并观察其效果。
如例9.12所示。
5、实验程序与结果(结果可以抓图粘贴)
(1)编写MATLAB程序,生成一张128*128的RGB图像,要求图像左上角为红色,左下角为蓝色,右上角为绿色,右下角为黑色。
如例9.1所示。
程序:
rgb_R=zeros(128,128);
rgb_R(1:
64,1:
64)=1;
rgb_G=zeros(128,128);
rgb_G(1:
64,65:
128)=1;
rgb_B=zeros(128,128);
rgb_B(65:
128,1:
64)=1;
rgb=cat(3,rgb_R,rgb_G,rgb_B);
figure,imshow(rgb),title('RGB彩色图像');
截图:
(2)编写MATLAB程序,将一彩色图像从RGB空间转换为HIS空间,并观察其效果。
如例9.2所示。
程序:
rgb=imread('LenaRGB.bmp');
figure,imshow(rgb);
rgb1=im2double(rgb);
r=rgb1(:
:
1);
g=rgb1(:
:
2);
b=rgb1(:
:
3);
I=(r+g+b)/3
figure,imshow(I);
tmp1=min(min(r,g),b);
tmp2=r+g+b;
tmp2(tmp2==0)=eps;
S=1-3.*tmp1./tmp2;
figure,imshow(S);
tmp1=0.5*((r-g)+(r-b));
tmp2=sqrt((r-g).^2+(r-b).*(g-b));
theta=acos(tmp1./(tmp2+eps));
H=theta;
H(b>g)=2*pi-H(b>g);
H=H/(2*pi);
H(S==0)=0;
figure,imshow(H);
截图:
(3)编写MATLAB程序,将一彩色图像在RGB空间进行彩色分割,并观察其效果。
如例9.11所示。
程序:
rgb=imread('LenaRGB.bmp');
figure,imshow(rgb);
rgb1=im2double(rgb);
r=rgb1(:
:
1);
figure,imshow(r);
g=rgb1(:
:
2);
figure,imshow(g);
b=rgb1(:
:
3);
figure,imshow(b);
r1=r;
r1_u=mean(mean(r1(:
)));
[m,n]=size(r1);
sd1=0.0;
fori=1:
m
forj=1:
n
sd1=sd1+(r1(i,j)-r1_u)*(r1(i,j)-r1_u);
end
end
r1_d=sqrt(sd1/(m*n));
r2=zeros(size(rgb1,1),size(rgb1,2));
ind=find((r>r1_u-1.25*r1_d)&(rr2(ind)=1;
figure,imshow(r2);
截图:
(4)编写MATLAB程序,将一彩色图像在向量空间进行边缘检测,并观察其效果。
如例9.12所示。
程序:
rgb=imread('LenaRGB.bmp');
imshow(rgb);
sob=fspecial('sobel');
Rx=imfilter(double(rgb(:
:
1)),sob,'replicate');
Ry=imfilter(double(rgb(:
:
1)),sob','replicate');
Gx=imfilter(double(rgb(:
:
2)),sob,'replicate');
Gy=imfilter(double(rgb(:
:
2)),sob','replicate');
Bx=imfilter(double(rgb(:
:
3)),sob,'replicate');
By=imfilter(double(rgb(:
:
3)),sob','replicate');
r_gradiant=mat2gray(max(Rx,Ry));
figure,imshow(r_gradiant);
g_gradiant=mat2gray(max(Gx,Gy));
figure,imshow(g_gradiant);
b_gradiant=mat2gray(max(Bx,By));
figure,imshow(b_gradiant);
rgb_gradiant=rgb2gray(cat(3,r_gradiant,g_gradiant,b_gradiant));
gxx=Rx.^2+Gx.^2+Bx.^2;
gyy=Ry.^2+Gy.^2+By.^2;
gxy=Rx.*Ry+Gx.*Gy+Bx.*By;
theta=0.5*(atan(2*gxy./(gxx-gyy+eps)));
G1=0.5*((gxx+gyy)+(gxx-gyy).*cos(2*theta)+2*gxy.*sin(2*theta));
theta=theta+pi/2;
G2=0.5*((gxx+gyy)+(gxx-gyy).*cos(2*theta)+2*gxy.*sin(2*theta));
G1=G1.^0.5;
G2=G2.^0.5;
rgb_vectorgradiant=mat2gray(max(G1,G2));
diff=abs(rgb_vectorgradiant-rgb_gradiant);
figure,imshow(diff);
截图:
6、实验体会
通过本次实验,了解彩色空间的基本概念及转换原理,并且熟悉了MATLAB中彩色图像的表示方法,使用MATLAB函数实现各类彩色空间和图像类型的转换。