数字图像处理 实验八:彩色图像处理

  • 实验内容

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代码放在一起运行

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sftmnggsujgff.shhgft

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值