回 帖 发 新 帖 刷新版面

主题:这样的报错是什么原因?请各位大侠帮忙啊

程序如下:
%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%工件检测%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%

clear,close all;
I=imread('a88.bmp');
%%imshow(I)
%title('原始图像')
%%%%以下是对图像进行预处理%%%%%
I=im2double(I);
h=fspecial('gaussian',7,4);%%%使用高斯掩膜
g=imfilter(I,h,'replicate');
%figure,imshow(g)
%%%以下对平滑后的图像进行阈值处理%%%%%
g=im2bw(g,graythresh(g));%二值变化
%figure,imshow(g);
%title('初处理后的图像');
g=imcomplement(g);%取反
%%%开运算%%%%%
se=strel('disk',5);
fo=imopen(g,se);
%figure,imshow(fo);
%title('基本处理后的图像');

BW1=bwfill(fo,'holes');
%figure,imshow(BW1);
%title('填充后的图像');

%%%%%%%%%%%%%%%%%%%%%%%%
BW2=BW1;
siz=size(g);
row=siz(1);
line=siz(2);
ls=row*line;
 
s=0;
f=0;
h=1;
g=1;
sign=0;%表记号
b=zeros(1,100);%创建数组
d=zeros(1,100);%创建数组
%以下是进行行扫描
for n=1:row  
    for m=1:line
        if (BW2(n,m)==1) & (sign==0)
            sign=1;
            n1=n;
            m1=m;
        elseif (BW2(n,m)==0) & (sign==1)
                sign=0;
                n2=n;
                m2=m;
                c=(m1+m2)/2;
                if(h<=100)
                b(h)=c;
                h=h+1;
                end
        end
    end
end
n1
m1
n2
m2
b
s=median(b)
%以下是进行列扫描
for j=1:line    
    for k=1:row
        if (BW2(k,j)==1) & (sign==0)
            sign=1;
            j1=j;
            k1=k;
        elseif (BW2(k,j)==0) & (sign==1)
                sign=0;
                j2=j;
                k2=k;
           e=(k1+k2)/2;
                if(g<=100)
                d(g)=e;
                g=g+1;
                end
        end
    end
end
j1
k1
j2
k2
d
line
f=median(d)
w=[s f]
n3=int16(s)
m3=int16(f)

%%%对圆心做标记%%%
 
%BW2(m3+1,n3)=0;
%BW2(m3,n3)=0;
%BW2(m3-1,n3)=0;


%figure,imshow(BW2);
%title('显示圆心的图像');
%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%
%%%%以下是求圆的大半径和小半径%%%%%%


mi=m3
sign=0;
for m3=m3:line
if(fo(n3,m3)==1)&(sign==0)
    sign=1;
    m4=m3
    r=m4-mi
elseif(fo(n3,m3)==0)&(sign==1)
    sign=0;
    m5=m3
    R=m5-mi
end
end
L=R-r
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

m6=mi
n7=1;
m7=1;

for n7=1:row
    for m7=1:line
r1=sqrt((n7-s).^2+(m7-f).^2);
if(r1>R-18)
    BW1(n7,m7)=1;
elseif(r1<r+7)
 BW1(n7,m7)=1;
end
    end
end
BW1=imcomplement(BW1);
%figure,imshow(BW1)


%[r,c]=find(bwlabel(BW1)==1);
%rc=[r,c]
S=bwlabel(BW1);
stats=regionprops(S,'MajorAxisLength');
stats(1)
changdu=[stats.MajorAxisLength]


if(changdu>=L/2)
   figure,imshow(I)
title('SORRY,这是不合格工件,您被淘汰了')
else(changdu<L/2)
 figure,imshow(I)
title('OK,这个工件是合格的,您通过了')
end
运行到求大半径和小半径的时候出现下列报错:
??? Error using ==> _colonobj
Function '_colonobj' is not defined for values of class 'int8'.

??? Error using ==> edit
Can't edit the built-in function '_colonobj'.
求各位大侠帮忙啊

回复列表 (共1个回复)

沙发

??? Error using ==> _colonobj
Function '_colonobj' is not defined for values of class 'int16'.

??? Error using ==> edit
Can't edit the built-in function '_colonobj'.

我来回复

您尚未登录,请登录后再回复。点此登录或注册