声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2688|回复: 2

[模式识别] 求关于椭圆检测的程序

[复制链接]
发表于 2008-5-14 16:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
请教
谁有检测椭圆的程序。
具体说来就是:在一幅图像中,有一幅已经边缘检测好的图像。首先要验证图像中存在椭圆,(这个椭圆不一定是标准椭圆!)其次,确定椭圆的中心,长半轴,短半轴,(倾斜角度)。

[ 本帖最后由 eight 于 2008-5-14 17:06 编辑 ]
回复
分享到:

使用道具 举报

发表于 2008-5-21 10:58 | 显示全部楼层
hough变换检测椭圆的MATLAB程序

  1. [row col]=size(fedge);
  2. minofa=a;
  3. maxofa=round(row/2);
  4. minofy0=round(col/2)-30;
  5. maxofy0=round(col/2)+30;
  6. minofb=round(col/2)-60;
  7. maxofb=round(col/2);
  8. maxofx=round(row/2);
  9. scalor=4;
  10. H=zeros(floor((maxofa-minofa)/scalor)+1,floor((maxofa-minofa)/scalor)+1,...
  11. floor((maxofy0-minofy0)/scalor)+1,floor((maxofb-minofb)/scalor)+1);
  12. for x=1:maxofx
  13.    for y=1:col
  14.      temp=fedge(x,y);
  15.        if temp==255
  16.          for a=minofa:scalor:maxofa
  17.            for x0=a:scalor:maxofa
  18.              for b=minofb:scalor:maxofb
  19.                for y0=minofy0:scalor:maxofy0
  20.                   temp=((y-y0)/b)^2+((x-x0)/a)^2;
  21.                     if abs(temp-1)<=0.01
  22.                          xtemp=floor((x0-minofa)/scalor)+1;
  23.                          atemp=floor((a-minofa)/scalor)+1;
  24.                          ytemp=floor((y0-minofy0)/scalor)+1;
  25.                          btemp=floor((b-minofb)/scalor)+1;
  26.                          H(xtemp,atemp,ytemp,btemp)=H(xtemp,atemp,ytemp,btemp)+1;
  27.                      end
  28.                 end
  29.               end
  30.             end
  31.           end
  32.         end
  33.    end
  34. end

  35. maxofH=max(max(max(max(H))));
  36. for i=1:floor((maxofa-minofa)/scalor)+1
  37.     for j=1:floor((maxofa-minofa)/scalor)+1
  38.         for m=1:floor((maxofy0-minofy0)/scalor)+1
  39.            for n=1:floor((maxofb-minofb)/scalor)+1
  40.                  temp=H(i,j,m,n);
  41.                    if temp==maxofH
  42.                        xtemp=i;
  43.                        atemp=j;
  44.                        ytemp=m;
  45.                        btemp=n;
  46.                        break;
  47.                     end
  48.             end
  49.          end
  50.      end
  51. end

  52. x0=(xtemp-1)*scalor+minofa;
  53. a=(atemp-1)*scalor+minofa;
  54. y0=(ytemp-1)*scalor+minofy0;
  55. b=(btemp-1)*scalor+minofb;
  56. figure;
  57. imshow(fedge,[]);
  58. hold on;
  59. plot(y0,x0,'r+');
  60. t=0:pi/180:2*pi;
  61. plot(y0+b*sin(t),x0+a*cos(t),'r-');
  62. hold off;
复制代码


看看这个好不好使
发表于 2009-3-10 11:06 | 显示全部楼层
请问下a是什么?
fedge是什么?正好要用到这个程序。多谢了
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-23 19:03 , Processed in 0.140980 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表