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

一、 实验目的
1、熟悉灰度直方图的概念及计算方法;
2、熟悉直方图均衡化的计算过程;
3、计算并绘制图像直方图,实现直方图均衡化。
二、 实验内容
学习使用函数 imhist, histeq, bar, stem, plot, imadjust ,及 title, axis, set 等描述图像工具。
三、实验步骤
1、 直方图显示
显示图 Fig0354(a)(einstein_orig).tif ,标注图的题目为: EINSTEIN ,作出其
直方图,调整参数如下图所示:
[数图] 实验二 灰度直方图及直方图均衡化_第1张图片

 

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

 [数图] 实验二 灰度直方图及直方图均衡化_第3张图片

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

[数图] 实验二 灰度直方图及直方图均衡化_第4张图片

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

[数图] 实验二 灰度直方图及直方图均衡化_第5张图片

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

[数图] 实验二 灰度直方图及直方图均衡化_第6张图片

四、Experiment Results & Appendix( programs

显示原图和直方图

[数图] 实验二 灰度直方图及直方图均衡化_第7张图片

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函数显示直方图

 

[数图] 实验二 灰度直方图及直方图均衡化_第8张图片

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绘制曲线图

[数图] 实验二 灰度直方图及直方图均衡化_第9张图片

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查看调整前后直方图的变化

[数图] 实验二 灰度直方图及直方图均衡化_第10张图片

 

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('均衡后的直方图'); 

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

[数图] 实验二 灰度直方图及直方图均衡化_第11张图片

 

%用模糊算法进行亮度均衡,利用相应函数获得以下结果
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. 在实现会出直方图时,原先没有注意到纵坐标的范围,所以有如下输出:

[数图] 实验二 灰度直方图及直方图均衡化_第12张图片

 

和题目中的不符:

[数图] 实验二 灰度直方图及直方图均衡化_第13张图片

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

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

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

你可能感兴趣的:(数字图像处理实验,图像处理,matlab)