图像增强实验及MATLAB在图像处理中的一些函数Word格式.docx
《图像增强实验及MATLAB在图像处理中的一些函数Word格式.docx》由会员分享,可在线阅读,更多相关《图像增强实验及MATLAB在图像处理中的一些函数Word格式.docx(16页珍藏版)》请在冰豆网上搜索。
5.结束运行,退出;
五.实验结果
观察图像matlab环境下的直方图分布。
(a)原始图像(b)原始图像直方图
六.实验报告要求
1、给出实验原理过程及实现代码;
2、输入一幅灰度图像(不得使用“cameraman.tif”),给出其灰度直方图结果,并进行灰度直方图分布原理分析。
1、实验原理过程:
每一张图片都是一张灰度图片,都是由一些像素点组成,matlab读取图片,并显示该图片的灰度级范围。
实现代码:
D:
\MATLAB7\toolbox\images\imdemos\rice.png'
2、
实验1.2灰度均衡化
1.熟悉matlab图像处理工具箱中灰度均衡函数的使用;
2.理解和掌握灰度均衡原理和实现方法;
二.实验设备
1.PC机一台;
2.软件matlab;
在matlab环境中,程序首先读取图像,然后调用灰度均衡函数,设置相关参数,再输出处理后的图像。
subplot(2,2,1),imshow(I)%输出图像
subplot(2,2,3),imhist(I)%输出原图直方图
a=histeq(I,256);
%直方图均衡化,灰度级为256
subplot(2,2,2),imshow(a)%输出均衡化后图像
均衡化后图像'
)%在均衡化后图像中加标题
subplot(2,2,4),imhist(a)%输出均衡化后直方图
均衡化后图像直方图'
)%在均衡化后直方图上加标题
再调用相应的灰度均衡函数,设置参数;
观察matlab环境下图像灰度均衡结果及直方图分布。
(a)原始图像(b)均衡化后图像
(c)原始图像直方图(d)均衡化后图像直方图
实验二图像平滑
实验2.1噪声添加
1.熟悉matlab图像处理工具箱及噪声添加的方法;
2.理解和掌握产生高斯噪声和椒盐噪声的方法和应用;
三.程序设计
在matlab环境中,程序首先读取图像,然后调用添加噪音函数,设置相关参数,再输出处理后的图像。
椒盐噪声:
clearall;
closeall;
I=im2double(I);
R=rand(size(I));
J=I;
J(R<
=0.02)=0;
K=I;
K(R<
=0.03)=1;
figure;
subplot(121);
imshow(J);
subplot(122);
imshow(K);
高斯噪声:
I=uint8(100*ones(256,256));
J=imnoise(I,'
gaussian'
0,0.01);
K=imnoise(I,'
0,0.03);
imhist(J);
imhist(K);
再调用相应的噪声添加函数,设置参数;
观察matlab环境下原始图像经噪声添加处理后的结果。
(a)原始图像(b)(c)添加噪声后的图像
图(3)
输给椒盐噪声程序添加注解,并分析产生原理。
%清除
%读取图片
%把图像数据类型转换为双精度浮点类型
%建立一个0到1的随机数组,随机数组的行列和原图片一样
%将I赋给J
%J中R小于等于0.02的变为0
%将I赋给K
%K中R小于等于0.03的变为1
%输出图片
%一行两列显示,一列显示J
%一行两列显示,二列显示K
实验原理:
由相机拍摄的照片,经过自身相机的处理,有时需要图片质量更好,需要人为对图片进行添加噪声,通过matalb,盐=白色,椒=黑色。
前者是高灰度噪声,后者属于低灰度噪声。
一般两种噪声同时出现,呈现在图像上就是黑白杂点。
实验2.23*3均值滤波
1.熟悉matlab图像处理工具箱及均值滤波函数的使用;
2.理解和掌握3*3均值滤波的方法和应用;
在matlab环境中,程序首先读取图像,然后调用图像增强(均值滤波)函数,设置相关参数,再输出处理后的图像。
I=imnoise(I,'
0.05);
PSF=fspecial('
average'
3);
J=imfilter(I,PSF);
imshow(I);
再调用相应的图像增强(均值滤波)函数,设置参数;
观察matlab环境下原始图像经3*3均值滤波处理后的结果。
(a)原始图像(b)3*3均值滤波处理后的图像
图(4)
(1)通过帮助文件解释程序含义。
(2)在一张图片上同时输出原图片和处理后的图片。
(3)输入一幅灰度图像,给出其图像经3*3均值滤波处理后的结果,然后对每一点的灰度值和它周围24个点,一共25个点的灰度值进行均值滤波,看看对25个点取均值与对9个点取中值进行均值滤波有什么区别?
1、clearall;
%将图片I进行高斯噪声,方差是0.05的噪声
%生成3*3均值滤波
%进行滤波
2、原始图片3*3处理后图片
3、原始图片5*5处理后图片
5*5的处理之后图片质量更好一些。
实验2.33*3中值滤波
1.熟悉matlab图像处理工具箱及中值滤波函数的使用;
2.理解和掌握中值滤波的方法和应用;
在matlab环境中,程序首先读取图像,然后调用图像增强(中值滤波)函数,设置相关参数,再输出处理后的图像。
I=imread('
figure,imshow(I);
Y=imnoise(I,'
salt&
pepper'
0.1);
J=medfilt2(Y,[5,5]);
figure,imshow(Y);
figure,imshow(J);
再调用相应的图像增强(中值滤波)函数,设置参数;
观察matlab环境下原始图像经3*3中值滤波处理后的结果。
(a)原始图像(b)添加噪音后的图像(c)3*3中值滤波处理后的图像
输入一幅灰度图像,给出其图像经3*3中值滤波处理后的结果,然后对每一点的灰度值和它周围24个点,一共25个点的灰度值进行排序后取中值,然后该点的灰度值取中值。
看看对25个点取中值与对9个点取中值进行中值滤波有什么区别?
原始图片
高斯噪声图片
5*5均值滤波
5*5均值滤波之后效果更好,图片质量更高。
MATlAB在图像处理中的一些函数详解
绘制直方图(水平和垂直的)bar的用法
语法
bar(Y)
bar(x,Y)
bar(...,width)
bar(...,'
style'
)
bar_color'
bar(axes_handle,...)
h=bar(...)
hpatches=bar('
v6'
...)
barh(...)
h=barh(...)
hpatches=barh('
描述
一个条形图展示向量或者矩阵的值,使用水平的或者垂直的直方图。
1、bar(Y):
为Y中的每一个元素绘制一个条。
如果Y是一个矩阵,会对每一行元素所产生的条进行分组。
当Y是一个向量时,x轴的刻度范围是1到Y的长度,当Y是一个矩阵时,长度即是行的数量。
2、bar(x,Y):
为Y中的每一个元素在指定的x位置绘制条形图。
x是一个单调增加的向量,其用来定义垂直直方图中的x轴间距。
如果Y是一个矩阵,bar对Y中的每行元素在指定x位置进行分组。
3、bar(...,width):
设置相关bar的宽度和控制一个组之间bar的距离。
默认宽度是0.8,所以如果你不指定x,这些一个组内的bars有一个比较小的距离。
如果宽度是1,则一个组内的bars是相互紧挨着的。
4、bar(...,'
):
指定bars的样式。
样式是'
grouped'
or'
stacked'
。
默认是'
'
:
表示展示m个组的每组n个垂直直方图。
m代表矩阵行数,n代表矩阵列数。
表示为每一行展示一个bar,bar的高度是每一行元素的总和。
每一个bar是多种颜色,根据颜色的分布显示各元素对总元素的贡献。
5、bar(...,'
使用单个字母缩写
r'
'
g'
b'
c'
m'
y'
k'
or'
w'
所指定的颜色展示bar.
6、bar(axes_handles,...)andbarh(axes_handles,...):
使用指定句柄的坐标轴代替当前坐标轴。
7、h=bar(...):
返回barseries图形对象句柄的向量。
bar为Y中每列创建一个barseries图形对象。
8、barh(...)andh=barh(...):
创建水平直方图。
Y决定bar的长度。
向量x是一个自增的向量,用来定义y轴上直方图的间距。
向后兼容版本
...)andhpatches=barh('
...):
对于兼容版本MATLAB6.5和更早,返回
的是patch对象的句柄而不是
barseries对象的。
示例
SingleSeriesofData
这个示例绘制钟形曲线作为直方图,设置其颜色为红色。
x=-2.9:
0.2:
2.9;
bar(x,exp(-x.*x),'
)
BarGraphOptions这个示例显示一些条形图设置选项
Y=round(rand(5,3)*10);
subplot(2,2,1)
bar(Y,'
group'
title'
Group'
subplot(2,2,2)
stack'
Stack'
subplot(2,2,3)
barh(Y,'
subplot(2,2,4)
bar(Y,1.5)
Width=1.5'
Matlab中imadjust函数的用法
imadjust在数字图像处理中用于进行图像的灰度变换(调节灰度图像的亮度或彩色图像的颜色矩阵)。
J=imadjust(I)
将灰度图像I中的亮度值映射到J中的新值并使1%的数据是在低高强度和饱和,这增加了输出图像J的对比度值。
此用法相当于imadjust(I,stretchlim(I))
J=imadjust(I,[low_in;
high_in],[low_out;
high_out])
将图像I中的亮度值映射到J中的新值,即将low_in至high_in之间的值映射到low_out至high_out之间的值。
low_in以下与high_in以上的值被剪切掉了,也就是说,low_in以下的值映射到low_out,high_in以上的值映射到high_out。
它们都可以使用空的矩阵[],默认值是[01]。
high_out],gamma)
将图像I中的亮度值映射到J中的新值,其中gamma指定描述值I和值J关系的曲线形状。
如果gamma小于1,此映射偏重更高数值(明亮)输出,如果gamma大于1,此映射偏重更低数值(灰暗)输出,如果省略此参数,默认为(线性映射)。
newmap=imadjust(map,[low_in;
调整索引色图像的调色板map。
如果low_in,high_in,low_out,high_out和gamma都是标量,那么对r,g,b分量同时都做此映射。
对于每个颜色分量都有唯一的映射,当low_in和high_in同时为1*3向量或者low_out和high_out同时为1*3向量或者gamma为1*3向量时。
调整后的颜色矩阵newmap和map有相同的大小。
RGB2=imadjust(RGB1,...)
对RGB图像RGB1的红、绿、蓝调色板分别进行调整。
随着颜色矩阵的调整,每一个调色板都有唯一的映射值。
Brighten函数
颜色映象就是矩阵,意味着你可以象其它数组那样对它们进行操作。
函数
brighten
就利用这一点通过调整一个给定的颜色映象来增加或减少暗色的强度。
brighten(n)
(
0<
n<
=1)
使当前颜色映象变亮;
而
(-1<
=n<
0
使它变暗。
后加一个
brighten(-n)
使颜色映象恢复原来状态。
newmap=brighten(n)命令创建一个比当前颜色映象更暗或者更亮的新的颜色映象,而并不改变当前的颜色映象。
命令
»
newmap=brighten(cmap,n)
对指定的颜色映象创建一个已调整过的式样,而不影响当前的颜色映象或指定的颜色映象
cmap
Histeq——功能:
直方图均衡化。
用法:
J=histeq(I,hgram)
将原始图像I的直方图变成用户指定的向量hgram。
hgram中的各元素的值域为[0,1]。
J=histeq(I,n)
指定直方图均衡后的灰度级数n,默认值为64。
[J,T]=histeq(I,...)
返回从能将图像I的灰度直方图变换成图像J的直方图变换T。
newmap=histeq(X,map,hgram)
newmap=histeq(X,map)
[newmap,T]=histeq(X,...)
这三个是针对索引图像调色板的直方图均衡化,用法和灰度图像的一样。
举例:
I=imread('
tire.tif'
J=histeq(I);
imshow(I)
figure,imshow(J)