我自己看了一哈 原理,编了个程序,可以运行,但是结果和bwarea的结果不一样啊~~求求求
function square(a)
[m,n]=size(a);
i=zeros(m+2,n+2);
for x=1:1:m
for y=1:1:n
for w=1:1:m+2
for v=1:1:n+2
if x==w-1&y==v-1
i(w,v)=i(w,v)+a(x,y); %在所给图像的边缘加一圈‘0’
else i(w,v)=i(w,v);
end
end
end
end
end
sum1=0;
sum2=0;
sum3=0;
sum4=0;
sum5=0;
sum6=0;
for x=1:1:m+1
for y=1:1:n+1
if [i(x,y) i(x,y+1);i(x+1,y) i(x+1,y+1)]==[0 0;0 0] %掩膜的类型所对应的像素值。
这是按那本书上写的bwarea的算法写的,就是这本matlab实战应用!骗人!!
sum1=sum1;
else if [i(x,y) i(x,y+1);i(x+1,y) i(x+1,y+1)]==[1 1;1 1]
sum2=sum2+1;
else if [i(x,y) i(x,y+1);i(x+1,y) i(x+1,y+1)]==[1 0;0 0]|[0 1;0 0]|[0 0;1 0]|[0 0;0 1]
sum3=sum3+1/4;
else if [i(x,y) i(x,y+1);i(x+1,y) i(x+1,y+1)]==[0 1;1 1]|[1 0;1 1]|[1 1;0 1]|[1 1;1 0]
sum4=sum4+7/8;
else if [i(x,y) i(x,y+1);i(x+1,y) i(x+1,y+1)]==[1 1;0 0]|[0 0;1 1]|[1 0;1 0]|[0 1;0 1]
sum5=sum5+1/2;
else if [i(x,y) i(x,y+1);i(x+1,y) i(x+1,y+1)]==[1 0;0 1]|[0 1;1 0]
sum6=sum6+3/4;
end
end
end
end
end
end
end
end
sum=sum1+sum2+sum3+sum4+sum5+sum6;
disp('square=')
disp(sum)
end