- 实验内容
(1) 任意选取一副彩色图像,对RGB三色的分量图像分别显示。
(2) 伪彩色图像增强处理:选择灰度图像i_boat_gray.bmp,采用如下图所示的传递函数实现灰色-彩色图像的变换处理,得到彩色图像。
(3) 任意选择彩色图像,显示其R,G,B分量图像,并使用5*5均值滤波器分别对彩色图像的RGB分量进行平滑滤波,显示R,G,B分量平滑滤波图像。叠加所有的彩色分量图像,完成平滑后的全彩色图像。比较原彩色图像和平滑后的彩色图像。
(4) 将(3) 的彩色图像,显示其HSI图像,并对强度I分量进行均值滤波平滑,再转换为RGB图像进行显示,与(3)中的平滑后的彩色图像进行比较并相减,用图像显示两种结果的差别。
- 源程序和结果
(1)任意选取一副彩色图像,对RGB三色的分量图像分别显示。
clc;clear;
rgb_image=imread('13.bmp');
fR=rgb_image(:,:,1);
imwrite(fR,'v1_red.bmp');
fG=rgb_image(:,:,2);
imwrite(fR,'v1_green.bmp');
fB=rgb_image(:,:,3);
imwrite(fR,'v1_blue.bmp');
figure(1);
subplot(1,3,1),imshow(fR)
title('原图像的红色分量')
subplot(1,3,2),imshow(fG)
title('原图像的绿色分量')
subplot(1,3,3),imshow(fB)
title('原图像的蓝色分量')
(2)伪彩色图像增强处理:选择灰度图像i_boat_gray.bmp,采用如下图所示的传递函数实现灰色-彩色图像的变换处理,得到彩色图像。
clc;clear;close
I=imread('i_boat_gray.bmp');
figure(2);
subplot(121),imshow(I);title('原图像');
I=rgb2gray(I);
I=double(I);
[M,N]=size(I);
L=256;
for i=1:M
for j=1:N
if I(i,j)<L/4
R(i,j)=0;
G(i,j)=4*I(i,j);
B(i,j)=L;
else if I(i,j)<=L/2;
R(i,j)=0;
G(i,j)=L;
B(i,j)=-4*I(i,j)+2*L;
else if I(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
for i=1:M
for j=1:N
OUT(i,j,1)=R(i,j);
OUT(i,j,2)=G(i,j);
OUT(i,j,3)=B(i,j);
end
end
OUT=OUT/256;
subplot(1,2,2)
imshow(OUT);
title('伪彩色图像');
(3) 任意选择彩色图像,显示其R,G,B分量图像,并使用5*5均值滤波器分别对彩色图像的RGB分量进行平滑滤波,显示R,G,B分量平滑滤波图像。叠加所有的彩色分量图像,完成平滑后的全彩色图像。比较原彩色图像和平滑后的彩色图像。
clc;clear;
I=imread('i_building.jpg');
figure(3)
subplot(1,2,1)
imshow(I);title('原 图')
I=double(I);
fR=I(:,:,1);
fG=I(:,:,2);
fB=I(:,:,3);
m=fspecial('average',[5,5]); %5*5 的滤波模板
J1=imfilter(fR,m);
J2=imfilter(fG,m);
J3=imfilter(fB,m);
[M, N]=size(J1);
figure (4)
subplot(2,3,1);imshow(uint8(fR)); title('原图像的红色分量')
subplot(2,3,2);imshow(uint8(fG)); title('原图像的绿色分量')
subplot(2,3,3);imshow(uint8(fB)); title('原图像的蓝色分量')
subplot(2,3,4);imshow(uint8(J1));title('红色分量滤波后')
subplot(2,3,5);imshow(uint8(J2));title('绿色分量滤波后')
subplot(2,3,6);imshow(uint8(J3)); title('蓝色分量滤波后')
for i=1:M
for j=1:N
OUT(i,j,1)=J1(i,j);
OUT(i,j,2)=J2(i,j);
OUT(i,j,3)=J3(i,j);
end
end
OUT=OUT/256;
figure (3)
subplot(1,2,2)
imshow(OUT);
title('平滑后的彩色图像');
(4) 将(3) 的彩色图像,显示其HSI图像,并对强度I分量进行均值滤波平滑,再转换为RGB图像进行显示,与(3)中的平滑后的彩色图像进行比较并相减,用图像显示两种结果的差别。
%要求(4)
%抽取rgb图像分量
I = im2double(I);
I_R = I(:,:,1);
I_G = I(:,:,2);
I_B = I(:,:,3);
% 进行转换
temp1 = 0.5 * ((I_R - I_G) + (I_R - I_B));
temp2 = sqrt((I_R - I_G).^2 + (I_R - I_B).*(I_G-I_B));
theta = acos(temp1./(temp2 + eps)); % acos()为arccos函数的实现,给除数加一个很小的数eps。是防止除数为0
H = theta;
H(I_B > I_G) = 2*pi - H(I_B > I_G);
H = H/(2*pi);
temp3 = min(min(I_R,I_G),I_B); % min()只支持两个数的比较
temp4 = I_R + I_G + I_B;
if(temp4 == 0)
temp4 = eps; % 防止除数为零
end
S = 1 - 3.* (temp3./ temp4);
I3 = (I_R + I_G + I_B)./ 3;
hsi = cat(3,H,S,I3);
figure(4)
subplot(1,4,1); imshow(I2); title('要求(3)的图像');
subplot(1,4,2); imshow(hsi); title('要求(3)的hsi图像');
% hsi空间对I分量滤波
hsi_I = hsi(:,:,3)*255; %滤波前要乘255扩展灰度级,滤波完成后再除255
temp = filter2(fspecial('average',5),hsi_I)/255;
hsi(:,:,3) = temp;
hsi = im2double(hsi);
[r,c,k] = size(hsi);
RGB = zeros(r,c,k);
for i = 1 : r
for j = 1 : c
H = hsi(i,j,1)*2*pi;
S = hsi(i,j,2);
I = hsi(i,j,3);
if ( H>=0 && H<2/3*pi)
expression = S*cos( H )/(cos( pi/3-H ) + eps);
RGB(i,j,1) = I * ( 1+expression );
RGB(i,j,3) = I * (1-S);
RGB(i,j,2) = 3*I - ( RGB(i,j,1)+RGB(i,j,3) );
elseif ( H>=2/3*pi && H<4/3*pi)
H = H-2*pi/3;
RGB(i,j,1) = I * (1-S);
expression = S*cos( H )/(cos( pi/3-H ) + eps);
RGB(i,j,2) = I * ( 1+ expression );
RGB(i,j,3) = 3*I - ( RGB(i,j,1)+RGB(i,j,2) );
elseif (H>=4/3*pi && H<=2*pi)
H = H-4*pi/3;
RGB(i,j,2) = I * (1-S);
expression = S*cos( H )/(cos( pi/3-H ) + eps);
RGB(i,j,3) = I * ( 1+ expression );
RGB(i,j,1) = 3*I - ( RGB(i,j,2)+RGB(i,j,3) );
end
end
end
RGB = RGB * 255;
I4 = RGB - I2;
RGB = uint8(RGB);
subplot(1,4,3); imshow(RGB); title('hsi图像滤波后的rgb图像');
subplot(1,4,4); imshow(I4); title('两者相减的图像');
3,4代码放在一起运行