文档介绍:课题:基于机器视觉的零件平面尺寸测量
检测对象:圆和方形零件
圆形度要求:  
直线度要求:
问题1:目前程序能利用hough变换检测圆,以及标记圆心,但是如何才能得到圆心坐标和半径值呢?
程序:
%主程序如下:
function[I2,center]=FindCircle(I0)    %函数功能
close all                %清除内存
I0=imread('');   %读取图像,实验时为一圆形硬币
I=uint8(I0)
figure,imshow(I)
level = graythresh(I);         %自动阈值二值化
BW = im2bw(I,level);
figure,imshow(BW);
P=3000;           %除去小于一定面积的指定区域
BW2 = bwareaopen(BW,P);
figure,imshow(BW2);
BW3 = bwmorph(BW2,'dilate');  %图像形态学操作
figure,imshow(BW3);
BW4 = bwmorph(BW3,'remove');
figure, imshow(BW4);
[I2,center]=Hughcir(BW4);   %调用Hughcir(img)函数
figure,imshow(I2);
%调用函数如下:
function[I2,center]=Hughcir(I)
[r c]=size(I);
%defining max &min values for radius
rmax=272;
rmin=271;
PL=zeros(r,c,rmax-rmin+1);
for rad=rmin:rmax
   
    k=1;
   
    % creating a circle for given radius
    for theta=1:360
        x=rad*cosd(theta);
        y=rad*sind(theta);
        X(k)=floor(x+.5);
        Y(k)=floor(y+.5);
        k=k+1;
    end
   
    for i=1:3:r
        for j=1:3:c
            
            if(I(i,j)==1)
                Xi=X+i;
                Yj=Y+j;
               
                index=find((Xi>=rad)&(Yj>=rad)&(Xi<=r-rad)&(Yj<=c-rad));
               
                [rr cc]=size(index);
                P1=logical(zeros(r,c));   
                for l=1:cc
                    P