From 7505ae83d476522b26d89af659638a904af7c97b Mon Sep 17 00:00:00 2001 From: Liu Wenzhuo Date: Tue, 23 May 2017 15:41:42 +0200 Subject: [PATCH] first change --- temp1.py | 194 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 194 insertions(+) create mode 100644 temp1.py diff --git a/temp1.py b/temp1.py new file mode 100644 index 0000000..e9be02e --- /dev/null +++ b/temp1.py @@ -0,0 +1,194 @@ +# -*- coding: utf-8 -*- +""" +Spyder Editor + +This is a temporary script file. +""" +import cv2 +import numpy as np +import matplotlib.pyplot as plt +import math + +img = cv2.imread('piece5.jpeg',0) +#cv2.imshow('image',img) +img=cv2.blur(img,(10,10)) + +edges = cv2.Canny(img,10,20) +#cv2.imshow('Canny',edges) +#cv2.waitKey(0) +#cv2.destroyALLWindows() + +[m,n]=img.shape + +Gx=np.zeros((m-1,n-1)) +Gy=np.zeros((m-1,n-1)) + +G=np.zeros((m-1,n-1)) + +theta=np.zeros((m-1,n-1)) + +#calcul le gradient +for i in range(m-1): + for j in range(n-1): + Gx[i,j]=img[i,j+1]-img[i,j] + Gy[i,j]=img[i+1,j]-img[i,j] + G[i,j]=math.sqrt(Gy[i,j]*Gy[i,j]+Gx[i,j]*Gx[i,j]) + theta[i,j]=math.atan(Gy[i,j]/(Gx[i,j]+0.0001))#direction de gradient + if (G[i,j]<3): + img[i,j]=0 +#cv2.imshow('gra',img) + +#supression des non-max on trouve img2 +#division en 4 directions: +img2=img.copy() +for i in range(1,m-1): + for j in range(1,n-1): + if theta[i,j]>=3/8*math.pi: + theta[i,j]=0 + if (img[i,j]<=img[i+1,j] or img[i,j]<=img[i-1,j]): + img2[i,j]=0 + elif theta[i,j]>=1/8*math.pi: + theta[i,j]=1 + if (img[i,j]<=img[i+1,j+1] or img[i,j]<=img[i-1,j-1]): + img2[i,j]=0 + elif theta[i,j]>=-1/8*math.pi: + theta[i,j]=2 + if (img[i,j]<=img[i,j+1] or img[i,j]<=img[i,j-1]): + img2[i,j]=0 + else: + theta[i,j]=3 + if (img[i,j]<=img[i+1,j-1] or img[i,j]<=img[i-1,j+1]): + img2[i,j]=0 +#cv2.imshow('image',img2) + +#seuillage de contour: +a=30 +b=100 +img3=img2.copy() +img4=img2.copy() +for i in range(0,m-1): + for j in range(0,n-1): + if (G[i,j]<10): + img3[i,j]=0 + #print (G[i,j]) + if (G[i,j]<20): + img4[i,j]=0 + +def findline(img3,img4,m,n,flag): + m1=m+1 + n1=n+1 + while (m!=m1 or n!=n1): + flagg=0 + for i in range (1,4): + if (flagg==1): + break + for j in range(1,4): + if (img3[m-2+i,n-2+j]!=0): + img4[m-2+i,n-2+j]=img3[m-2+i,n-2+j] + m1=m-2+i + n1=n-2+j + flag[m,n]=1 + flagg=1 + m=m1 + n=n1 + +[a,b]=img3.shape +flag=np.zeros((a,b)) +for i in range (2,a-1): + for j in range (2,a-1): + if (img4[i,j]!=0 and flag[i,j]==0): + findline(img3,img4,i,j,flag) + + +for i in range (a): + for j in range (b): + if (img4[i,j]!=0): + img4[i,j]=255 + + + +cv2.circle(edges,(113,114),108,(255,255,255),3) +cv2.imshow('canny',edges) + + + +cv2.waitKey(0) +cv2.destroyAllWindows() + +def find_circle(img,a,b): + + [m,n]=img.shape + + + C_x = 0 + C_y = 0 + R = range(a,b,2) + img5 = img.copy() + test = np.zeros((m,n,len(R))) + for r in range(0,len(R)): + for i in range(0,m): + for j in range(0,n): + if img5[i,j] != 0: + #print(1) + for theta in range(0,360): + C_x = i + int(R[r]*math.sin((theta/180)*math.pi)) + C_y = j + int(R[r]*math.cos((theta/180)*math.pi)) + if (C_x