数字图像处理实验指导书
电气信息综合实验中心
试验一MA TLAB程序实用及数字图像信号的基本运算
一、实验目的:
1、进一步熟悉MATLAB的指令。
2、熟悉使用MATLAB进行数字图像的读入、读出和显示。
3、熟悉掌握数字图像的基于灰度变换的空域处理方法。
二、实验设备:
计算机、MATLAB6.5软件。
三、实验说明:
1、本实验在MATLAB上调试运行,学生应对MATLAB的相关指令、函数等有一定的了解。
2、实验的结果应与课堂上的相关内容印证,加深对理论算法的理解。
四、实验内容及步骤:
1、内容包括:计算出一幅灰度图像的直方图、对灰度图像进行简单的灰度线形变换、看其直方图的对应变化和图像对比度的变化、图像二值化处理。
2、实验步骤:打开MATLAB6.5,参照给定的参考程序完成实验。
参考程序:
(一)直方图
灰度变换是图像增强的一种重要手段,使图像对比度扩展,图像更加清晰,特征更加明显。灰度级的直方图给出了一幅图像概貌的描述,通过修改灰度直方图来得到图像增强。
1、灰度直方图
(1)计算出一幅灰度图像的直方图
clear
close all
I=imread('004.bmp');
imhist(I)
title('实验一(1)直方图');
(2)对灰度图像进行简单的灰度线形变换,
figure
subplot(2,2,1)
imshow(I);
title('试验2-灰度线性变换');
subplot(2,2,2)
histeq(I);
(3)看其直方图的对应变化和图像对比度的变化。
原图像f(m,n) 的灰度范围[a,b] 线形变换为图像g(m,n),灰度范围[a’,b’]
公式:g(m,n)=a’+(b’-a’)* f(m,n) /(b-a)
figure
subplot(2,2,1)
imshow(I)
J=imadjust(I,[0.3,0.7],[0,1],1);
title(' 实验一(3)用g(m,n)=a’+(b’-a’)* f(m,n) /(b-a)进行变换');
subplot(2,2,2)
imshow(J)
subplot(2,2,3)
imshow(I)
J=imadjust(I,[0.5 0.8],[0,1],1);
subplot(2,2,4)
imshow(J)
(4) 图像二值化(选取一个域值,(5) 将图像变为黑白图像) figure
subplot(2,2,1)
imshow(I)
J=find(I<150);
I(J)=0;
J=find(I>=150);
I(J)=255;
title(' 实验一(4)图像二值化( 域值为150 )'); subplot(2,2,2)
imshow(I)
clc;
I=imread('14499.jpg');
bw=im2bw(I,0.5);%选取阈值为0.5
figure;
imshow(bw) %显示二值图象
实验二图像滤波
一、实验目的:
1、进一步加深对滤波器、数字滤波的理解。
2、熟悉使用MATLAB中频域变换函数、工具箱中的滤波函数。
3、自己设计函数,达到要求的滤波效果,以提高滤波器的设计能力。
二、实验设备:
计算机、MATLAB6.5软件。
三、实验说明:
1、本实验在MATLAB上调试运行,学生应对MATLAB的相关指令、函数等有一定的了解。
2、实验的结果应与课堂上的相关内容印证,加深对理论算法的理解。
3、自己设计试验的结果和处理方法。
四、实验内容及步骤:
1、内容包括:利用MATLAB图象处理工具箱提供的函数实现数字图像中加入各种噪声的方法。利用MA TLAB图象处理工具箱提供的函数实现数字图像的高通、低通滤波、中值滤波、均值滤波等处理。
2、实验步骤:打开MATLAB6.5,按实验内容,设计一个滤波器,可以参考给定资料完成实验。
参考资料:
1.傅立叶变换
熟悉其概念和原理,实现对一幅灰度图像的快速傅立叶变换,并求其变换后的系数分布.
2.离散余弦变换
熟悉其概念和原理,实现对一幅灰度和彩色图像作的离散余弦变换,选择适当的DCT系数阈值对其进行DCT反变换.
% 图象的FFT变换
clc;
I=imread('005.bmp');
subplot(1,2,1)
imshow(I);
title('原图');
subplot(1,2,2)
imhist(I);
title('直方图');
colorbar;
J=fft2(I);
figure;
subplot(1,2,1)
imshow(J);
title('FFT变换结果');
subplot(1,2,2)
K=fftshift(J);
imshow(K);
title('零点平移');
figure;
imshow(log(abs(K)),[]),colormap(jet(64)),colorbar;
title('系数分布图');
% 图象的DCT变换
RGB=imread('005.bmp');
figure;
subplot(1,2,1)
imshow(RGB);
title('彩色原图');
a=rgb2gray(RGB);
subplot(1,2,2)
imshow(a);
title('灰度图');
figure;
b=dct2(a);
imshow(log(abs(b)),[]),colormap(jet(64)),colorbar;
title('DCT变换结果');
figure;
b(abs(b)<10)=0;
% idct
c=idct2(b)/255;
imshow(c);
title('IDCT变换结果');
3.小波变换
实验内容:熟悉小波变换的概念和原理,熟悉matlab小波工具箱主要函数的使用.利用二维小波
对一幅图象作2层小波分解,并在此基础上提取各层的低频信息实现图像的压缩. 程序如下:
clc
close all
clear
a=imread('005.bmp');
subplot(1,2,1);
imshow(a);
title('原始图象');
I=rgb2gray(a);
subplot(1,2,2);
imshow(I);
title('原始图象的灰度图');
% 进行二维小波变换
[a,b] = wavedec2(I, 2, 'bior3.7');
% 提取各层低频信息
figure;
c = appcoef2( a, b, 'bior3.7', 1 ); subplot(1,2,1);
imshow(c, []);
title('一层小波变换结果');
d = appcoef2( a, b, 'bior3.7', 2 ); subplot(1,2,2);
imshow(d, []);
title('二层小波变换结果');
实验三图像的边缘检测
一、实验目的:
1、进一步加深对模版匹配方法的理解。
2、熟悉使用MATLAB工具箱中sobel、prewitt、log 、roberts 、canny等算子。
3、在以上两点的基础上,自行设计模版,检验处理的效果。
二、实验设备:
计算机、MATLAB6.5软件。
三、实验说明:
1、本实验在MATLAB上调试运行,学生应对MATLAB的相关指令、函数等有一定的了解。
2、实验的结果应与课堂上的相关内容印证,加深对理论算法的理解。
3、在熟悉基本内容后,自己设计试验的结果和处理方法。
4、可参考附加资料。
四、实验内容:
1、利用二个低通邻域平均
(3×3和9×9)对一幅图象进行平滑,验证模板尺寸对图象的模糊效果的影响。
2、利用一个低通模板对一幅有噪图象(GAUSS白噪声)进行滤波,检验两种滤波模板(分别使用一个5×5的线性邻域平均模板和一个非线性模板:3×5中值滤波器)对噪声的滤波效果。
3、选择一个经过低通滤波器滤波的模糊图象,利用sobel和prewitt水平边缘增强高通滤波器(模板)对其进行高通滤波图象边缘增强,验证模板的滤波效果。
4、选择一幅灰度图象分别利用一阶Sobel算子和二阶Laplacian算子对其进行边缘检测,验证检测效果。
5、自己改动给定的模版,验证处理的结果。
参考资料:
1、利用低通邻域平均模板进行平滑:
I=imread('girl.bmp');
subplot(1,3,1);
imshow(I);
title('原图');
J=fspecial('average');
J1=filter2(J,I)/255;
subplot(1,3,2);
imshow(J1);
title('3*3滤波');
K=fspecial('average',9);
K1=filter2(K,I)/255;
subplot(1,3,3);
imshow(K1);
title('9*9滤波');
2、中值滤波和平均滤波
I=imread('girl.bmp');
J=imnoise(I,'gaussian',0,0.01);
subplot(2,2,1);
imshow(I);
title('原图');
subplot(2,2,2);
imshow(J);
title('noise');
K=fspecial('average',5);
K1=filter2(K,J)/255;
subplot(2,2,3);
imshow(K1);
title('average');
L=medfilt2(J,[3 5]);
subplot(2,2,4);
imshow(L);
title('medium');
3、高通滤波边缘增强
I=imread('girl.bmp');
subplot(2,2,1);
imshow(I);
title('original pic');
J=fspecial('average',3);
J1=conv2(I,J)/255;
%J1=filter2(J,I)/255;
subplot(2,2,2);
imshow(J1);
title('3*3lowpass');
K=fspecial('prewitt');
K1=filter2(K,J1)*5;
subplot(2,2,3);
imshow(K1);
title('prewitt');
L=fspecial('sobel');
L1=filter2(L,J1)*5;
subplot(2,2,4);
imshow(L1);
title('sibel');
4、边缘检测
分别用sobel和laplacian算子来进行,程序如下: I=imread('girl.bmp');
subplot(1,3,1);
imshow(I);
title('original pic');
K=fspecial('laplacian',0.7); K1=filter2(K,I)/100; subplot(1,3,2);
imshow(K1);
title('laplacian');
L=fspecial('sobel');
L1=filter2(L,I)/200; subplot(1,3,3);
imshow(L1);
title('sibel');