数字图像处理matlab上机实验 (八)

    技术2024-10-03  48

    前言:作为一名图像算法攻城狮,那是在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、每个实验均按统一格式编写实验报告。 实验报告内容包括:实验要求,实验项目,典型程序流程图,程序清单,数据结果和分析讨论。

    Processed: 0.013, SQL: 9