# HG changeset patch
# User Laman
# Date 2019-02-21 17:31:58
# Node ID 5e5a8c4642c513d2f4cda377a30d4724f2f1dfe3
# Parent  275f7307dd32d3b2abb9d8430edb1d50201044e7

presenting detected peaks

diff --git a/exp/hough.py b/exp/hough.py
--- a/exp/hough.py
+++ b/exp/hough.py
@@ -19,16 +19,16 @@ class LineBag:
 	def __init__(self):
 		self._lines=[]
 
-	def put(self,score,alpha,beta):
-		self._lines.append((score,alpha,beta))
+	def put(self,score,alpha,beta,peaks):
+		self._lines.append((score,alpha,beta,peaks))
 
 	def pull(self,count):
 		self._lines.sort(reverse=True)
 		res=[]
-		for (score,alpha,beta) in self._lines:
-			if any(abs(alpha-gamma)<10 and abs(beta-delta)<10 for (_,gamma,delta) in res): continue
-			if any((beta-delta)!=0 and (alpha-gamma)/(beta-delta)<0 for (_,gamma,delta) in res): continue
-			res.append((score,alpha,beta))
+		for (score,alpha,beta,peaks) in self._lines:
+			if any(abs(alpha-gamma)<10 and abs(beta-delta)<10 for (_,gamma,delta,_) in res): continue
+			if any((beta-delta)!=0 and (alpha-gamma)/(beta-delta)<0 for (_,gamma,delta,_) in res): continue
+			res.append((score,alpha,beta,peaks))
 			if len(res)>=count: break
 		return res
 
@@ -46,11 +46,14 @@ class HoughTransform:
 
 	def extract(self):
 		img=self._createImg()
+		self.show(img)
 		(ab,cd)=self._detectLines()
-		for (score,alpha,beta) in (ab,cd):
+		i=0
+		for (score,alpha,beta,peaks) in (ab,cd):
 			log.debug("score: %s",score)
 			log.debug("alpha, beta: %s, %s",alpha,beta)
-			cv.line(img,(0,alpha),(self._diagLen-1,beta),(0,255,255))
+			self._drawLine(img,alpha,beta,peaks,i)
+			i+=1
 
 		self.show(img)
 
@@ -112,24 +115,23 @@ class HoughTransform:
 
 	def _detectLines(self):
 		bag=LineBag()
-		for alpha in range(0,180,2):
-			for beta in range(alpha-45,alpha+45,2):
-				accLine=self._readLine(alpha,beta)
+		for alpha in range(0,180,3):
+			for beta in range(min(alpha-60,0),alpha+60,3):
+				accLine=[self._acc[key] for key in self._readLineKeys(alpha,beta)]
 				(peaks,props)=scipy.signal.find_peaks(accLine,prominence=0)
-				prominences=sorted(props["prominences"],reverse=True)[:19]
-				bag.put(sum(prominences),alpha,beta)
+				(prominences,peaks)=zip(*sorted(zip(props["prominences"],peaks),reverse=True)[:19])
+				bag.put(sum(prominences),alpha,beta,peaks)
 		return bag.pull(2)
 
-	def _readLine(self,alpha,beta):
+	def _readLineKeys(self,alpha,beta):
 		n=self._diagLen-1
 		res=[]
 		for i in range(n+1):
 			k=round((alpha*(n-i)+beta*i)/n)
 			if k<0 or k>=180:
-				if k<-180 or k>360: print(alpha,beta,i,k)
 				k=k%180
 				i=n+1-i
-			res.append(self._acc[k][i])
+			res.append((k,i))
 		return res
 
 	def _computeGridParams(self,lines):
@@ -178,12 +180,24 @@ class HoughTransform:
 			if y<h:	img[y,x]=color
 			else: img[y%h,-x]=color
 
+	def _drawLine(self,img,alpha,beta,peaks,colorKey):
+		colors=[[0,255,255],[255,0,255],[255,255,0]]
+		color=colors[colorKey]
+		(h,w)=img.shape[:2]
+		keys=self._readLineKeys(alpha,beta)
+		for (y,x) in keys:
+			if x%3!=0: continue
+			if y<0 or y>=h: continue
+			img[y,x]=color
+		for k in peaks:
+			(y,x)=keys[k]
+			cv.drawMarker(img,(x,y),color,cv.MARKER_TILTED_CROSS,8)
+
 	def drawLine(self,img,line,colorKey=0):
 		colors=[[0,255,255],[255,0,255],[255,255,0]]
 		color=colors[colorKey]
 		(h,w)=img.shape[:2]
 		(a,b,c)=line.toNormal()
-		print("%",a,b,c)
 		if b==0: return
 		for x in range(1,w,3):
 			y=round((-c-a*x)/b) + (0 if b>=0 else 180)