%%%%%%%%%絕緣紙平行豎直測量%%%%%%%
I=imread('C:\Users\weixing\Desktop\17AM\11.10\59.png');
I= imcrop(I,[410 243 55 217]);%分割出第一個溫控器
I=im2bw(I,0.7);%圖像二值化
h=fspecial('gaussian',3,1.8);%sigma=1.8的3*3高斯模板
I=imfilter(I,h);%進行高斯平滑濾波
BW=edge(I,'canny');
%執行Hough變換并顯示Hough矩陣
[H,T,R]=hough(BW);
%在Hough矩陣中尋找前8個大于Hough矩陣中最大值0.3倍的峰值
P=houghpeaks(H,2,'threshold',ceil(0.3*max(H(:))));
x=T(P(:,2));y=R(P(:,1));%由行、列索引轉換成實際坐標
%找到并繪制直線
lines=houghlines(BW,T,R,P,'FillGap',100,'MinLength',20);%合并距離小于5的線段,丟棄所有長度小于7的直線段
for k=1:length(lines)%依次標出各條直線段
xy=[lines(k).point1;lines(k).point2];
end
if (k==2)
%獲得兩條線段端點的坐標
x1y1=[lines(1).point1;lines(1).point2];
x2y2=[lines(2).point1;lines(2).point2];
%判斷絕緣紙是否豎直
if(abs(x1y1(1,1)-x1y1(2,1))<=10&&abs(x2y2(1,1)-x2y2(2,1))<=10)
jyz1=1;
else
jyz1=0;
end
else
jyz1=0;
end
%%%%%%%%%%%管腳長度和絕緣紙長度測量%%%%%%%%%%%
I=imread('C:\Users\weixing\Desktop\17AM\11.10\59.png');
I1= imcrop(I,[360 190 150 290]);
A1=zeros(8,2);
B1=zeros(2,2);
i=1;
x=46;
for y=1:80
if(I1(y,x)>=I1(y+1,x))
m=I1(y,x)-I1(y+1,x);
else
m=I1(y+1,x)-I1(y,x);
end
if(m>25)
B1(1,1)=x;
B1(1,2)=y;
if( abs(B1(2,2)-B1(1,2))>10)
B1(2,1)=x;
B1(2,2)=y;
A1(i,1)=x;
A1(i,2)=y;
i=i+1;
end
end
end
A1(i,1)=x;
A1(i,2)=A1(i-1,2)+167;
i=i+1;
for y=250:290
if(I1(y,x)>=I1(y+1,x))
m=I1(y,x)-I1(y+1,x);
else
m=I1(y+1,x)-I1(y,x);
end
if(m>25)
B1(1,1)=x;
B1(1,2)=y;
if(abs(B1(2,2)-B1(1,2))>10)
B1(2,1)=x;
B1(2,2)=y;
A1(i,1)=x;
A1(i,2)=y;
i=i+1;
end
end
end
x=116;
for y=1:60
if(I1(y,x)>=I1(y+1,x))
m=I1(y,x)-I1(y+1,x);
else
m=I1(y+1,x)-I1(y,x);
end
if(m>25)
B1(1,1)=x;
B1(1,2)=y;
if( abs(B1(2,2)-B1(1,2))>10)
B1(2,1)=x;
B1(2,2)=y;
A1(i,1)=x;
A1(i,2)=y;
i=i+1;
end
end
end
for y=250:290
if(I1(y,x)>=I1(y+1,x))
m=I1(y,x)-I1(y+1,x);
else
m=I1(y+1,x)-I1(y,x);
end
if(m>25)
B1(1,1)=x;
B1(1,2)=y;
if(abs(B1(2,2)-B1(1,2))>10)
B1(2,1)=x;
B1(2,2)=y;
A1(i,1)=x;
A1(i,2)=y;
i=i+1;
end
end
end
j=1;
for i=1:8
if(A1(i,1)==46)
j=j+1 ;
end
end
if(abs(A1(1,2)-A1(j,2))<10)
gjcd1=1;
else
gjcd1=0;
end
if(abs(A1(3,2)-A1(2,2))>16&&abs(A1(3,2)-A1(7,2))>16&&abs(A1(4,2)-A1(5,2))>16&&abs(A1(4,2)-A1(8,2))>16)
jyzcd1=1;
else
jyzcd1=0;
end
|