对图像进行边缘提取,然后进行霍夫检测圆

  • 虫虫123456
    了解作者
  • matlab
    开发工具
  • 30.2KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 5 积分
    下载积分
  • 0
    下载次数
  • 2022-06-27 23:14
    上传日期
一种改进的快速边缘模糊检测算法,里面包含检测的改进方法。
azhMo64ixrIMRY.rar
  • getcircle
  • bw.bmp
    8.1KB
  • hough_circle.m
    2.9KB
  • Thumbs.db
    4.5KB
  • eye0.bmp
    192.4KB
  • www.pudn.com.txt
    218B
内容介绍
clc close all clear all O_eye=imread('eye0.bmp'); bw1=imread('bw.bmp'); figure(2) imshow(bw1) x0=171; y0=100.5; r0=28.5; rr=20; % function [x,y,r,count]=houghcircle(bw1,x0,y0,r0,rr) % bw1为输入的需检测的圆图象的矩阵,[x0,y0]为估算的定位中心的位置,r0为估算的定位的半径,rr是检测范围的外扩值 [m,n]=size(bw1); %确定搜索范围,搜索的矩形的四个定点为[e3,e1],[e3,e2],[e4,e1],[e4,e2] e1=floor(x0-r0)-rr; if e1<1 e1=1; end e2=ceil(x0+r0)+rr; if e2>n e2=n; end e3=floor(y0-r0)-rr; if e3<1 e3=1; end e4=ceil(y0+r0)+rr; if e4>m e4=m; end %hough变换求瞳孔中心 flag=1;count=0; %flag为循环控制变量,count记录落在所得圆上的点 while(flag) flag=0; bw2=zeros(m,n); %设0矩阵bw2,以bw2为变换空间 for j=e1:e2 for i=e3:e4 if bw1(i,j)==1 %在搜索范围内找到一个值为1点 k=(j-x0)^2+(i-y0)^2-r0^2; if k>-1600&k<1600 %这个点在有效区内 real=j-x0;imag=y0-i; theta=atan2(imag,real); %theta为bw1(i,j)相对于(x0,y0)的圆心角 ii=round(i+r0*sin(theta));jj=round(j-r0*cos(theta)); %bw2(ii,jj)为以bw1(i,j)的确定的圆心的位置 bw2(ii,jj)=bw2(ii,jj)+1; end end end end a=max(bw2); %bw2中的各列最大值组成向量a count1=max(a); %count1为a中的最大值 if count1>=count %当求出的值较大时,用新值代替原来的count值,并将r减1再求一次 count=count1; r0=r0-1; bw3=bw2; flag=1; end end [y,x]=find(bw3==count); %最大值的位置坐标 n=length(y); if n>1 %最大值的位置坐标不唯一时取所有位置的算术平均值 yy=sum(y)/n; xx=sum(x)/n; y=yy; x=xx; end r=r0+1; %定位的半径 angle_eye=linspace(0,2*pi,1000); Gray_eye=rgb2gray(O_eye); for ai=1:length(angle_eye) y1=fix(x+(r)*cos(ai)); x1=fix(y+(r)*sin(ai)); Gray_eye(x1,y1)=255; end figure(9) imshow(uint8(Gray_eye))
评论
    相关推荐