[数图] 实验二 灰度直方图及直方图均衡化

本文介绍了在MATLAB中进行灰度直方图及直方图均衡化的实验过程,包括使用bar和stem函数绘制直方图,应用imadjust调整图像对比度,histeq进行直方图均衡化,以及采用模糊算法实现亮度均衡。实验中学到设置图表坐标范围、使用不同图形展示灰度分布以及如何通过调整对比度和模糊算法改善图像亮度的重要性。
一、 实验目的
1、熟悉灰度直方图的概念及计算方法;
2、熟悉直方图均衡化的计算过程;
3、计算并绘制图像直方图,实现直方图均衡化。
二、 实验内容
学习使用函数 imhist, histeq, bar, stem, plot, imadjust,及 title, axis, set 等描述图像工具。
三、实验步骤
1、 直方图显示
显示图 Fig0354(a)(einstein_orig).tif,标注图的题目为:EINSTEIN,作出其
直方图,调整参数如下图所示:

 

2、分别用 bar stem 函数显示直方图
h=imhist 获得直方图;分别用 bar stem 显示直方图 h,并通过参数调整,改变直方图的显示方式。用 axis 设置轴的最大、最小值(例如:axis([0 255 0 15000]);),用 set 设置显示坐标的间隔(例如:set(gca,’xtick’, 0:50:255)。作出如下的直方图:
3、用 plot 函数显示直方图, 要求同 2.

 

4、用 imadjust 函数调整图像对比度,并用 imhist 查看调整前后直方 图的变化。

5、用 histeq 进行直方图均衡化,并用 imhist 查看均衡化前后直方图的变化。

 6、用模糊算法进行亮度均衡,利用相应函数获得以下结果

四、Experiment Results & Appendix( programs

显示原图和直方图

clear all;clc;
f=imread('C:\PICTURE_YUWEI\Fig0354(a)(einstein_orig).tif');  %1. 显示图 Fig0354(a)(einstein_orig).tif ,作出其直方图并调整参数
 
figure(1);%显示原图和直方图
subplot(1,2,1);
imshow(f);
title('EINSTEIN');%标注图的题目为:EINSTEIN
subplot(1,2,2);
imhist(f);%显示它的直方图
axis([0 255 0 40000]);%根据实验要求,确定纵横轴的范围
title('直方图');

分别用bar和stem函数显示直方图

 

figure(2);%分别用bar和stem函数显示直方图
subplot(1,3,1);
h=imhist(f,25);%把255个灰度值分成25个段
horz=linspace(0,255,25);%生成向量,范围为0到255,向量中有均匀排列的25个点
bar(horz,h);%y用bar方式显示直方图
axis([0 255 0 120000]);
set(gca,'xtick',0:50:255) %在x轴上以50为单位标记刻度
set(gca,'ytick',0:20000:120000);
title('bar 默认宽度的直方图');
subplot(1,3,2);
bar(horz,h,0.5);%用bar方式显示直方图,设置bar的宽度为0.5倍默认宽度
axis([0 255 0 120000]);
set(gca,'xtick',0:50:255);
set(gca,'ytick',0:20000:120000);
title('bar 0.5倍默认宽度的直方图');
subplot(1,3,3);
stem(horz,h);%用杆状图显示直方图
axis([0 255 0 120000]);
set(gca,'xtick',0:50:255)
set(gca,'ytick',0:20000:120000);
title('stem');

用plot绘制曲线图

figure(3);
plot(horz,h);%用plot绘制曲线图
axis([0 255 0 120000]);
set(gca,'xtick',0:50:255) 
set(gca,'ytick',0:20000:120000);
title('plot'); 

 用imadjust函数调整图像对比度,并用imhist查看调整前后直方图的变化

 

figure(4);%用imadjust函数调整图像对比度,并用imhist查看调整前后直方图的变化
subplot(2,2,1);
f1=imadjust(f,[0 1],[0 1],0.5);%两个矩阵分别是变化前后的范围
imshow(f1);
title('gamma=0.5<1时,图像变亮');%图象上凸
subplot(2,2,2);
imhist(f1);%图像的直方图右移,灰度值变高
subplot(2,2,3);
f2=imadjust(f,[0 1],[0 1],2);%gamma=2>1
imshow(f2);
title('gamma=2>1时,图像变暗');
subplot(2,2,4);
imhist(f2);

用histeq进行直方图均衡化,并用imhist查看均衡化前后直方图的变化

figure(5);%用histeq进行直方图均衡化,并用imhist查看均衡化前后直方图的变化
subplot(2,2,1);
imshow(f);
subplot(2,2,2);
imhist(f);
title('原图的直方图');
subplot(2,2,3);
g=histeq(f,256);%直方图均衡
imshow(g);
subplot(2,2,4);
imhist(g);%显示均衡后的直方图
title('均衡后的直方图'); 

 用模糊算法进行亮度均衡,利用相应函数获得以下结果

 

%用模糊算法进行亮度均衡,利用相应函数获得以下结果
addpath('C:\PICTURE_YUWEI\dipum_toolbox_2.0.2');%添加工具包
udark=@(z)1-sigmamf(z, 0.35, 0.5);%进行模糊处理的隶属度函数
ugray=@(z)triangmf(z, 0.35, 0.5, 0.65);
ubright=@(z)sigmamf(z, 0.5, 0.65);
udarker=@(z)bellmf(z, 0.0, 0.1);
umidgray=@(z)bellmf(z, 0.4, 0.5);
ubrighter=@(z)bellmf(z, 0.8, 0.9); 
outmf={udark; ugray; ubright};%表示输出模糊函数
rules={udarker; umidgray; ubrighter}; %表示输入
F=fuzzysysfcn(outmf, rules, [0,1]); %使用fuzzysysfcn函数及逆行模糊处理
z=linspace(0, 1, 256);%产生0-1范围内的指定数量点数,等分为256份,并返回一个行向量。
T=F(z);
I=f;
g=intrans(I, 'specified', T);
figure(5);
subplot(1,3,1);
plot(T);%灰度值分布
title('灰度值分布');
subplot(1,3,2);
imshow(g);%模糊处理的结果
title('模糊处理的结果');
subplot(1,3,3);
imhist(g);
title('模糊处理之后的直方图');

五、Conclusions:tell me what you learned.

1. 在实现会出直方图时,原先没有注意到纵坐标的范围,所以有如下输出:

 

和题目中的不符:

所以学到了如何设置横纵坐标的范围:axis([0 255 0 40000]);

2. 学会了使用条形图、杆状图、和曲线来显示灰度图。学会了改变图像的对比度,并且知晓了灰度的变化:当对比度提高时,灰度下降。

3. 学习了使用模糊算法来对图像进行亮度的均衡。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值