彩色图像处理部分程序.docx
《彩色图像处理部分程序.docx》由会员分享,可在线阅读,更多相关《彩色图像处理部分程序.docx(8页珍藏版)》请在冰点文库上搜索。
彩色图像处理部分程序
例9.1
clear
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
例9.2
rgb=imread('i_flower673.jpg');
rgb1=im2double(rgb);
r=rgb1(:
:
1);
g=rgb1(:
:
2);
b=rgb1(:
:
3);
I=(r+g+b)/3;
tmp1=min(min(r,g),b);
tmp2=r+g+b;
tmp2(tmp2==0)=eps;
S=1-3.*tmp1./tmp2;
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;
例9.3
I=imread('i_peppers_gray.bmp');
GS8=grayslice(I,8);
GS64=grayslice(I,64);
subplot(1,3,1),imshow(I),title
subplot(1,3,2),subimage(GSB,hot(8)),title
subplot(1,3,3),subimage(GS64,hot(64),title
例6.4
I=imread('i_boat.bmp');
I=double(I);
[m,n]=size(I);
L=256;
fori=1:
m
ifj=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;
例9.5
rgb=imread('i_fly18.jpg');
rgb1=im2double(rgb);
r=rgb1(:
:
1);
g=rgb1(:
:
2);
b=rgb1
I1=(r+g+b)/3;
tmp1=min(min(r,g),b);
tmp2=r+g+b;
tmp2(tmp2==0)=eps;
S=1-3.*tmp1./tmp2;
tmp1=0.5*((r-g)+(r-b));
tmp2=sqrt((r-q).^2+(r-b).*(g-b));
theta=acos(tmp1./(tmp2+eps));
H1=theta
H1(b>g)=2*pi-H1(b>g);
H1(S==0)=0;
I=histeq(I1);
hsi=cat(3,H1,S,I);
H=hsi(:
:
1)*2*pi;
S=hsi(:
:
2);
I=hsi(:
:
3);
R=zeros(size(hsi,1),size(hsi,2));
G=zeros(size(hsi,1),size(hsi,2));
B=zeros(size(hsi,1),size(hsi,2));
ind=find((H>=0)&(H<2*pi/3));
B(ind)=I(ind).*(1.0-S(ind));
R(ind)=I(ind).*(1.0+S(ind).*cos(H(ind))./cos(pi/3.0-H(ind)));
G(ind)=1.0-(R(ind)+B(ind));
ind=find((H>2*pi/3)&(H<4*pi/3));
H(ind)=H(ind)-pi*2/3;
R(ind)=I(ind).*(1.0-S(ind).*cos(H(ind))./cos(pi/3.0-H(ind)));
G(ind)=1.0-(R(ind)+B(ind));
ind=find((H>2*pi/3)&(H<4*pi/3));
H(ind)=H(ind)-pi*2/3;
R(ind)=I(ind).*(1.0=S(ind));
G(ind)=I(ind).*(1.0+S(ind).*cos(H(ind)0./cos(pi/3.0-H(id)));
B(ind)=1.0-(R(ind)+G(ind));
ind=find(H>=4*pi/3)&(H<2*pi);
H(ind)=H(ind)-pi*4/3;
G(ind)=I(ind).*(1.0-S(ind));
B(ind=I(ind.*(1.0+S(ind).8cos(H(ind)).(H(ind))./cos(pi/3.0-H(ind)));
R(ind)=1.0-(G(ind)+B(ind));
RGB=cat(3,R,G,B);
'
例9.6
rgb=imread('flower608.jpg');
fR=rgb(;,:
1);
fG=rgb(:
:
2);
fB=rgb(;,:
3);
w=fspecial('average');
fR_filtered=imfilter(fR,w);
fG-filtered=imfilter(fG,w);
fB-filtered=imfilter(fB,w);
rgb_filtered=cat(3,fR_filtered,fG_filtered,fB_filtered);
例9.8
rgb=imread('flower608.jpg');
fR=rgb(:
:
1);
fG=rgb(:
:
2);
fB=rgb(:
:
3);
labMatrix=[111;1-81;111];
fR_tmp=imfilter(fR,lapMatrix,'replicate');
fG_tmp=imfilter(fG,lapMatrix,'replicate');
fB_tmp=imfilter(fB,lapMatrix,'replicate');
rgb_tmp=cat(3,fR_tmp,fB_tmp);
rgb_sharped=imsubtract(rgb_tmp);
例9.10
S1=(S>0.3*(max(max(S(:
)))));
F=S1.*H;
例9.11
rgb=imread('flower608.jpg');
rgb1=im2double(rgb);
r=rgb1(:
:
1);
g=rgb1(:
:
2);
b=rgb1(:
:
3);
r1=r(129:
256,86:
170);
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_d=zeros(size(rgb1,1),size(rgb1,2));
ind=find((r>r1_u-1.25*r1_d)&(rr2(ind)=1;
例9.12
rgb=imread('lena.jpg');
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=imfliter(double(rgb(:
:
3)),sob,'replicate');
By=imfliter(double(rgb(:
:
3)),sob','replicate');
r_gradiant=mat2gray(max(Rx,Ry));
g_gradiant=mat2gray(max(Gx,Gy));
b_grandiant=mat2gray(max(Bx,By));
rgb_grandiant=rgb2gray(cat(3,r_grantiant,g_grantiant,b_grandiant));
gxx=Rx.^2+Gx.^2+Bx.^2;
gyy=Ry.^2+By.^2;+Gx.^2;
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=0.5*((gxx+gyy)+(gxx-gyy).*cos(2*theta)+2*gxy.*sin(2*theta));
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);