图像处理与机器视觉.docx
- 文档编号:11709192
- 上传时间:2023-03-30
- 格式:DOCX
- 页数:19
- 大小:1.10MB
图像处理与机器视觉.docx
《图像处理与机器视觉.docx》由会员分享,可在线阅读,更多相关《图像处理与机器视觉.docx(19页珍藏版)》请在冰豆网上搜索。
图像处理与机器视觉
《图像处理与机器视觉》
作业
姓名:
学号:
专业:
测试计量技术及仪器
时间:
2016年4月
作业一:
图像增强
1、图像灰度变换。
对图像(见图1)进行对比度拉伸,通过直方图获取灰度分布的最小、最大值。
图1灰度拉伸
算法描述:
直方图均衡化是灰度变换的一个重要应用,它广泛应用在图像增强处理中。
可以产生一幅灰度级分布具有均匀概率密度的图像,扩展了像素取值的动态范围。
由于许多图像的灰度值是非均匀分布的,而且灰度值集中在一个小区间内的图像也是很常见的。
直方图均衡化就是一种通过重新均匀地分布各灰度值来增强图像对比度的方法。
直方图均衡化处理是以累积分布函数(CumulativeDistri-butionFunction-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);%计算各灰度出现的概率
fori=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;
fori=1:
256
tmp=tmp+gp(i);
S1(i)=tmp;
S2(i)=round(S1(i)*256);
end
fori=1:
256
newGp(i)=sum(gp(find(S2==i)));
end
figure,bar(0:
255,newGp);
title('均衡化后的直方图');
xlabel('灰度值');
ylabel('出现概率');
newGrayPic=grayPic;%填充各像素点新的灰度值
fori=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图像滤波
算法描述:
邻近均值滤波,即中值滤波(Medianfiltering)是一种非常有用的非线性信号处理方法,在一定程度上可以克服采用诸如邻域均值滤波等线性低通滤波器消除噪声时,会将图像边缘模糊掉的缺点。
中值滤波尤其对图像中的脉冲噪声、扫描噪声等能有良好的去除效果,但是对含有过多细节的图像,处理效果一般不好。
中值滤波器根据器计算方法,可以称为非线性滤波器中的排序统计滤波器,它不是简单的加权求和,而是先把邻域像素按灰度级进行排序,然后再选择该组的中值作为模板输出结果。
由于中值滤波在算法设计上使与周围像素灰度级相差较大的点处理后能和周围的像素值比较接近,因此可以衰减随机噪声,尤其是脉冲噪声等。
但由于不是简单的取均值,因此产生的模糊要少得多。
图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,[22]);
subplot(1,2,1),imshow(Y),title('原图')
subplot(1,2,2),imshow(H),title('中值滤波后的效果图');
figure,imshow(newGrayPic);
处理结果及分析:
当选2×2时,处理结果为:
图2.2中值滤波2*2效果图
当选3×3时,处理结果为:
图2.3中值滤波3*3效果图
当选7×7时,处理结果为:
图2.4中值滤波7*7效果图
由上可知,经过中值滤波后图像变得更加清晰可见。
并且函数medfilt2中,M*M选取并不是越大越好,也不是越小越好,从而要选取适当的值。
用matlab编写的中值滤波算法程序:
clear;clc;close;
X=imread('E:
\学习\图像处理与机器视觉\图像滤波.bmp');
Y=uint8(X);%把x转换成8位的无符号整形数据。
U1=imnoise(Y,'salt&pepper',0.02);
subplot(1,2,1),imshow(uint8(U1)),title('原图');
p=size(U1);
x1=double(U1);
x2=x1;
n=3;%模板n*n.
fori=1:
p
(1)-n+1
forj=1:
p
(2)-n+1
c=x1(i:
i+(n-1),j:
j+(n-1));%取出x1中从(i,j)开始的n行n列元素,即模板(n×n的)
e=c(1,:
);%是c矩阵的第一行
foru=2:
n
e=[e,c(u,:
)];%将c矩阵变为一个行矩阵
end
mm=median(e);%mm是中值
x2(i+(n-1)/2,j+(n-1)/2)=mm;%将模板各元素的中值赋给模板中心位置的元素
end
end
%未被赋值的元素取原值
D=uint8(x2);
subplot(1,2,2),imshow(uint8(D)),title('中值滤波后的效果图');
处理结果如下图:
图2.5中值滤波处理效果图
从处理结果看出,用matlab函数medfilt2和自己编写的程序,能达到同样的
效果。
作业二:
图像变换
1、对图像(见图)用FFT算法从空域变换到频域;显示幅度频谱,使图像能量中心移到几何中心。
将图像旋转450,再显示幅度频谱。
图3图像变换
算法描述:
傅立叶变换是数字图像处理中应用最广的一种变换,其中图像增强、图像复原和图像分析与描述等,每一类处理方法都要用到图像变换,尤其是图像的傅立叶变换。
图像的频域增强,常用的图像增强技术可分为基于空域和基于变换域的两类方法。
最常用的变换域是频域空间。
在频域空间,图像的信息表现为不同频率分量的组合。
如果能让某个范围内的分量或某些频率的分量受到抑制而让其他分量不受影响,就可以改变输出图像的频率分布,达到不同的增强目的。
频域增强的工作流程:
频域空间的增强方法对应的三个步骤:
(1)将图像f(x,y)从图像空间转换到频域空间,得到F(u,v);
(2)在频域空间中通过不同的滤波函数H(u,v)对图像进行不同的增强,得到G(u,v)(注:
不同的滤波器滤除的频率和保留的频率不同,因而可获得不同的增强效果);
(3)将增强后的图像再从频域空间转换到图像空间,得到图像g(x,y)。
将图像由空域转换到频域,理论基础是傅里叶变换,要在数字图像处理中应用傅立叶变换,还需要解决两个问题:
一是在数学中进行傅立叶变换的f(x)为连续(模拟)信号,而计算机处理的是数字信号(图像数据);二是数学上采用无穷大概念,而计算机只能进行有限次计算。
通常,将受这种限制的傅立叶变换称为离散傅立叶变换(DiscreteFourierTransform,DFT)。
设{f(x)|f(0),f
(1),f
(2),…,f(N-1)}为一维信号f(x)的N个抽样,其离散傅立叶变换对为:
式中:
x,u=0,1,2,…,N-1。
旋转图像函数imrotate,如J=imrotate(I,45,'bilinear','crop');%双线性插值法旋转图像45度,并剪切图像和原图像大小一致。
源程序:
clc;clear;close;
[I,map]=imread('E:
\学习\图像处理与机器视觉\图像变换.bmp');
subplot(2,2,1),imshow(I),title('图像变换原图');
J1=imrotate(I,45,'bilinear','crop');%双线性插值法旋转图像60度,并剪切图像和原图像大小一致
subplot(2,2,3),imshow(J1),title('旋转图像45度');
J2=fft2(I);%fft2函数用于数字图像的二维傅立叶变换
K1=fftshift(abs(J2));%频谱中心化
RR1=real(K1);%取傅立叶变换的实部
II1=imag(K1);%取傅立叶变换的虚部
A1=sqrt(RR1.^2+II1.^2);%计算频谱幅值
A1=(A1-min(min(A1)))/(max(max(A1))-min(min(A1)))*225;%归一化,max(a)求矩阵a中列最大,max(max(a))表示求a中最大元素。
subplot(2,2,2),imshow(A1),title('原图像的幅度频谱');%显示原图像的频谱
J3=fft2(J1);%fft2函数用于数字图像的二维傅立叶变换
K2=fftshift(abs(J3));%频谱中心化
RR2=real(K2);%取傅立叶变换的实部
II2=imag(K2);%取傅立叶变换的虚部
A2=sqrt(RR2.^2+II2.^2);%计算频谱幅值
A2=(A2-min(min(A2)))/(max(max(A2))-min(min(A2)))*225;%归一化
subplot(2,2,4),imshow(A2),title('旋转后图像的幅度频谱');%显示旋转图像的频谱
处理结果及分析:
图3.1图像变换处理对比图
由旋转不变性可知,如果时域中离散函数旋转45角度,则在变换域中该离散傅立叶变换函数也将旋转同样的角度。
2(选作)、已知图像为
求其2维FFT变换F(u,v)。
源程序:
clc;clear;close;
f=[0102
0304
0506
0708];
subplot(1,2,1),imshow(f,[0255]),title('图像变换原图');
F=fft2(f);
%F=fftshift(log(1+abs(F)));%频谱中心化
subplot(1,2,2),imshow(F,[0255]),title('傅里叶变换后图像');
处理结果及分析:
图3.2图像变换作业二结果图
作业三:
图像分割
1、采用合适方法对图像(见图4)进行边缘检测。
图4边缘检测
算法描述:
边缘检测是从图像中抽取边缘集合。
基本步骤:
去噪增强检测定位
去噪:
滤波器降低噪声,但也导致边缘强度损失。
增强:
突显邻域中灰度有显著变化的点,一般通过梯度幅值完成。
检测:
梯度幅值较大的并不全是边缘点,确定哪些是边缘点,如梯度幅值阈值判定。
定位:
精确确定边缘的位置及方向,可在子像素分辨率上来估计。
采用的检测方法有,Roberts算子定位比较精确,但由于不包括平滑,所以对于噪声比较敏感。
Prewitt算子和Sobel算子都是一阶的微分算子,而前者是平均滤波,后者是加权平均滤波且检测的图像边缘可能大于2个像素。
这两者对灰度渐变低噪声的图像有较好的检测效果。
实际工程中,Sobel算子应用比较广泛。
LOG滤波器方法通过检测二阶导数过零点来判断边缘点。
LOG滤波器中的σ正比于低通滤波器的宽度,σ越大,平滑作用越显著,去除噪声越好,但图像的细节也损失越大,会出现边缘间断现象;σ越小,平滑作用越轻,会出现假边缘,所以要求适当选取σ。
Canny方法是一阶传统微分中检测阶跃型边缘效果最好的算子之一。
它比Roberts算子、Sobel算子和Prewitt算子的去噪能力都要强,能真正检测到弱边缘。
缺陷:
采用固定的门限,缺乏对不同图像的自适应性,自动化程度低。
源程序:
clc;clear;close;
[Y,map]=imread('E:
\学习\图像处理与机器视觉\边缘检测.bmp');
subplot(2,3,1),imshow(Y),title('边缘检测原图');
BY_roberts=edge(Y,'roberts');
subplot(2,3,2),imshow(BY_roberts),title('roberts检测');
BY_sobel=edge(Y,'sobel');
subplot(2,3,3),imshow(BY_sobel),title('sobel检测');
BY_prewitt=edge(Y,'prewitt');
subplot(2,3,4),imshow(BY_prewitt),title('prewitt检测');
BY_laplace=edge(Y,'log');
subplot(2,3,5),imshow(BY_laplace),title('laplace检测');
BY_canny=edge(Y,'canny');
subplot(2,3,6),imshow(BY_canny),title('canny检测');
处理结果及分析:
图4.1边缘检测结果
2(选作)、采用判断分析法对图像(图5)进行分割处理。
图5图像分割
算法描述:
判别分析法确定最佳阈值的准则,是使进行阈值处理后分离的像素类之间的类间方差最大。
设图像总像素数为N,灰度值为i的像素数为Ni,则至灰度级K的灰度分布的0阶矩及1阶矩分别定义为
0阶矩:
1阶矩:
当K=L-1时,ω(L-1)=1;μ(L-1)=μT,μT称为图像的平均灰度。
归一化直方图为:
源程序:
clc;clear;close;
Y=imread('E:
\学习\图像处理与机器视觉\图像分割.bmp');
H=graythresh(Y);%使用最大类间方差法找到图片的一个合适阈值,供函数im2bw用
H1=im2bw(Y,H);
subplot(1,2,1),imshow(Y),title('图像分割原图');
subplot(1,2,2),imshow(H1),title('判别分析法分割后的图像');
处理结果与分析:
图5.1图像分割处理结果
由图5.1可知,经过判别分析法分割后可以看到图形的大概轮廓。
作业四:
图像特征提取
1、采用图像分块处理的方法提取图像不同区域的特征值。
图6图像特征提取
算法描述:
图像分块就是将一个m×n的图像矩阵I分成p×q图像分块矩阵。
即
其中每个子图像
是
矩阵。
需要指出的是,在进行矩阵分块时,必须使子图像的大小与原始图像划分的块数
满足
,才可缓解小样本问题。
把所有训练图像样本的子图像看作训练样本图像向量,再对之施行LDA方法。
训练样本图像
的
分块矩阵表示为
则所有训练图像样本的子图像矩阵的类间散布矩阵为
所有训练图像样本的子图像矩阵的类内散布矩阵为
其后的任务与LDA类似,就是找出
的前r个最大特征值所对应的特征向量
设投影矩阵
则训练样本
的特征矩阵为
源程序:
clc;clear;close;
I=imread('E:
\学习\图像处理与机器视觉\图像特征.bmp');
rs=size(I,1);% 行数
cs=size(I,2);% 列数
% ch为列间隔 cw为行间隔
% numr为间隔块个数 numc为间隔块个数
ch=41;
cw=40;
numr=round(rs/ch);
numc=round(cs/cw);
% 区域块分割
t1=(0:
numr-1)*ch+1;
t2=(1:
numr)*ch;
t3=(0:
numc-1)*cw+1;
t4=(1:
numc)*cw;
figure;
imshow(I);
holdon;
fori=1:
numr
forj=1:
numc
x=t1(i):
t2(i);
y=t3(j):
t4(j);
% 绘制矩形块
rectangle('Position',[t3(j)t1(i)length(x)length(y)],...
'EdgeColor','r','LineWidth',3);
end
end
处理结果及分析:
图6.1图像特征提取结果图
由图6.1可知,本文的提出的方法优于Fisherfaces方法。
其原因是:
通过对原始数字图像分块,再利用LDA抽取到每一子块的局部特征,这些局部特征与直接将LDA用于原始图像抽取的全局特征相比对模式更具有鉴别性,尤其是对光照变化较大的图像效果更好。
不过在特征提取时所花费的时间多于Fisherfaces方法。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图像 处理 机器 视觉