实验二:空域图像增强实验(一)----灰度变换与直方图方法
一、实验目的:
1、掌握灰度直方图的概念及其计算方法; 2、掌握直力图均衡化的算法原理与编程步骤; 3、熟练Matlab中的空域图像增强命令;
4、掌握MATLAB编程实现直方图均衡化程序的方法; 5、掌握在VS2010环境中编程实现直方图均衡化功能的方法; 6、了解灰度变换法图像增强的应用价值。 二、实验设备:
1、PC机或笔记本电脑,Windows操作系统;
2、安装Matlab与VS2010软件,准备实验相关图像或M文件; 3、按照如下实验内容与步骤,编写相应Matlab程序,完成实验任务。 三、实验原理:
1、灰度映射:通过改变图像所有或部分像素的灰度值来达到改善图像视觉效果的目的。
(1)对数变换,是指输出图像g的像素点的灰度值与对应的输入图像f的像素灰度值之间为对数关系,其一般公式为:
g(x,y)=lg[f(x,y)] (14-1)
其中lg表示以10为底,也可以选用自然对数ln。为了增加变换的动态范围,在上述一般公式中可以加入一些调制参数,这时的变换公式为:
g(x,y)=a+
ln[f(x,y)+1]
(14-2)
b
式中a,b,c都是可以选择的参数,式中f(x, y)+1是为了避免对0求对数,确保ln[f(x,y)+1]30。当f(x,y)=0时,ln[f(x,y)+1]=0,则y=a,所以a为Y轴上的截距,确定了变换曲线的初始位置的变换关系,b这个参数确定变换曲线的变化速率。对数变换用于扩展低灰度区,一般适用于过暗的图像。对数变换相应的变换曲线如图14-1所示。当希望对图像的低灰度区作较大的拉伸,而对高灰度区压缩时,可采用这种变换,它能使图像灰度分布与人的视觉特性相匹配。
(2)指数变换,是指输出图像的像素点的灰度值与对应的输入图像的像素灰度值之间满足指数关系,其一般公式为:
g(x,y)=bf(x,y) (14-4)
其中b为底数。为了增加变换的动态范围,在上述一般公式中可以加入一些调制参数,以改变变换曲线的初始位置和曲线的变化速率。这时的变换公式为:
g(x,y)=bc′[f(x,y)-a]-1 (14-5)
式中a,b,c都是可以选择的参数,当f(x,y)=a时,g(x,y)=0,此时指数曲线交于X轴,由此可见参数a决定了指数变换曲线的初始位置,参数c决定了变换曲线的陡度,即决定曲线的变化速率,是指数变换的函数曲线。指数变换用于扩展高灰度区,一般适于过亮的图像。
2、灰度直方图
? 概念:灰度直方图是关于灰度级分布的函数,是对图像中灰度级分布的统计。灰度直方图是将数字
图像中的所有像素,按照灰度值的大小,统计其出现的频率。 ? 数学定义:
13
假设一幅数字图像的像素总数为N,共有L个灰度级,其直方图定义为如下离散函数:
h(rk)=nk
其中,rk表示第k级灰度值,nk是灰度级rk在图像中出现的次数(频数)。:
3、归一化的直方图
通常,会用到归一化直方图,即用所有元素h(rk)除以图像中的像素总数N所得到的图形:
p(rk)=
h(rk)nk
=,NN
k=1,2,...,L
P(rk)表示灰度级rk出现的概率。 4、直方图均衡化原理(重点)
? 概念:直方图均衡化也叫做直方图均匀化,是将一已知灰度概率密度分布的图像,经过某种变换,
变成一幅具有均匀灰度概率密度分布的新图像。 ? 均衡化处理之后的图像,因各灰度值出现的概率是相同的,则此时图像的熵最大(等概率下则熵最
最大),图像所包含的信息量最大,且扩展了像元取值的动态范围,从而达到增强图像整体对比度的效果。 ? 原理:
详见PPT。
? 直方图均衡化编程步骤(重点) Step 1:列出原始图像的灰度级nk
Step 2:统计各灰度级的像素数目
Step 3:计算原始图像直方图各灰度级的频数 Step 4:计算累计分布函数
Step 5:依据累计分布函数计算灰度映射表
Step 6:用计算的映射关系修改原始图像的灰度级,从而获得直方图近似为均匀分布的输出图像,程序结束。
四、练习内容:
启动电脑,打开MATLAB编程编程环境,依次完成下列实验: 1、图像直方图计算实验。
方法:利用MATLAB图像处理工具箱提供的imhist函数来计算和显示图像的直方图,其调用格式为: ? 语法一:imhist(I,b)
说明:其中I为输入图像,b为指定的灰度级数目,默认值为256。 ? 语法二:[COUNTS, X] = imhist(I)
说明:(1) [COUNTS,X]=imhist(…)返回直方图统计的数据和相应的灰度级向量X。
(2)使用表达式 p= imhist(I,b)/N 就可简单地获得归一化直方图,这里N为图像中的像素总数。
l 在Matlab中,建立M文件Lab3_Test1.m,编写以下指令,观察分析实验结果。
clear all;
I=imread('lena.bmp'); %打开一幅灰度图像 [W, H]=size(I); N=W*H;
J=imhist(I)./N; %计算图像的归一化直方图 subplot(1,3,1), imshow(I), title(‘原图像’);
14
subplot(1,3,2), imhist(I,64) , title(‘直方图’); subplot(1,3,3), plot(J) , title(‘归一化直方图’);
(a)
(a)原图 (b) 直方图 (c) 归一化直方图
图1 灰度图像的直方图及归一化直方图
2、图像直方图均衡化实验。
n MATLAB图像处理工具箱提供了直方图均衡函数histeq。其调用格式为:
J = histeq(I,n); [J,T] = histeq(I,…); newmap=histeq(X,map); [new,T]=histeq(X,…);
n 在matlab环境中,编写M文件Lab3_Test2.m,首先读取图像,然后调用灰度均衡函数,再输出处
理后的图像。程序代码如下:
clc; close all; clear all
I=imread('cameraman.tif'); %读取图像 subplot(2,2,1),imshow(I) %输出图像
title('原始图像') %在原始图像中加标题 subplot(2,2,3),imhist(I) %输出原图直方图 title('原始图像直方图') %在原图直方图上加标题 a=histeq(I,256); %直方图均衡化,灰度级为256 subplot(2,2,2),imshow(a) %输出均衡化后图像 title('均衡化后图像') %在均衡化后图像中加标题 subplot(2,2,4),imhist(a) %输出均衡化后直方图 title('均衡化后图像直方图') %在均衡化后直方图上加标题
15
图2 图像直方图均衡化对比
3、自编直方图均衡化程序。
n 在Matlab中,建立M文件Lab3_Test3.m,编写如下代码,实现直方图均衡化子程序function
I=MyHistEq(Img),且对它进行调用与对比实验。 n 代码如下:
function Lab3_Test3_Main()
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clc;close all;clear all;
%这个相当于主程序,打开图像,调用自己编写的直方图均衡化子程序,对图像进行处理 Img = imread('office_1.jpg'); %打开图像 II=MyHistEq(Img); %调用自编直方均衡化 disp('Run OK') %主程序到此结束
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %说明:自己编写的直方图均衡化子函数
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function I=MyHistEq(Img) %直方图均衡化 …… 略(自己编写)
注:掌握Matlab中的这种编程方式,即一个M文件中写几个function,第一个function相当于主函数,后面的一个或几个function相当于子程序,可被直接调用。
五、实验内容及要求
1、图像灰度变换实验:打开一张灰度图像,对其灰度分别进行“对数变换”与“指数变换”,观察比较实验结果;
2、打开灰度图像,利用MATLAB工具箱所提供的函数计算并绘制图像的直方图和归一化直方图; 3、利用相应的MATLAB函数对灰度图像进行直方图均衡化,显示均衡化后的图像及对应的直方图,分析均衡化后图像有何变化,均衡化后的直方图有何特点; 4.参照上述程序,自己编程实现:
1)编写一个函数,能统计图像的灰度直方图; 2)编写一个函数,实现图像均衡化处理功能;
3)用自己写的函数,对图像进行直方图计算与均衡化处理,并与Matlab自带函数进行比对分析; 5、在VS2010环境中,编写程序实现直方图均衡化功能,观察比较实验结果。
16
实验三:空域图像增强实验(二)----空域滤波方法
一、实验目的:
1、掌握常用空域图像滤波算法原理及编程方法; 2、理解图像平滑滤波及图像锐化滤波的特点及性质;
3、掌握MATLAB语言编程方法,实现邻域平均、中值滤波图像平滑及拉普拉斯图像锐化的程序代码,对图像进行处理。
4、掌握VS环境C++编程方法,实现邻域平均、中值滤波图像平滑及拉普拉斯图像锐化的程序代码,对图像进行处理。 二、实验设备:
1、PC机或笔记本电脑,Windows操作系统;
2、安装Matlab与VS软件,准备实验相关图像或文件;
3、按照如下实验内容与步骤,编写相应Matlab程序,完成实验任务。 三、实验原理:
1、空间滤波机理:就是在待处理图像中逐点地移动掩模。在每一点(x,y)处,滤波器在该点的响应通过事先定义的关系来计算。对于线性空间滤波,其响应由滤波器系数与滤波掩模扫过区域的相应像素值的乘积之和给出。
2、均值滤波器:使用滤波器模板确定的平均灰度值代替图像中的每个像素的灰度值,这种处理的结果降低了图像灰度的“尖锐”变化。由于典型的的随机噪声有灰度级的急剧变化组成,因此,常见的均值滤波器处理应用就是降低噪声。但是由于图像边缘也是由图像灰度尖锐变化带来的特性,所以均值滤波处理还是存在着不希望有的边缘模糊的负面效应。
3、加权平均滤波器:所谓加权是指用不同的系数乘以像素,使得一些像素的重要性(权重)比另一些像素的重要性更大。如果赋予中心点最高权重,然后随着距中心点距离的增加而减小系数的加权权重,其目的是在平滑处理中试图降低模糊。也可以选择其他权重来达到所需的目的。
4、中值滤波器:所谓中值滤波就是图像中每个像素为中心,把它一个邻域中所有像素取出来,由大到小进行排序,中间位置那个值为中值,用它代替图像中的每个像素的灰度值。
5、锐化空间滤波器:使用二阶微分(拉普拉斯算子)进行图像锐化,由于拉普拉斯算子是一种微分算子,因此其应用强调的是图像的突变,并不强调灰度级缓慢变化的区域。 将原图像和拉普拉斯图像叠加在一起,可以复原背景特性并保持拉普拉斯锐化处理的效果,如果使用的定义是具有负的中心系数的拉普拉斯滤波模板,那么必须将原图像减去井拉普拉斯变换后的图像而不是加上它,从而得到高提升的效果
(具体公式、算法原理、编程思路,详见PPT) 四、练习内容
启动电脑,打开MATLAB编程编程环境,依次完成下列所有实验: 1、均值滤波实验。
n 在Matlab中,建立M文件Lab3_Test1.m,编写如下代码,利用Matlab自带的函数对噪声图像进行滤波处理,且分析对比实验结果。代码如下: function Lab3_Test1() clc;close all;clear all;
17