前言:作为一名图像算法攻城狮,那是在2014年大三下学期,一本深绿色的《数字图像处理》(冈萨雷斯的英文版)出现在自己课桌前。偶然间打开的一扇意外之门,就这样结下了一段不解之缘,那些日子不断上网搜代码的自己,那个刚上机不到二十分钟就把作业提交的自己,早已随往日的岁月飘扬而去。三年的烟酒僧,两年的酱油工,而今只觉脑子越来越不够用,这次决心回炉重造,希望能够通过固本培基,打开思路,话不多说,开始上课!
----2020-7-7
实验 8 彩色图像滤波
一、实验目的
通过本实验使学生掌握使用 MATLAB 进行彩色图像处理的方法,加深对彩色空间和彩色图像的理解。
二、实验原理
本实验是基于数字图像处理课程中的彩色图像处理理论来设计的。
本实验的准备知识:第六章彩色图像处理中的彩色空间,彩色图像处理方法。
重点如下:
1 、RGB 图像与 HSI 图像之间的相互转换
2 、彩色图像消噪
添加噪声命令:imnoise
中值滤波技术,均值滤波技术
三、实验内容
(一) HSI 空间分量
读取lena_color.tif图像,进行下列操作:
1、 编写函数,将其从RGB空间转换到HIS空间,分别显示其H分量、S分量和I分量。
a=imread('F:\Images\lena_color.tif');
A=im2double(a);
[m,n,q]=size(A);
R=A(:,:,1);
G=A(:,:,2);
B=A(:,:,3);
H=zeros(m,n);
for i1=1:m
for i2=1:n
num=0.5*(R(i1,i2)-G(i1,i2)+R(i1,i2)-B(i1,i2));
den=sqrt((R(i1,i2)-G(i1,i2))^2+(R(i1,i2)-B(i1,i2))*(G(i1,i2)-B(i1,i2)));
theta=acos(num/den)*180/pi;
if(B(i1,i2)<=G(i1,i2))
H(i1,i2)=theta;
else
H(i1,i2)=360-theta;
end
min1=min(R(i1,i2),G(i1,i2));
min1=min(B(i1,i2),min1);
S(i1,i2)=1-3/(R(i1,i2)+G(i1,i2)+B(i1,i2))*min1;
end
end
I=(R+G+B)/3;
subplot(221),imshow(a),title('原图像');
subplot(222),imshow(H),title('色度图H ');
subplot(223),imshow(S),title('饱和度图S');
subplot(224),imshow(I),title('强度图I');
2、 编写函数,将图像从HIS空间转换到RGB空间,分别显示R分量,G分量和B分量。
a=imread('F:\Images\lena_color.tif');
A=rgb2hsv(a);
[m,n,q]=size(A);
R=A(:,:,1);
G=A(:,:,2);
B=A(:,:,3);
H=zeros(m,n);
for i1=1:m
for i2=1:n
num=0.5*(R(i1,i2)-G(i1,i2)+R(i1,i2)-B(i1,i2));
den=sqrt((R(i1,i2)-G(i1,i2))^2+(R(i1,i2)-B(i1,i2))*(G(i1,i2)-B(i1,i2)));
theta=acos(num/den)*180/pi;
if(B(i1,i2)<=G(i1,i2))
H(i1,i2)=theta;
else
H(i1,i2)=360-theta;
end
min1=min(R(i1,i2),G(i1,i2));
min1=min(B(i1,i2),min1);
S(i1,i2)=1-3/(R(i1,i2)+G(i1,i2)+B(i1,i2))*min1;
end
end
I=(R+G+B)/3;
for i1=1:m
for i2=1:n
value1=I(i1,i2)*(1+S(i1,i2)*cos(H(i1,i2))/cos(pi/3-H(i1,i2)/180*pi));
value2=I(i1,i2)*(1-S(i1,i2));
switch (floor(H(i1,i2)/120))
case 0
im2(i1,i2,1)=value1;
im2(i1,i2,2)=3*I(i1,i2)-R(i1,i2)-B(i1,i2);
im2(i1,i2,3)=value2;
case 1
H(i1,i2)=H(i1,i2)-120;
im2(i1,i2,1)=value2;
im2(i1,i2,2)=value1;
im2(i1,i2,3)=3*I(i1,i2)-R(i1,i2)-G(i1,i2);
case 2
H(i1,i2)=H(i1,i2)-240;
im2(i1,i2,1)=3*I(i1,i2)-G(i1,i2)-B(i1,i2);
im2(i1,i2,2)=value2;
im2(i1,i2,3)=value1;
end
end
end
subplot(221),imshow(A),title('hsi图');
subplot(222),imshow(R),title('R');
subplot(223),imshow(G),title('G');
subplot(224),imshow(B),title('B');
(二 ) RGB 空间的彩色平滑
读取lena_color.tif图像,进行下列操作:
(1) 采用7×7均值滤波器对彩色图像的所有分量进行相同平滑,同屏显示原图像和平滑后图像,对结果进行说明;
lena_color=imread('F:\Images\lena_color.tif');
lena_red=lena_color(:,:,1);
lena_green=lena_color(:,:,2);
lena_blue=lena_color(:,:,3);
H=1/49*ones(7,7);
lena_red1=imfilter(lena_red,H);
lena_green1=imfilter(lena_green,H);
lena_blue1=imfilter(lena_blue,H); %===组合图像========================
lena(:,:,1)=lena_red1;
lena(:,:,2)=lena_green1;
lena(:,:,3)=lena_blue1;
figure(1);
subplot(1,2,1);imshow(lena_color);title('原图');
subplot(1,2,2);imshow(lena);title('7*7均值滤波');
(2) 采用7×7均值滤波器对彩色图像的红分量进行平滑,其它分量不变,同屏显示原图像和平滑后图像,对结果进行说明;
lena_color=imread('F:\Images\lena_color.tif');
lena_red=lena_color(:,:,1);
H=1/49*ones(7,7);
lena_red1=imfilter(lena_red,H);
lena(:,:,1)=lena_red1;
lena(:,:,2)=lena_color(:,:,2);
lena(:,:,3)=lena_color(:,:,3);
figure(1);
subplot(1,2,1);imshow(lena_color);title('origin');
subplot(1,2,2);imshow(lena);title('7*7red');
(3) 采用直方图均衡方法,对彩色图像的三个分量进行增强,同屏显示原图像和增强后图像,对结果进行说明;
lena_color=imread('F:\Images\lena_color.tif');
lena_red=lena_color(:,:,1);
lena_green=lena_color(:,:,2);
lena_blue=lena_color(:,:,3);
lena_red1=histeq(lena_red);
lena_green1=histeq(lena_green);
lena_blue1=histeq(lena_blue);
lena(:,:,1)=lena_red1;
lena(:,:,2)=lena_green1;
lena(:,:,3)=lena_blue1;
figure(1);
subplot(1,2,1);imshow(lena_color);title('原图');
subplot(1,2,2);imshow(lena);title('增强后图像');
(4) 将图像添加上椒盐噪声, A_noised=imnoise(A, ‘salt & pepper’, 0.02),选择合适的滤波器进行滤波,观察滤波效果;
lena_color=imread('F:\Images\lena_color.tif');
lena_color_noi=imnoise(lena_color,'salt & pepper',0.02);
lena_red=lena_color_noi(:,:,1);
lena_green=lena_color_noi(:,:,2);
lena_blue=lena_color_noi(:,:,3);
lena_red1=medfilt2(lena_red);
lena_green1=medfilt2(lena_green);
lena_blue1=medfilt2(lena_blue);
lena(:,:,1)=lena_red1;
lena(:,:,2)=lena_green1;
lena(:,:,3)=lena_blue1;
figure(1);
subplot(1,3,1);imshow(lena_color);title('原图');
subplot(1,3,2);imshow(lena_color_noi);title('加椒盐噪声图');
subplot(1,3,3);imshow(lena);title('中值滤波图');
(5) 将图像添加上高斯噪声, A_noised=imnoise(A, ‘gauss’, 0.02),选择合适的滤波器进行滤波,观察滤波效果;
lena_color=imread('F:\Images\lena_color.tif');
lena_color_noi=imnoise(lena_color,'gauss',0.02);
lena_red=lena_color_noi(:,:,1);
lena_green=lena_color_noi(:,:,2);
lena_blue=lena_color_noi(:,:,3);
H=1/49*ones(7,7);
lena_red1=imfilter(lena_red,H);
lena_green1=imfilter(lena_green,H);
lena_blue1=imfilter(lena_blue,H);
lena(:,:,1)=lena_red1;
lena(:,:,2)=lena_green1;
lena(:,:,3)=lena_blue1;
figure(1);
subplot(1,3,1);imshow(lena_color);title('原图');
subplot(1,3,2);imshow(lena_color_noi);title('加高斯噪声图');
subplot(1,3,3);imshow(lena);title('均值滤波图');
思考:彩色图像的滤波应该注意什么?
四、实验方法与步骤
1、顺序完成上述实验内容
2、按照实验内容要求,分析编程,将程序和实验结果整理成word文档,分析结果,编写实验报告。
五、实验报告要求
1、本实验由学生单人独立完成。
2、每个实验均按统一格式编写实验报告。
实验报告内容包括:实验要求,实验项目,典型程序流程图,程序清单,数据结果和分析讨论。
本系列文章列表如下:
数字图像处理matlab上机实验 (一)
数字图像处理matlab上机实验 (二)
数字图像处理matlab上机实验 (三)
数字图像处理matlab上机实验 (四)
数字图像处理matlab上机实验 (五)
数字图像处理matlab上机实验 (六)
数字图像处理matlab上机实验 (七)
数字图像处理matlab上机实验 (八)
数字图像处理matlab上机实验 (九)