def getMergedFragment(A, B, startA, endA, startB, endB, flag): # print "WE ARE HERE" # print "startA = ",startA,"endA = ",endA,"startB = ",startB,"endB = ",endB print "\nIMAGES IN A = ", len(A.images) print "\nIMAGES IN B = ", len(B.images) T = getTransformationMatirxFromFragment(B, A, startB, endB, startA, endA, config.FRAGMENT) if (T is None): return None # print T dummy1, sizeA, dummy2 = A.points.shape dummy1, sizeB, dummy2 = B.points.shape if (flag == config.ENHANCEMODE): startA, endA, startB, endB = findProperStartAndEndPoint( A, B, startA, endA, startB, endB, T) Xnumpy = np.empty([1, sizeA + sizeB + 2, 2], np.int) X = Xnumpy[0] contourA = A.points[0] contourB = B.points[0] j = 0 if (endA > startA and endB > startB): # print "FIRST CASE" for i in range(0, startA + 1): X[j] = contourA[i] j = j + 1 for i in range(startB - 1, -1, -1): P = getTransformedPoint(T, contourB[i]) X[j] = P j = j + 1 for i in range(sizeB - 1, endB - 1, -1): P = getTransformedPoint(T, contourB[i]) X[j] = P j = j + 1 for i in range(endA + 1, sizeA): X[j] = contourA[i] j = j + 1 if (endA > startA and endB < startB): # print "2nd CASE" for i in range(0, startA): X[j] = contourA[i] j = j + 1 for i in range(startB, sizeB): P = getTransformedPoint(T, contourB[i]) X[j] = P j = j + 1 for i in range(0, endB): P = getTransformedPoint(T, contourB[i]) X[j] = P j = j + 1 for i in range(endA, sizeA): X[j] = contourA[i] j = j + 1 if (endA < startA and endB > startB): # print "3rd CASE" for i in range(0, endA + 1): X[j] = contourA[i] j = j + 1 for i in range(endB + 1, sizeB): P = getTransformedPoint(T, contourB[i]) X[j] = P j = j + 1 for i in range(0, startB): P = getTransformedPoint(T, contourB[i]) X[j] = P j = j + 1 for i in range(startA, sizeA): X[j] = contourA[i] j = j + 1 if (endA < startA and endB < startB): # print "4th CASE" for i in range(0, endA): X[j] = contourA[i] j = j + 1 for i in range(endB - 1, -1, -1): P = getTransformedPoint(T, contourB[i]) X[j] = P j = j + 1 for i in range(sizeB - 1, startB, -1): P = getTransformedPoint(T, contourB[i]) X[j] = P j = j + 1 for i in range(startA, sizeA): X[j] = contourA[i] j = j + 1 # now j is the number of points on the new contour F = Fragment() F.points = np.empty([1, j, 2], np.int) for i in range(0, j): F.points[0][i] = X[i] F.images = [] for i in range(0, len(A.images)): image = Image() image.name = A.images[i].name image.transform_matrix = A.images[i].transform_matrix print "\nMatrix ", i, " (A)", "\n" print image.transform_matrix F.images.append(image) for i in range(0, len(B.images)): image = Image() image.name = B.images[i].name image.transform_matrix = T * (B.images[i].transform_matrix) print "\nMatrix ", i, " (B)", "\n" print image.transform_matrix F.images.append(image) print "\nIMAGES IN F = ", len(F.images) return F
def getMergedFragment(A,B,startA,endA,startB,endB,flag): # print "WE ARE HERE" # print "startA = ",startA,"endA = ",endA,"startB = ",startB,"endB = ",endB print "\nIMAGES IN A = ",len(A.images) print "\nIMAGES IN B = ",len(B.images) T = getTransformationMatirxFromFragment(B,A,startB,endB,startA,endA,config.FRAGMENT) if(T is None): return None # print T dummy1,sizeA,dummy2 = A.points.shape dummy1,sizeB,dummy2 = B.points.shape if(flag == config.ENHANCEMODE): startA,endA,startB,endB = findProperStartAndEndPoint(A,B,startA,endA,startB,endB,T) Xnumpy = np.empty([1,sizeA+sizeB+2,2],np.int) X = Xnumpy[0] contourA = A.points[0] contourB = B.points[0] j = 0 if(endA > startA and endB > startB): # print "FIRST CASE" for i in range(0,startA+1): X[j] = contourA[i] j = j+1 for i in range(startB-1,-1,-1): P = getTransformedPoint(T,contourB[i]) X[j] = P j = j + 1 for i in range(sizeB-1,endB-1,-1): P = getTransformedPoint(T,contourB[i]) X[j] = P j = j + 1 for i in range(endA+1,sizeA): X[j] = contourA[i] j = j+1 if(endA > startA and endB < startB): # print "2nd CASE" for i in range(0,startA): X[j] = contourA[i] j = j+1 for i in range(startB,sizeB): P = getTransformedPoint(T,contourB[i]) X[j] = P j = j + 1 for i in range(0,endB): P = getTransformedPoint(T,contourB[i]) X[j] = P j = j + 1 for i in range(endA,sizeA): X[j] = contourA[i] j = j+1 if(endA < startA and endB > startB): # print "3rd CASE" for i in range(0,endA+1): X[j] = contourA[i] j = j+1 for i in range(endB+1,sizeB): P = getTransformedPoint(T,contourB[i]) X[j] = P j = j + 1 for i in range(0,startB): P = getTransformedPoint(T,contourB[i]) X[j] = P j = j + 1 for i in range(startA,sizeA): X[j] = contourA[i] j = j+1 if(endA < startA and endB < startB): # print "4th CASE" for i in range(0,endA): X[j] = contourA[i] j = j+1 for i in range(endB-1,-1,-1): P = getTransformedPoint(T,contourB[i]) X[j] = P j = j + 1 for i in range(sizeB-1,startB,-1): P = getTransformedPoint(T,contourB[i]) X[j] = P j = j + 1 for i in range(startA,sizeA): X[j] = contourA[i] j = j+1 # now j is the number of points on the new contour F = Fragment() F.points = np.empty([1,j,2],np.int) for i in range(0,j): F.points[0][i] = X[i] F.images = [] for i in range(0,len(A.images)): image = Image() image.name = A.images[i].name image.transform_matrix = A.images[i].transform_matrix print "\nMatrix ",i," (A)","\n" print image.transform_matrix F.images.append(image) for i in range(0,len(B.images)): image = Image() image.name = B.images[i].name image.transform_matrix = T * ( B.images[i].transform_matrix ) print "\nMatrix ",i," (B)","\n" print image.transform_matrix F.images.append(image) print "\nIMAGES IN F = ",len(F.images) return F
def CompareContour(F1,F2): global sequence1,sequence2,scoreTable,traceBack,traceBack1 sequence1=F1.turning_angles sequence2=F2.turning_angles[::-1] print(sequence1) print(sequence2) # print("sequence1") # print(sequence1) # print("sequence2") # print(sequence2) l1=len(sequence1)+1 l2=len(sequence2)+1 initialize(l1,l2) fillIn(l1,l2) start_end=getTraceback(F1.points,F2.points[::-1],F1.turning_angles,F2.turning_angles[::-1]) match= Matchset() match_1=Fragment() match_2=Fragment() lt=len(traceBack) match_1.points=get1N2(traceBack) match_2.points=get1N2(traceBack1) FF1=Fragment() FF2=Fragment() FF1.points=get1N2(F1.points) FF1.turning_angles=F1.turning_angles FF2.points=get1N2(F2.points) FF2.turning_angles=F2.turning_angles FF1.images = [] FF2.images = [] for i in range(0,len(F1.images)): image = Image() image.name = F1.images[i].name image.transform_matrix = getIdentitymatrix() * F1.images[i].transform_matrix FF1.images.append(image) for i in range(0,len(F2.images)): image = Image() image.name = F2.images[i].name image.transform_matrix = getIdentitymatrix() * F2.images[i].transform_matrix FF2.images.append(image) match.fragment_1=FF1 match.fragment_2=FF2 match.match_1=match_1 match.match_2=match_2 match.score=highScoreCell.score match.match_1_start=start_end[0] match.match_2_start=l2-start_end[1]+1 match.match_1_end=start_end[2] match.match_2_end=l2-start_end[3]+1 contour_img=np.zeros((1000,1000,1), np.uint8) contour_img1=np.zeros((1000,1000,1), np.uint8) #traceBack=cv2.approxPolyDP(traceBack,2,True) lt=len(traceBack1) #displayContour("TraceBack"+str(lt),traceBack) #displayContour("TraceBack1"+str(lt),traceBack1) #cv2.drawContours(contour_img, traceBack, -1, 255, 1) #cv2.drawContours(contour_img1, traceBack1, -1, 255, 1) #displayContour("Match1",traceBack) #displayContour("Match2",traceBack1) # cv2.imshow('IMPORTANT !!! :D',contour_img) # cv2.imshow('IMPORTANT2 !!! :D',contour_img1) # print("Length 1") # print(len(traceBack1)) # print("Length 2") # print(len(traceBack)) # contour_img=np.zeros((1000,1000),np.uint8) #cv2.drawContours(contour_img,np.array(traceBack),-1,255,1) return match
def execute(I_List): I_List = resizeAllIfNeeded(I_List) # ONLY THIS IS ADDED TO RESIZE n_img=len(I_List) image=[None for i in range(0,n_img)] corrected=[None for i in range(0,n_img)] kernel = np.ones((1,1),np.uint8) contours=[[] for i in range(0,n_img)] new_contours=[None for i in range(0,n_img)] contour_img=[None for i in range(0,n_img)] cont=[None for i in range(0,n_img)] turning=[[] for i in range(0,n_img)] turn_pts=[[] for i in range(0,n_img)] F=[] for i in range(0,n_img): imgname = I_List[i] imname=imgname[:-4]+str(i)+"temp" print(imname) image[i]=cv2.imread(imgname,0) #image[i]=cv2.resize(image[i],(0,0),image[i],0.5,0.5,cv2.INTER_AREA) color_img=cv2.imread(imgname,1) #color_img=cv2.resize(color_img,(0,0),image[i],0.5,0.5,cv2.INTER_AREA) #image[i]=cv2.GaussianBlur(image[i],(5,5),1) print("hell") image[i]=cv2.GaussianBlur(image[i],(5,5),1) print("helllllo") #Image Thresholding ret,threshold = cv2.threshold(image[i],THRESHOLD,255,cv2.THRESH_BINARY_INV) height,width= image[i].shape[:2] src2=np.zeros((height,width,3),np.uint8) corrected[i]=cv2.morphologyEx(threshold, cv2.MORPH_CLOSE, kernel) open=cv2.morphologyEx(corrected[i], cv2.MORPH_OPEN, kernel) iii=cv2.bitwise_and(color_img,color_img,mask=open) #ret,threshold = cv2.threshold(image[i],THRESHOLD,255,cv2.THRESH_BINARY_INV) #height,width= image[i].shape[:2] # Drawing Contours #open=cv2.morphologyEx(threshold, cv2.MORPH_OPEN, kernel) #corrected[i]=cv2.morphologyEx(threshold, cv2.MORPH_CLOSE, kernel) if ACCURACY == 1: param = cv2.CHAIN_APPROX_TC89_KCOS if ACCURACY == 2: param = cv2.CHAIN_APPROX_SIMPLE if ACCURACY == 3: param = cv2.CHAIN_APPROX_NONE new_contours[i], hierarchy = cv2.findContours(corrected[i],cv2.RETR_EXTERNAL,param) # cv2.imshow("Image"+str(i),iii) color_img=None tempname="TEMP/"+str(i)+str(random.randint(0,100))+".png" tempnames.append(tempname) cv2.imwrite(tempname,iii) #exit() # cv2.waitKey(0) # cont1=np.zeros((1000,1000),np.uint8) # cv2.drawContours(cont1,new_contours[i],-1,255,1) # cv2.imshow("Contour",cont1) height,width= image[i].shape[:2] contour_img[i]=np.zeros((height,width,1), np.uint8) #displayContour("Cont1",new_contours[i]) #print(new_contours[i]) for cnt in new_contours[i]: if cv2.contourArea(cnt)>MIN_AREA: #displayContour("Contq"+str(cv2.contourArea(cnt)),[cnt]) contours[i].extend(cnt) #contours[i]=contours[i][::1] #contours[i]=cv2.approxPolyDP(new_contours[i][0],2,True) #contours[i]=[cnt for cnt in contours[i] if cv2.contourArea(cnt)>50000] if(len(contours[i])>C_LIMIT): contours[i]=contours[i][::int(len(contours[i])/C_LIMIT)] for num in range(NPOINTS,len(contours[i])-NPOINTS): vector1=(contours[i][num-NPOINTS][0]-contours[i][num][0]) vector2=(contours[i][num+NPOINTS][0]-contours[i][num][0]) #print(vector1) cos=(vector1[0]*vector2[0]+vector1[1]*vector2[1])/(math.sqrt((math.pow(vector1[0],2)+math.pow(vector1[1],2))*(math.pow(vector2[0],2)+math.pow(vector2[1],2)))) turn=round(math.acos(cos),100) #print(turn) #if abs(turn)>=(10*3.14/180) and (abs(turn)<=(170*3.14/180) or abs(turn)>=(190*3.14/180)): turning[i].append(turn) turn_pts[i].append(contours[i][num]) frag=Fragment() frag.turning_angles=turning[i] frag.points=contours[i] frag.images = [] # image_ = Image() # image_.name = "i"+str(i)+".jpeg" # image_.transform_matrix= getIdentitymatrix() # frag.images.append(image_) # print "\nInit Matrix :\n" # print frag.images[0].transform_matrix image_ = Image() image_.name = tempname image_.transform_matrix= getIdentitymatrix() frag.images.append(image_) print "\nInit Matrix :\n" print frag.images[0].transform_matrix F.append(frag) # print F.ima # cv2.drawContours(contour_img[i], contours[i], -1, 255, 1) # cv2.imshow('contour_image'+str(i),contour_img[i]) FragmentList=GetMergedImage(F) print("Hello") cont3=np.zeros((1000,1000),np.uint8) # print(get1N2(FragmentList[0].points)) # quit() for i in range(0,len(FragmentList)): # cv2.drawContours(cont3,get1N2(FragmentList[i].points),-1,255,1) # cv2.imshow("Output" + str(i),cont3) final_name = "FINAL"+str(i+1)+".png" # FragmentList[i] FragmentList[i].points = get1N2(FragmentList[i].points) createFinalImage(FragmentList[i],final_name) resultList.append(final_name) for name in tempnames: try: os.remove(name) except: pass #D=GetCandidateMatchSet(F) k=cv2.waitKey(0) if(k==27): cv2.destroyAllWindows() return resultList