图像处理与机器视觉
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《图像处理与机器视觉》
作业
姓名:
学号:
专业:测试计量技术及仪器
时间:2016年4月
作业一:图像增强
1、图像灰度变换。
对图像(见图1)进行对比度拉伸,通过直方图获取灰度分布的最小、最大值。
图1 灰度拉伸
算法描述:
直方图均衡化是灰度变换的一个重要应用,它广泛应用在图像增强处理中。可以产生一幅灰度级分布具有均匀概率密度的图像,扩展了像素取值的动态范围。由于许多图像的灰度值是非均匀分布的,而且灰度值集中在一个小区间内的图像也是很常见的。直方图均衡化就是一种通过重新均匀地分布各灰度值来增强图像对比度的方法。直方图均衡化处理是以累积分布函数(Cumulative Distri-bution Function- CDF )为基础的直方图修改法。直方图均衡化的目的是将原始图像的直方图变为均衡分布的形式,即将一已知灰度概率密度分布的图像,经过某种变换,变成一幅具有均匀灰度概率密度分布的新图像。
源程序:
clear;clc;close;
I=imread('E:\学习\图像处理与机器视觉\灰度变换.bmp');%读取图像
[m,n,o]=size(I);
grayPic=rgb2gray(I);
figure,imshow(I);
figure,imshow(grayPic);
gp=zeros(1,256); %计算各灰度出现的概率
for i=1:256
gp(i)=length(find(grayPic==(i-1)))/(m*n);
end
figure,bar(0:255,gp);
title('原图像直方图');
xlabel('灰度值');
ylabel('出现概率');
newGp=zeros(1,256); %计算新的各灰度出现的概率
S1=zeros(1,256);
S2=zeros(1,256);
tmp=0;
for i=1:256
tmp=tmp+gp(i);
S1(i)=tmp;
S2(i)=round(S1(i)*256);
end
for i=1:256
newGp(i)=sum(gp(find(S2==i)));
end
figure,bar(0:255,newGp);
title('均衡化后的直方图');
xlabel('灰度值');
ylabel('出现概率');
newGrayPic=grayPic; %填充各像素点新的灰度值
for i=1:256
newGrayPic(find(grayPic==(i-1)))=S2(i);
end
figure,imshow(newGrayPic);
处理结果及分析:
运行以上代码后,matlab出来的图像如下图1.1和图1.2所示:
图1.1 原图像及其直方图
图1.2 直方图均衡化后的图像及其直方图
从上图中可以看出,图像灰度的最大值为250,最小为0,用直方图均衡化后,图像的直方图的灰度间隔被拉大了,均衡化的图像的一些细节显示了出来,这有利于图像的分析和识别。直方图均衡化就是通过变换函数histeq将原图的直方图调整为具有“平坦”倾向的直方图,然后用均衡直方图校正图像。
2、(选作)设计K近邻均值(中值)滤波器,给出图像(见图)处理结果。
1) 以待处理像素为中心,作一个m*m的作用模板。
2)在模板中,选择K个与待处理像素的灰度差为最小的像素。
3)将这K个像素的灰度均值(中值)替换掉原来的像素值。
图2 图像滤波
算法描述:
邻近均值滤波,即中值滤波(Median filtering)是一种非常有用的非线性信号处理方法,在一定程度上可以克服采用诸如邻域均值滤波等线性低通滤波器消除
噪声时,会将图像边缘模糊掉的缺点。中值滤波尤其对图像中的脉冲噪声、扫描噪声等能有良好的去除效果,但是对含有过多细节的图像,处理效果一般不好。
中值滤波器根据器计算方法,可以称为非线性滤波器中的排序统计滤波器,它不是简单的加权求和,而是先把邻域像素按灰度级进行排序,然后再选择该组的中值作为模板输出结果。由于中值滤波在算法设计上使与周围像素灰度级相差较大的点处理后能和周围的像素值比较接近,因此可以衰减随机噪声,尤其是脉冲噪声等。但由于不是简单的取均值,因此产生的模糊要少得多。
图2.1为中值滤波器得一维应用示例,其中图(a)为一叠加有1/4采样频率正弦震荡得离散信号序列,在3点邻域中进行中值滤波,在得到得处理结果(b)中,完全消除了正弦波的干扰,而且保留了边界。
(a)(b)
图2.1 中值滤波
中值滤波由于需要对邻域所有像素按灰度级进行排序之后得到模板输出结果,因此在计算速度上要比模板卷积慢。为了加快处理速度,在程序设计时采用“冒泡”排序法排序。
选用函数medfilt2,b=medfilt2(a,[m,n]);b是中值滤波后的图象矩阵,a是原图矩阵,m和n是处理模版大小,默认3×3
源程序:
clear;clc;close;
%medfilt2函数
Y=imread('E:\学习\图像处理与机器视觉\图像滤波.bmp');%读取图像
H=medfilt2(Y,[2 2]);
subplot(1,2,1),imshow(Y),title('原图')
subplot(1,2,2),imshow(H),title('中值滤波后的效果图');
figure,imshow(newGrayPic);