def evaluateWindows(probabilityPath, actualLocationPath, multispectralImagePath, windowGeoLength): # Initialize print 'Evaluating windows...' multispectralImage = image_store.load(multispectralImagePath) # Load probabilityPacks = probability_store.load(probabilityPath) windowLocations = [(x[0], x[1]) for x in probabilityPacks] windowPixelWidth, windowPixelHeight = multispectralImage.convertGeoDimensionsToPixelDimensions(windowGeoLength, windowGeoLength) windowCount = len(windowLocations) # Load predicted predictedWindowLocations = set((x[0], x[1]) for x in probabilityPacks if x[2] == 1) # Load actual actualGeoLocations = point_store.load(actualLocationPath)[0] actualPixelLocations = multispectralImage.convertGeoLocationsToPixelLocations(actualGeoLocations) actualPixelPointMachine = point_process.PointMachine(actualPixelLocations, 'INTEGER', windowPixelWidth, windowPixelHeight) actualWindowLocations = set(filter(lambda x: actualPixelPointMachine.getPointsInsideWindow(x), windowLocations)) # Get predictedNotActualWindowLocations = predictedWindowLocations - actualWindowLocations actualNotPredictedWindowLocations = actualWindowLocations - predictedWindowLocations wrongWindowLocations = predictedNotActualWindowLocations.union(actualNotPredictedWindowLocations) wrongPixelCenters = [image_store.getWindowCenter(x, windowPixelWidth, windowPixelHeight) for x in wrongWindowLocations] # Compute actualTrue_predictedFalse = len(actualNotPredictedWindowLocations) actualFalse_predictedTrue = len(predictedNotActualWindowLocations) actualTrue = len(actualWindowLocations) actualFalse = windowCount - actualTrue predictedTrue = len(predictedWindowLocations) predictedFalse = windowCount - predictedTrue percentError, falsePositiveError, falseNegativeError = computePercentages(actualTrue_predictedFalse, actualFalse_predictedTrue, actualTrue, actualFalse) # Save windowPerformance = { 'percent error': percentError, 'false positive error': falsePositiveError, 'false negative error': falseNegativeError, 'actual true': actualTrue, 'actual false': actualFalse, 'predicted true': predictedTrue, 'predicted false': predictedFalse, 'actual true predicted true': actualTrue - actualTrue_predictedFalse, 'actual true predicted false': actualTrue_predictedFalse, 'actual false predicted true': actualFalse_predictedTrue, 'actual false predicted false': actualFalse - actualFalse_predictedTrue, 'window count': windowCount, } return windowPerformance, wrongPixelCenters, actualPixelPointMachine
def loadPredictedPixelCenters(probabilityPath, windowPixelDimensions): # Load predictedWindowLocations predictedWindowLocations = [x[:2] for x in load(probabilityPath, withNegative=False)] # Return predictedPixelCenters return [image_store.getWindowCenter(x, *windowPixelDimensions) for x in predictedWindowLocations]