实验二 图像直方图分析
一.实验目的及要求
1.了解MATLAB 的操作环境和基本功能。
2.掌握MATLAB 中图像增强与平滑的函数的使用方法。
3.加深理解图像增强与平滑的算法原理。
二、实验内容
(一)研究以下程序,分析程序功能;输入执行各命令行,认真观察命令执行的结果。熟悉程序中所使用函数的调用方法,改变有关参数,观察试验结果。(可将每段程序保存为一个.m 文件)
1.直方图均衡化
clear all; close all % Clear the MATLAB workspace of any variables
% and close open figure windows.
I = imread('pout.tif'); % Reads the sample images ‘ pout.tif’, and stores it in
imshow(I) % an array named I.display the image
figure, imhist(I) % Create a histogram of the image and display it in
% a new figure window.
[I2,T] = histeq(I); % Histogram equalization.
figure, imshow(I2) % Display the new equalized image, I2, in a new figure window.
figure, imhist(I2) % Create a histogram of the equalized image I2. figure,plot((0:255)/255,T); % plot the transformation curve.
imwrite (I2, 'pout2.png'); % Write the newly adjusted image I2 to a disk file named
% ‘pout2.png’.
imfinfo('pout2.png') % Check the contents of the newly written file
2.直接灰度变换
clear all; close all
I = imread('cameraman.tif');
J = imadjust(I,[0 0.2],[0.5 1]);
imshow(I)
figure, imshow(J)
[X,map] = imread('forest.tif');
figure,imshow(X,map)
I2 = ind2gray(X,map);
J2 = imadjust(I2,[],[],0.5);
figure,imshow(I2)
figure, imshow(J2)
J3 = imadjust(I2,[],[],1.5);
figure, imshow(J3)
help imadjust % Display the imadjust() function information.
3.空域平滑滤波(模糊、去噪)
clear all; close all
I = imread('eight.tif');
h1 = ones(3,3) / 9;
h2 = ones(5,5) / 25;
I1 = imfilter(I,h1);
I2 = imfilter(I,h2);
figure(1), imshow(I), title('Original Image');
figure(2), imshow(I1), title('Filtered Image With 3*3 ')
figure(3), imshow(I2), title('Filtered Image With 5*5 ')
% 加入Gaussian 噪声
J1 = imnoise(I,'gaussian',0,0.005);
% 加入椒盐噪声
J2 = imnoise(I,'salt & pepper',0.02);
% 对J1、J2进行平均值平滑滤波
K1 = imfilter(J1,fspecial('average',3));
K2 = imfilter(J2,fspecial('average',3));
figure(4);
subplot(2,2,1), imshow(J1) , title('gaussian');
subplot(2,2,2), imshow(J2), title('salt & pepper ');
subplot(2,2,3), imshow(K1), title('average ');
subplot(2,2,4), imshow(K2);
% 对J1、J2进行中值滤波
K3 = medfilt2(J1,[3 3]);
K4 = medfilt2(J2,[3 3]);
figure(5);
subplot(2,2,1), imshow(J1) , title('gaussian');
subplot(2,2,2), imshow(J2), title('salt & pepper ');
subplot(2,2,3), imshow(K3), title(' Median filtering ');
subplot(2,2,4), imshow(K4)
4.空域锐化滤波
clear all; close all
I = imread('moon.tif');
w=fspecial('laplacian',0)
w8=[1,1,1;1,-8,1;1,1,1]
I1= imfilter(I,w, 'replicate');
figure(1); imshow(I), title('Original Image');
figure(2), imshow(I1), title('Laplacian Image');
f = im2double(I);
f1= imfilter(f,w, 'replicate');
figure(3), imshow(f1,[]), title('Laplacian Image');
f2= imfilter(f,w8, 'replicate');
f4 = f-f1;
f8 = f-f2;
figure(4), imshow(f4);
figure(5), imshow(f8);
(二)采用MATLAB 底层函数编程实现
1.灰度变换之动态范围扩展
假定原图像f (x , y ) 的灰度范围为[a , b ],希望变换后图像 g (x , y ) 的灰度范围扩展至[c , d ],则线性变换可表示为:
g (x , y ) =d -c [f (x , y ) -a ]+c b -a
用MA TLAB 底层函数编程实现上述变换函数。观察图像‘ pout.tif’的灰度直方图,选择合适的参数[a , b ]、[c , d ]对图像‘pout.tif ’进行灰度变换,以获得满意的视觉效果。
2.非锐化掩蔽和高斯滤波
从原图像中减去其非锐化(平滑过的)图像的过程称为非锐化掩蔽,其基本步骤为: ⑴对原图像进行平滑滤波得到模糊图像f (x , y ) ;
⑵从原图像中减去模糊图像,产生的差值图像称为模板g mask (x , y ) ;
⑶将模板加到原图像上,得到锐化后的图像g (x , y ) 。 即,
g mask (x , y ) =f (x , y ) - f (x , y )
g (x , y ) =f (x , y ) +k *g mask (x , y ) ;k ≥1
用MA TLAB 函数编程实现上述功能。
三、实验设备
1.计算机;
2.MATLAB6.5及以上;
四、预习与思考
1.预习实验内容,阅读教材熟悉实验原理;
2.查阅资料,熟悉MATLAB 的操作环境和基本功能。熟悉实验中涉及的有关函数。
3.利用课余时间,用MATLAB 底层函数编程实现实验内容(二)中的灰度线性变换。
4.你能否给出实现样例程序功能的其它方法?
五、实验报告要求
1. 简述试验的目的和试验原理;
2. 叙述各段程序功能,改变有关函数的参数,分析比较实验结果;
3. 打印出所编写的实验程序。
4. 写出本实验的心得体会及意见。
1.直方图均衡化
I = imread('pout.tif' );
imshow(I)
figure, imhist(I)
[I2,T] = histeq(I);
figure, imshow(I2)
figure, imhist(I2)
figure,plot((0:255)/255,T);
imwrite (I2, 'pout2.png' );
imfinfo('pout2.png' )
2.直接灰度变换
clear all; close all
I = imread('cameraman.tif');
J = imadjust(I,[0 0.2],[0.5 1]);
imshow(I)
figure, imshow(J)
[X,map] = imread('forest.tif');
figure,imshow(X,map)
I2 = ind2gray(X,map);
J2 = imadjust(I2,[],[],0.5);
figure,imshow(I2)
figure, imshow(J2)
J3 = imadjust(I2,[],[],1.5);
figure, imshow(J3)
help imadjust
3.空域平滑滤波(模糊、去噪)
clear all; close all
I = imread('eight.tif');
h1 = ones(3,3) / 9;
h2 = ones(5,5) / 25;
I1 = imfilter(I,h1);
I2 = imfilter(I,h2);
figure(1), imshow(I), title('Original Image');
figure(2), imshow(I1), title('Filtered Image With 3*3 ')
figure(3), imshow(I2), title('Filtered Image With 5*5 ')
% 加入Gaussian 噪声
J1 = imnoise(I,'gaussian',0,0.005);
% 加入椒盐噪声
J2 = imnoise(I,'salt & pepper',0.02);
% 对J1、J2进行平均值平滑滤波
K1 = imfilter(J1,fspecial('average',3));
K2 = imfilter(J2,fspecial('average',3));
figure(4);
subplot(2,2,1), imshow(J1) , title('gaussian');
subplot(2,2,2), imshow(J2), title('salt & pepper ');
subplot(2,2,3), imshow(K1), title('average ');
subplot(2,2,4), imshow(K2);
% 对J1、J2进行中值滤波
K3 = medfilt2(J1,[3 3]);
K4 = medfilt2(J2,[3 3]);
figure(5);
subplot(2,2,1), imshow(J1) , title('gaussian');
subplot(2,2,2), imshow(J2), title('salt & pepper ');
subplot(2,2,3), imshow(K3), title(' Median filtering ');
subplot(2,2,4), imshow(K4)
4.空域锐化滤波
clear all; close all
I = imread('moon.tif');
w=fspecial('laplacian',0)
w8=[1,1,1;1,-8,1;1,1,1]
I1= imfilter(I,w, 'replicate');
figure(1); imshow(I), title('Original Image');
figure(2), imshow(I1), title('Laplacian Image');
f = im2double(I);
f1= imfilter(f,w, 'replicate');
figure(3), imshow(f1,[]), title('Laplacian Image');
f2= imfilter(f,w8, 'replicate');
f4 = f-f1;
f8 = f-f2;
figure(4), imshow(f4);
figure(5), imshow(f8);
实验心得
通过本次试验了解和掌握了MATLAB 的操作环境和最基本的功能。学习
到了如何在MATLAB 中处理图像。初步掌握了图像的增强和函数的使用方法。通过实验加深了对算法的理解和掌握, 许多程序算子都是系统自带的,我们最好深入学习一下吧。