数字图像处理实验报告书八彩色图像处理Word格式文档下载.docx
《数字图像处理实验报告书八彩色图像处理Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数字图像处理实验报告书八彩色图像处理Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。
只要预先计算查询表,就能检查套用转换至每个图像上的情况。
查询表的运算值可用于将图像从一个色彩系统转换为另一个色彩系统,此外,也能进行设定以套用使用者定义的转换内容,例如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的图像
无抖动处理的颜色数减少到8的图像'
[X2,map2]=rgb2ind(f,8,'
dither'
imshow(X2,map2)%有抖动处理的颜色数减少到8的图像
有抖动处理的颜色数减少到8的图像'
g=rgb2gray(f);
g1=dither(g);
figure,imshow(g);
使用函数rgb2gray得到的原图像的灰度级图像'
figure,imshow(g1);
经抖动处理后的灰度图像(这是一幅二值图像)'
H=fspecial('
disk'
10);
%均值滤波PSF
blurredfilter=imfilter(I,H);
figure,imshow(blurredfilter);
FilterBlurredimage'
)
(2)彩色图像的锐化
clearall
clc
fc=imread('
'
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!
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
mahalanobis'
wrongnumberofinputs!
switchmethod
case'
p=length(f);
D=sqrt(sum(abs(f-repmat(m,p,1)).^2,2));
C=varargin{5};
D=mahalanobis(f,C,m);
otherwise
Unknownsegmentationmethod!
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);
MASK=MASK~=0;
[I,J]=find(MASK);
R=[I,J];
Q=M*N;
X=reshape(S,Q,n);
MASK=reshape(MASK,Q,1);
X=X(MASK,:
%%%%%%RGB图像分割主程序
mask=roipoly(f);
figure,imshow(mask)%mask是一幅2值图像(大小与f相同)
red=immultiply(mask,f(:
:
1));
figure,imshow(red)
red分量'
green=immultiply(mask,f(:
2));
figure,imshow(green)
green分量'
blue=immultiply(mask,f(:
3));
figure,imshow(blue)
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('
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、实验程序与结果(结果可以抓图粘贴)
程序:
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:
rgb=cat(3,rgb_R,rgb_G,rgb_B);
figure,imshow(rgb),title('
RGB彩色图像'
截图:
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);
figure,imshow(r);
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
r1_d=sqrt(sd1/(m*n));
r2=zeros(size(rgb1,1),size(rgb1,2));
ind=find((r>
r1_u-1.25*r1_d)&
(r<
r1_u+1.25*r1_d));
r2(ind)=1;
figure,imshow(r2);
imshow(rgb);
sob=fspecial('
sobel'
Rx=imfilter(double(rgb(:
1)),sob,'
Ry=imfilter(double(rgb(:
1)),sob'
'
Gx=imfilter(double(rgb(:
2)),sob,'
Gy=imfilter(double(rgb(:
2)),sob'
Bx=imfilter(double(rgb(:
3)),sob,'
By=imfilter(double(rgb(:
3)),sob'
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函数实现各类彩色空间和图像类型的转换。