二○一八~二○一九学年第一学期信息科学与工程学院课程设计报告书课程名称:数字图像处理班级:学号:姓名:指导教师:二○一八年十二月一、课程设计目的:1.掌握读、写、显示图像的基本方法。2.掌握图像直方图的概念、计算方法以及直方图归一化、均衡化方法。3.掌握图像灰度变换的基本方法,理解灰度变换对图像外观的改善效果。二、课程设计内容及要求:1.读入一幅图像,判断其是否为灰度图像,如果不是灰度图像,将其转化为灰度图像。2.完成灰度图像的直方图计算、直方图归一化、直方图均衡化等操作。3.完成灰度图像的灰度变换操作,如线性变换、伽马变换、阈值变换(二值化)等,分别使用不同参数观察灰度变换效果(对灰度直方图的影响)。三、详细设计步骤:1、所使用的图像文件都保存在Matlab安装目\toolbox\images\imdemos子目录下。2、图像的读、写、显示操作。运用Matlab图像处理工具箱中的imread函数分别读入灰度图像pout.tif、二值图像blobs.png和RGB图像peppers.png,观察相应的图像矩阵,并运用imshow函数显示相应图像。3、对一个RGB彩色图像peppers.png,分别抽取其R、G、B三个分量层,并显示各层图像。1、以灰度图像pout.tif为例,运用灰度变换法实现图像增强。2、运用Matlab编程实现灰度直方图的统计以及直方图均衡化处理过程:(1)计算并绘制原始图像的灰度直方图;(2)根据离散累计分布函数,对原始灰度直方图进行均衡化处理,绘制均衡化后的灰度直方图;(3)生成均衡化处理后的新图像,显示并保存。(4)比较原始图像和新图像的对比度。(1)利用Matlab函数IMNOISE(),在原图上分别叠加高斯噪声和椒盐噪声(2)实现均值滤波和中值滤波的功能,去除噪声;(3)调整窗口大小,采用对比均值滤波中值滤波的性能;1、以灰度图像rice.png为例,实现Roberts算子、Sobel算子、Prewitt算子对其进行边缘检测,并实现根据梯度生成5种不同的增强图像。2、若向原始图像rice.png中加入高斯噪声,利用(1)中的函数,对噪声图像分别运用Roberts算子、Sobel算子、Prewitt算子进行边缘检测,观察检测结果,试比较3种边缘检测算子的抗噪声干扰能力。四、程序代码及图形:实验一实验内容1i=imread('C:\ProgramFiles\MATLAB\R2014a\toolbox\images\imdata\pout.tif');imshow(i);a=imread('C:\ProgramFiles\MATLAB\R2014a\toolbox\images\imdata\pears.png');k=imread('C:\ProgramFiles\MATLAB\R2014a\toolbox\images\imdata\blobs.png');r=a(:,:,1);g=a(:,:,2);b=a(:,:,3);figure;imshow(a);figure;imshow(r);figure;imshow(g);figure;imshow(b);figure;imshow(k);*******************************************************************************实验内容2灰度图均衡化I=imread('C:\ProgramFiles\MATLAB\R2014a\toolbox\images\imdata\pout.tif');J=im2double(I);[R,C]=size(I);cnt=zeros(1,256);fori=1:Rforj=1:Ccnt(1,I(i,j)+1)=cnt(1,I(i,j)+1)+1;endendf=zeros(1,256);f=double(f);cnt=double(cnt);fori=1:256f(1,i)=cnt(1,i)/(R*C);endfori=2:256f(1,i)=f(1,i-1)+f(1,i);endfori=1:256f(1,i)=f(1,i)*255;endI=double(I);fori=1:Rforj=1:CI(i,j)=f(1,I(i,j)+1);endendI=uint8(I);figure(1)subplot(121)imhist(J);title('灰度直方图');subplot(122)imhist(I);title('均衡化后的灰度直方图');figure(2)subplot(121)imshow(J);title('原图');subplot(122)imshow(I);title('直方图均衡化');02004006008001000120014001600灰度直方图00.5102004006008001000120014001600均衡化后的灰度直方图0100200原图直方图均衡化原图050010001500灰度直方图00.51直方图均衡化050010001500均衡化后的灰度直方图0100200subplot(2,2,1)imshow(J);title('Ôͼ');subplot(2,2,2)imhist(J);title('»Ò¶ÈÖ±·½Í¼');subplot(2,2,3)imshow(I);title('Ö±·½Í¼¾ùºâ»¯');subplot(2,2,4)imhist(I);title('¾ùºâ»¯ºóµÄ»Ò¶ÈÖ±·½Í¼');线性线性变换原图最后确认的代码:I=imread('C:\ProgramFiles\MATLAB\R2014a\toolbox\images\imdata\pout.tif');J=I;L_linear=J*0.8+50;K=double(J);%L_unlinear=20*log(K+1)[R,C]=size(I);cnt=zeros(1,256);fori=1:Rforj=1:Ccnt(1,I(i,j)+1)=cnt(1,I(i,j)+1)+1;endendf=zeros(1,256);f=double(f);cnt=double(cnt);fori=1:256f(1,i)=cnt(1,i)/(R*C);endfori=2:256f(1,i)=f(1,i-1)+f(1,i);endfori=1:256f(1,i)=f(1,i)*255;endI=double(I);fori=1:Rforj=1:CI(i,j)=f(1,I(i,j)+1);endendI=uint8(I);figure(1)subplot(2,2,1)imshow(J);title('原图');subplot(2,2,2)imhist(J);title('灰度直方图');subplot(2,2,3)imshow(I);title('直方图均衡化');subplot(2,2,4)imhist(I);title('均衡化后的直方图');figure(2)subplot(1,2,1)imshow(L_linear);title('线性变换');subplot(1,2,2)imshow(J);title('原图');实验二M=imread('Winter.jpg');figure,imshow(M);title('original');gray=rgb2gray(M);figure,imshow(gray);title('gray');P1=imnoise(gray,'gaussian',0.02);figure,imshow(P1);title('gaussiannoise');P2=imnoise(gray,'salt&pepper',0.02);figure,imshow(P2);title('salt&peppernoise');g=medfilt2(P1);figure,imshow(g);title('medfiltergaussian');h=medfilt2(P2);figure,imshow(h);title('medfiltersalt&peppernoise');a=[111111111];l=1/9*a;k=conv2(double(P1),double(l));figure,imshow(k,[]);title('arithmeticfiltergaussian');d=conv2(double(P2),double(l));figure,imshow(d,[]);title('arithmeticfiltersalt&peppernoise');sigma=8;window=double(uint8(3*sigma)*2+1);H=fspecial('gaussian',window,sigma);img_gauss=imfilter(P1,H,'replicate');figure,imshow(img_gauss);title('gaussianfiltinggaussnoise');img_salt=imfilter(P2,H,'replicate');figure,imshow(img_salt);title('gaussianfiltingsaltpeppernoise');实验三clc;clearvariables;img=imread('rice.png');figure('Name','进行五种边缘检测');subplot(241);imshow(img);title('原图');BW1=edge(img,'Roberts',0.16);subplot(242);imshow(BW1);title('Robert算子')BW2=edge(img,'Sobel',0.16);subplot(243);imshow(BW2);title('Sobel算子')BW3=edge(img,'Prewitt',0.06);subplot(244);imshow(BW3);title('Prewitt算子');img2=imnoise(img,'Gaussian',0,0.01);subplot(245);imshow(img2);title('高斯噪声');BW11=edge(img2,'Roberts',0.16);subplot(246);imshow(BW11);title('高斯噪声下Robert算子')BW22=edge(img2,'Sobel',0.16);subplot(247);imshow(BW22);title('高斯噪声下Sobel算子')BW33=edge(img2,'Prewitt',0.06);subplot(248);imshow(BW33);title('高斯噪声下Prewitt算子');五、结果分析与体会:此次实验是第一次进行“数字图像处理”的实验,由于较长一段时间没有使用MATLAB,导致在实验开始时操作比较生疏,再加上对数字图像处理的相关代码不够熟练,整个实验做得比较慢。总体而言,本次的实验内容比较简单,通过一系列基本的命令实现了由彩色图像、转换为黑白图像、灰度调整、阀值变换、直方图均衡和统计直方图等一系列功能,命令中并无太多的参数修改,结果也直观可见,通过这些实验内容,让我初步对一些图像的处理效果有了一定的认识。对于边缘检测和利用Sobel算子、Laplacian算子进行图像锐化处理内容,因为MATLAB提供了相应的函数,所以完成这些实验内容比较轻松。由于MATLAB没有提供Robert算子的图像锐化函数,必须自行编写相应的滤波器数值进行滤波。经过在网上大量查阅相关资料后,最终设计出了相应滤波器,虽然滤波结果不太理想,算法中也可能存在一些问题,但在整个查阅资料和编写代码的过程中让我学到了不少相关知识,也复习、加深了我在课堂上所学的内容。