function [img2b] = img2(img)
%img 为输入的图像,img2b 为输出的去干扰线的2值化轮廓图像
imgg=rgb2gray(img); %灰度图像
imggi=imcomplement(imgg); %反色
%开始查找消除3次强边缘,加强效果
se=strel('square',6); %方形边长6
for i=1:3
imggstrong=edge(imggi,'canny', [0.8 0.9],1); % canny算法查找强边缘
imggstrong=imclose(imggstrong,se); %图像腐蚀膨胀、完善干扰线
imggstrong = immultiply(uint8(imggstrong),255); %二值图像转换为0,255图像
imggi=imsubtract(imggi, imggstrong); %将y从x中减去
end
level=graythresh(imggi); %Otsu法求二值化阈值
imggweak=edge(imggi,'canny', [0.1 0.3],1); % canny算法加强弱边缘
vmax=uint8(max(max(imggi))*level-10); %计算加强倍数
imgedge=imggi+uint8(imggweak)*vmax; %叠加强化边缘
level=graythresh(imgedge); %Otsu法求二值化阈值
img2b=im2bw(imgedge,level); %二值化
img2b=bwmorph(img2b,'spur',inf); %骨架去毛刺
img2b=bwareaopen(img2b,30); %去除聚团灰度值小于30的部分,降噪阈值30可调
%去除黑边
[high2,width2]=size(img2b);
n=1;
for i=1:high2
if sum(img2b(n,:))==0
img2b(n,:)=[];
elseif sum(img2b(n,:))>0
n=n+1;
end;
end;
n=1;
for i=1:width2
if sum(img2b(:,n))==0
img2b(:,n)=[];
elseif sum(img2b(:,n))>0
n=n+1;
end;
end;
img2b=edge(img2b,'canny'); %轮廓线
end