def filterPeakList(pixels, peaks, separationDist, dropFactor): numPeaks = len(peaks) # now filter the list tolose = [] for i in range(numPeaks): for j in range(i+1, numPeaks): dropLower = False # don't keep both if too close posi = (peaks[i][0], peaks[i][1]) posj = (peaks[j][0], peaks[j][1]) if Util.radialDistance(posi[0], posi[1], posj[0], posj[1]) < separationDist: dropLower = True # don't keep both if not significant drop mean = (pixels[posi[0]][posi[1]] + pixels[posj[0]][posj[1]])/dropFactor saddle = dropBetween(pixels, posi[0], posi[1], posj[0], posj[1]) if(saddle > mean*1): dropLower = True # if we don't keep both, lose the lower one if dropLower: if pixels[posi[0]][posi[1]] > pixels[posj[0]][posj[1]]: tolose.append(j) else: tolose.append(i) returnedPeaks = [] for i in range(numPeaks): if i not in tolose: returnedPeaks.append(peaks[i]) # print returnedPeaks return returnedPeaks
def dropBetween(pixels, x, y, a, b): distance = Util.radialDistance(x, y, a, b) distance = int(distance/2) minVal = pixels[x][y] for i in range(1, distance): pixX = (a-x)/(i*distance) pixY = (b-y)/(i*distance) pixVal = pixels[int(pixX)][int(pixY)] if pixVal < minVal: minVal = pixVal return minVal
def calculateGridSize(pixels, lowerLimit, sepDist, dropFact, gridFactor): print("Calculating grid size...") peaks = findPeaks(pixels, lowerLimit) # print("filtering " + str(len(peaks)) + " peaks") peaks = filterPeakList(pixels, peaks, sepDist, dropFact) # print(str(len(peaks)) + " peaks remaining; calculating grid size") minDist = 1280 numPeaks = len(peaks) # print numPeaks for i in range(numPeaks): for j in range(i+1, numPeaks): posi = (peaks[i][0], peaks[i][1]) posj = (peaks[j][0], peaks[j][1]) dist = Util.radialDistance(posi[0], posi[1], posj[0], posj[1]) # print(posi, posj, dist) if dist < minDist: minDist = dist print "Minimum distance is " + str(minDist) gridSep = int(minDist/gridFactor) return gridSep