机器视觉与图像处理(8页).doc
-机器视觉与图像处理-第 8 页机器视觉与图像处理课程大作业专业:自动化班级: 1402学号:201423020230姓名: 杨坤翔大作业说明1. 要求每位同学独立完成课程大作业;2. 鼓励组成课程小组,集体讨论研究,课程总结内说明小组成员;3. 允许借鉴网络、书籍上相关代码资源,但一定要切合题目内容;4. 根据题目要求,原理解释部分若需要公式,使用公式编辑器编辑;代码部分保证完整、可运行;结果部分黏贴原图;5. 作业鼓励将个人调试经验、学习心得等个性化内容总结。题目1:高斯滤波器与拉普拉斯滤波器1.1 给出高斯滤波器与拉普拉斯滤波器数学表达式; (1)给出高斯滤波器数学表达式: (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 分别使用高斯滤波器和拉普拉斯滤波器对下列图片进行卷积运算操作,是否有快速方法进行拉普拉斯滤波器卷积运算?(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(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);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:用一阶偏导的有限差分来计算梯度的幅值和方向; 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,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) +abs(K2);figure,imshow(uint8(M)title('matlab sobel检测') 结论:Roberts算子:边缘定位准,但是对噪声敏感。适用于边缘明显且噪声较少的图像分割。Roberts边缘检测算子是一种利用局部差分算子寻找边缘的算子,Robert算子图像处理后结果边缘不是很平滑。经分析,由于Robert算子通常会在图像边缘附近的区域内产生较宽的响应,故采用上述算子检测的边缘图像常需做细化处理,边缘定位的精度不是很高。Sobel算子:其主要用于边缘检测,在技术上它是以离散型的差分算子,用来运算图像亮度函数的梯度的近似值,缺点是Sobel算子并没有将图像的主题与背景严格地区分开来,换言之就是Sobel算子并没有基于图像灰度进行处理,由于Sobel算子并没有严格地模拟人的视觉生理特征,所以提取的图像轮廓有时并不能令人满意Canny算子:该算子功能比前面几种都要好,但是它实现起来较为麻烦,Canny算子是一个具有滤波,增强,检测的多阶段的优化算子,在进行处理前,Canny算子先利用高斯平滑滤波器来平滑图像以除去噪声,Canny分割算法采用一阶偏导的有限差分来计算梯度幅值和方向,在处理过程中,Canny算子还将经过一个非极大值抑制的过程,最后Canny算子还采用两个阈值来连接边缘。题目3 角点与斑点检测3.1 使用Harris算法检测下图中角点(harris算法实现)Harris算法: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); 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*(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); 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)算法函数及结果: