图像反转:
代码:
I=imread('coins.png');
R=255-I;
subplot(1,2,1);
imshow(I);
title('原图');
subplot(1,2,2);
imshow(R);
title('反转后');
二值图像:
代码:
I=imread('coins.png')
YZmax=max(max(I))
YZmin=min(min(I))
initialYZ=(YZmax+YZmin)/2
flag=1
[m,n]=size(I)
while(flag)
maxg=0
ming=0
maxgsum=0
mingsum=0
for i=1:m
for j=1:n
tmp=I(i,j)
if(tmp>initialYZ)
maxg=maxg+1
maxgsum=maxgsum+double(tmp)
else
ming=ming+1
mingsum=mingsum+double(tmp)
end
end
end
l1=maxgsum/maxg
l2=mingsum/ming
YZtmp=uint8((l1+l2)/2)
if(YZtmp==initialYZ)
flag=0;
else
initialYZ=YZtmp
end
end
newI=im2bw(I,double(initialYZ)/255)
imshow(newI)
8连通域:
代码:
I=imread('coins.png');
I=I>=128;%二值图像
[m n]=size(I);
I=[zeros(m,1) I zeros(m,1)];
I=[zeros(1,n+2);I;zeros(1,n+2)];
top=1;
tail=1;
num=0;%连通域个数
nb=[-1 -1;-1 0;-1 1;0 1;1 1;1 0;1 -1;0 -1];%8个方向
for i=2:m+1
for j=2:n+1
if(I(i,j)==1)
num=num+1;
I(i,j)= mod((i+j),254)+1;%只是想每一块连通域显示不同的颜色
k=1;
p(top,1)=i;
p(top,2)=j;
p(top,3)=k;
top=top+1;
while top~=tail %站内没有东西就代表一个连通域查找结束
top=top-1;
x=p(top,1);