《机器视觉与图像处理(8页).doc》由会员分享,可在线阅读,更多相关《机器视觉与图像处理(8页).doc(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-机器视觉与图像处理-第 8 页机器视觉与图像处理课程大作业专业:自动化班级: 1402学号:201423020230姓名: 杨坤翔大作业说明1. 要求每位同学独立完成课程大作业;2. 鼓励组成课程小组,集体讨论研究,课程总结内说明小组成员;3. 允许借鉴网络、书籍上相关代码资源,但一定要切合题目内容;4. 根据题目要求,原理解释部分若需要公式,使用公式编辑器编辑;代码部分保证完整、可运行;结果部分黏贴原图;5. 作业鼓励将个人调试经验、学习心得等个性化内容总结。题目1:高斯滤波器与拉普拉斯滤波器1.1 给出高斯滤波器与拉普拉斯滤波器数学表达式; (1)给出高斯滤波器数学表达式: (2)给出拉
2、普拉斯滤波器数学表达式:1.2 使用Matlab绘制出高斯滤波器与拉普拉斯滤波器图形表达;图形表达:alf=3; n=7;%定义模板大小 n1=floor(n+1)/2);%确定中心 for i=1:n a(i)= exp(-(i-n1).2)/(2*alf2); for j=1:n b(i,j) =exp(-(i-n1)2+(j-n1)2)/(4*alf)/(4*pi*alf); end end subplot(121),plot(a),title(一维高斯函数 ) subplot(122),surf(b),title(二维高斯函数 ) 1.3 分别使用高斯滤波器和拉普拉斯滤波器对下列图片进
3、行卷积运算操作,是否有快速方法进行拉普拉斯滤波器卷积运算?(1)高斯滤波:I = imread( C:Usersdell-5000Pictureslovewallpaper); H=rgb2gray(I);Img = double(H); alf=3; n=10; n1=floor(n+1)/2); for i=1:n for j=1:n b(i,j) =exp(-(i-n1)2+(j-n1)2)/(4*alf)/(4*pi*alf); end end Img_n = uint8(conv2(Img,b,same); K=uint8(imfilter(Img,b); Img_n2=uint8(
4、imfilter(Img,b,conv); J=(Img_n2)-Img_n; flag=mean(J(:) subplot(131),imshow(I);title(原图) subplot(132),imshow(Img_n);title(卷积运算图) subplot(133),imshow(K);title(相关运算图)(2)拉普拉斯滤波:h1=fspecial(laplacian);A=imread( C:Usersdell-5000Pictureslovewallpaper );K=rgb2gray(A);B=imfilter(K,h1);subplot(131),imshow(A);
5、title(原图)subplot(132),imshow(K);title(灰度图) subplot(133),imshow(B);title(相关运算图) 题目2:使用Canny算子边缘检测2.1 列写出Canny算子检测边缘算法原理;(1)图象边缘检测必须满足两个条件:一能有效地抑制噪声;二必须尽量精确确定边缘的位置。(2)根据对信噪比与定位乘积进行测度,得到最优化逼近算子。这就是Canny边缘检测算子。(3)类似与Marr(LoG)边缘检测方法,也属于先平滑后求导数的方法。 (4)Canny边缘检测算法: step1:用高斯滤波器平滑图象; step2:用一阶偏导的有限差分来计算梯度的幅
6、值和方向; step3:对梯度幅值进行非极大值抑制; step4:用双阈值算法检测和连接边缘。2.2 使用Canny算法对下图进行边缘检测,并对比其他边缘检测算法,如Sobel, Roberts等;1.canny 算子:I=imread(dazuoye02.jpg);I=rgb2gray(I);imshow(I);title(原图)BW1=edge(I,canny);figure,imshow(BW1);title(matlab canny检测) 2.Roberts 算子:I=imread(dazuoye02.jpg);K=rgb2gray(I);BW1=1,0;0,-1;BW2=0,1;-1
7、,0;J1=filter2(BW1,K);J2=filter2(BW2,K);K1=double(J1);K2=double(J2);M=(abs(K1) +abs(K2);figure,imshow(uint8(M)title(matlab Robert检测)算子:I=imread(dazuoye02.jpg);K=rgb2gray(I);BW1=-1,-2,-1;0,0,0;1,2,1;BW2=-1,0,1;-2,0,2;-1,0,1;J1=filter2(BW1,K);J2=filter2(BW2,K);K1=double(J1);K2=double(J2);M=(abs(K1) +ab
8、s(K2);figure,imshow(uint8(M)title(matlab sobel检测) 结论:Roberts算子:边缘定位准,但是对噪声敏感。适用于边缘明显且噪声较少的图像分割。Roberts边缘检测算子是一种利用局部差分算子寻找边缘的算子,Robert算子图像处理后结果边缘不是很平滑。经分析,由于Robert算子通常会在图像边缘附近的区域内产生较宽的响应,故采用上述算子检测的边缘图像常需做细化处理,边缘定位的精度不是很高。Sobel算子:其主要用于边缘检测,在技术上它是以离散型的差分算子,用来运算图像亮度函数的梯度的近似值,缺点是Sobel算子并没有将图像的主题与背景严格地区分开
9、来,换言之就是Sobel算子并没有基于图像灰度进行处理,由于Sobel算子并没有严格地模拟人的视觉生理特征,所以提取的图像轮廓有时并不能令人满意Canny算子:该算子功能比前面几种都要好,但是它实现起来较为麻烦,Canny算子是一个具有滤波,增强,检测的多阶段的优化算子,在进行处理前,Canny算子先利用高斯平滑滤波器来平滑图像以除去噪声,Canny分割算法采用一阶偏导的有限差分来计算梯度幅值和方向,在处理过程中,Canny算子还将经过一个非极大值抑制的过程,最后Canny算子还采用两个阈值来连接边缘。题目3 角点与斑点检测3.1 使用Harris算法检测下图中角点(harris算法实现)Ha
10、rris算法:filename,pathname,=uigetfile(dazuoye03.jpg); if ischar(filename) return end str=pathname filename; pic=imread(str); if length(size(pic)=3 img=rgb2gray(pic); end m,n=size(img); tmp=zeros(m+2,n+2); tmp(2:m+1,2:n+1)=img; Ix=zeros(m+2,n+2); Iy=zeros(m+2,n+2); Ix(:,2:n+1)=tmp(:,3:n+2)-tmp(:,1:n);
11、Iy(2:m+1,:)=tmp(3:m+2,:)-tmp(1:m,:); Ix2=Ix(2:m+1,2:n+1).2; Iy2=Iy(2:m+1,2:n+1).2; Ixy=Ix(2:m+1,2:n+1).*Iy(2:m+1,2:n+1); h=fspecial(gaussian,7 7,2); Ix2=filter2(h,Ix2); Iy2=filter2(h,Iy2); Ixy=filter2(h,Ixy); R=zeros(m,n); for i=1:m for j=1:n M=Ix2(i,j) Ixy(i,j);Ixy(i,j) Iy2(i,j); R(i,j)=det(M)-0.06
12、*(trace(M)2; end end Rmax=max(max(R); loc=; tmp(2:m+1,2:n+1)=R; for i=2:m+1 for j=2:n+1 if tmp(i,j)0.01*Rmax sq=tmp(i-1:i+1,j-1:j+1); sq=reshape(sq,1,9); sq=sq(1:4),sq(6:9); if tmp(i,j)sq loc=loc;j-1,i-1; end end end end X=loc(:,1); Y=loc(:,2); subplot(1,2,1);imshow(pic); subplot(1,2,2);imshow(pic);
13、 hold on plot(X,Y,*); hold off 使用Log算子检测下图中斑点 (Matlab: log_Blob)(1) 构造LoG_Blob函数:(2) 构造draw函数:(3) 算法实现:img=imread(dazuoye04.jpg);imshow(img);pt=LoG_Blob(rgb2gray(img);draw(img,pt,LOG) 个人体会:在做题时,通过查找网上的资料才做出来,我觉得难点在于函数的书写上,函数写出来了,题目就做出来了。题目4 特征点匹配4.1 完成下列两图中的特征点检测与匹配(1)算法实现: i1=imread(dazuoye05.jpg); i2=imread(dazuoye06.jpg); i11=rgb2gray(i1); i22=rgb2gray(i2); imwrite(i11,v1.jpg,quality,80); imwrite(i22,v2.jpg,quality,80); match(v1.jpg,v2.jpg);Finding keypoints. 879 keypoints found. Finding keypoints. 2163 keypoints found. Found 337 matches.(2)算法函数及结果:
限制150内