def applyFilter(f): global image, workingImage, app if(workingImage == None): app.loadFile() width, height = workingImage["size"][0], workingImage["size"][1] pixels = workingImage["pixels"] if(f == "g"): pixels = filters.grayscale(pixels) elif(f == "t"): minT, maxT = app.minThreshold.get(), app.maxThreshold.get() pixels = filters.grayscale(pixels, lmin=minT, lmax=maxT) elif(f == "b"): pixels = filters.blur(pixels, width, height) elif(f == "n"): pixels = filters.negative(pixels) elif(f == "s"): pixels = filters.sepia(pixels) elif(f == "no"): level, intensity = app.noiseLevel.get(), app.noiseIntensity.get() pixels = filters.noise(pixels, level, intensity) elif(f == "rn"): aggressiveness = app.noiseAggressiveness.get() pixels = filters.removeNoise(pixels, width, height, aggressiveness) elif(f == "d"): pixels = filters.difference(pixels, width, height) elif(f == "c"): pixels = filters.applyMask(pixels, width) elif(f == "bd"): pixels = filters.borderDetection(pixels, width) elif(f == "od"): coordinates = app.mouseCoords color = (0,0,255) pixels, dmp1, dmp2 = filters.objectDetection(pixels, width, height, coordinates, color) else: pass saveImageChanges(pixels) app.updateCanvas() print "Done!" return
def applyFilter(f): global image, lastImage, app if(f == "o"): i = image else: i = "tmp.png" a, width, height, pixels = imageToPixels(lastImage) if(f == "g"): pixels = filters.grayscale(pixels) elif(f == "t"): minT, maxT = app.minThreshold.get(), app.maxThreshold.get() pixels = filters.grayscale(pixels, lmin=minT, lmax=maxT) elif(f == "b"): pixels = filters.blur(pixels, width, height) elif(f == "n"): pixels = filters.negative(pixels) elif(f == "s"): pixels = filters.sepia(pixels) elif(f == "no"): level, intensity = app.noiseLevel.get(), app.noiseIntensity.get() pixels = filters.noise(pixels, level, intensity) elif(f == "rn"): aggressiveness = app.noiseAggressiveness.get() pixels = filters.removeNoise(pixels, width, height, aggressiveness) elif(f == "d"): pixels = filters.difference(pixels, width, height) elif(f == "c"): pixels = filters.applyMask(pixels, width) elif(f == "bd"): pixels = filters.borderDetection(pixels, width) elif(f == "od"): coordinates = app.mouseCoords color = (0,0,255) pixels, dmp1, dmp2 = filters.objectDetection(pixels, width, height, coordinates, color) else: pass saveImage((width, height), pixels, i) lastImage = i app.updateCanvas(i) print "Done!" return
def extractOutline(settings, image_name, image, run3dmorph): ''' Runs image filters (see Hsiang et al. 2017, Figure 4) to extract 2D outline of object. ''' if not run3dmorph: print ' '.join(["INFO: Extracting outline for", image_name, '\n']) size = image.shape # Morphological opening (erosion followed by dilation) image_open = filters.morphOpen(image, settings['disk_size_opening']) # RGB filter image_rgb = filters.rgbFilter(image_open) # Contrast adjustment image_contrast = filters.contrastAdjust(image_rgb, settings['contrast_adjustment']) # Grayscale conversion image_gray = filters.rgb2gray(image_contrast) # Black & White conversion image_bw = filters.convertBW(image_gray, image_name, settings['threshold_adjustment']) # Created hole-filled version and -unfilled version (the latter is for # run3dmorph) image_filled = filters.fillHoles(image_bw) if run3dmorph: image_unfilled = image_bw # Remove objects that touch border image_border = filters.clearBorder(image_filled, size) if run3dmorph: image_border_unfilled = filters.clearBorder(image_unfilled, size) # Remove background noise image_clean = filters.removeNoise(image_border) if run3dmorph: image_clean_unfilled = filters.removeNoise(image_border_unfilled) # Smooth image if not run3dmorph: image_smoothed = filters.smoothImage(image_clean, settings['disk_size_smoothing']) # Edge detection (smoothed) edge_smoothed = cv2.Canny(image_smoothed, 100, 200) * 1 # Edge detection (original) edge_unsmoothed = cv2.Canny(image_clean, 100, 200) * 1 # Save output files if not run3dmorph: # Save intermediates if requested by user if settings['save_intermediates']: save.saveIntermediates(settings, image_rgb, image_contrast, image_gray, image_bw, image_filled, image_border, image_clean, edge_unsmoothed, edge_smoothed, image_name) # Save final image of extracted outline overlaid on original image save.saveFinalOverlay(settings, image, edge_unsmoothed, image_name) return edge_unsmoothed, edge_smoothed, image_clean, image_smoothed, image_border else: return edge_unsmoothed, image_clean, image_clean_unfilled
def extractOutline(settings, image_name, image, run3dmorph): ''' Runs image filters (see Hsiang et al. 2017, Figure 4) to extract 2D outline of object. ''' if not run3dmorph: print ' '.join(["INFO: Extracting outline for", image_name]) size = image.shape # Tag dictionary for saving intermediate image files if requested by user tagDict = { 1: 'morphopen.jpg', 2: 'rgbfilter.jpg', 3: 'contrast.jpg', 4: 'grayscale.jpg', 5: 'bw.jpg', 6: 'fill.jpg', 7: 'border.jpg', 8: 'noise.jpg', 9: 'edge.jpg', 10: 'smooth.jpg' } try: # Morphological opening (erosion followed by dilation) image_open = filters.morphOpen(image, settings['disk_size_opening']) if settings['save_intermediates']: save.saveIntermediates(settings, image_open, image_name, '_'.join(['1', tagDict[1]])) # RGB filter image_rgb = filters.rgbFilter(image_open) if settings['save_intermediates']: save.saveIntermediates(settings, image_rgb, image_name, '_'.join(['2', tagDict[2]])) # Contrast adjustment image_contrast = filters.contrastAdjust( image_rgb, settings['contrast_adjustment']) if settings['save_intermediates']: save.saveIntermediates(settings, image_contrast, image_name, '_'.join(['3', tagDict[3]])) # Grayscale conversion image_gray = filters.rgb2gray(image_contrast) if settings['save_intermediates']: save.saveIntermediates(settings, image_gray, image_name, '_'.join(['4', tagDict[4]])) # Black & White conversion image_bw = filters.convertBW(image_gray, image_name, settings['threshold_adjustment']) if settings['save_intermediates']: save.saveIntermediates(settings, image_bw, image_name, '_'.join(['5', tagDict[5]])) # Created hole-filled version and -unfilled version (the latter is for # run3dmorph) image_filled = filters.fillHoles(image_bw) if settings['save_intermediates']: save.saveIntermediates(settings, image_filled, image_name, '_'.join(['6', tagDict[6]])) if run3dmorph: image_unfilled = image_bw # Remove objects that touch border image_border = filters.clearBorder(image_filled, size) if settings['save_intermediates']: save.saveIntermediates(settings, image_border, image_name, '_'.join(['7', tagDict[7]])) if run3dmorph: image_border_unfilled = filters.clearBorder(image_unfilled, size) # Remove background noise image_clean = filters.removeNoise(image_border) if settings['save_intermediates']: save.saveIntermediates(settings, image_clean, image_name, '_'.join(['8', tagDict[8]])) if run3dmorph: image_clean_unfilled = filters.removeNoise(image_border_unfilled) # Edge detection (original) edge_unsmoothed = cv2.Canny(image_clean, 100, 200) * 1 if settings['save_intermediates']: save.saveIntermediates(settings, edge_unsmoothed, image_name, '_'.join(['9', tagDict[9]])) # Smooth image if not run3dmorph: image_smoothed = filters.smoothImage( image_clean, settings['disk_size_smoothing']) # Edge detection (smoothed) edge_smoothed = cv2.Canny(image_smoothed, 100, 200) * 1 if settings['save_intermediates']: save.saveIntermediates(settings, edge_smoothed, image_name, '_'.join(['10', tagDict[10]])) print '' except: print ' '.join([ "ERROR: Outline extraction failed; check intermediates and/or input parameters\n" ]) # Save final image of extracted outline overlaid on original image if not run3dmorph: try: save.saveFinalOverlay(settings, image, edge_unsmoothed, image_name) except: return None # Return nothing if outline extraction runs into trouble return edge_unsmoothed, edge_smoothed, image_clean, image_smoothed, image_border # Return necessary output for 2dmorph else: try: return edge_unsmoothed, image_clean, image_clean_unfilled # Return necessary output for 3dmorph except: return None # Unless something went wrong
def extractOutline(settings,image_name,image,run3dmorph): ''' Runs image filters (see Hsiang et al. 2017, Figure 4) to extract 2D outline of object. ''' if not run3dmorph: print ' '.join(["INFO: Extracting outline for",image_name]) size = image.shape # Tag dictionary for saving intermediate image files if requested by user tagDict = { 1:'morphopen.jpg', 2:'rgbfilter.jpg', 3:'contrast.jpg', 4:'grayscale.jpg', 5:'bw.jpg', 6:'fill.jpg', 7:'border.jpg', 8:'noise.jpg', 9:'edge.jpg', 10:'smooth.jpg' } try: # Morphological opening (erosion followed by dilation) image_open = filters.morphOpen(image,settings['disk_size_opening']) if settings['save_intermediates']: save.saveIntermediates(settings,image_open,image_name,'_'.join(['1',tagDict[1]])) # RGB filter image_rgb = filters.rgbFilter(image_open) if settings['save_intermediates']: save.saveIntermediates(settings,image_rgb,image_name,'_'.join(['2',tagDict[2]])) # Contrast adjustment image_contrast = filters.contrastAdjust(image_rgb,settings['contrast_adjustment']) if settings['save_intermediates']: save.saveIntermediates(settings,image_contrast,image_name,'_'.join(['3',tagDict[3]])) # Grayscale conversion image_gray = filters.rgb2gray(image_contrast) if settings['save_intermediates']: save.saveIntermediates(settings,image_gray,image_name,'_'.join(['4',tagDict[4]])) # Black & White conversion image_bw = filters.convertBW(image_gray,image_name,settings['threshold_adjustment']) if settings['save_intermediates']: save.saveIntermediates(settings,image_bw,image_name,'_'.join(['5',tagDict[5]])) # Created hole-filled version and -unfilled version (the latter is for # run3dmorph) image_filled = filters.fillHoles(image_bw) if settings['save_intermediates']: save.saveIntermediates(settings,image_filled,image_name,'_'.join(['6',tagDict[6]])) if run3dmorph: image_unfilled = image_bw # Remove objects that touch border image_border = filters.clearBorder(image_filled,size) if settings['save_intermediates']: save.saveIntermediates(settings,image_border,image_name,'_'.join(['7',tagDict[7]])) if run3dmorph: image_border_unfilled = filters.clearBorder(image_unfilled,size) # Remove background noise image_clean = filters.removeNoise(image_border) if settings['save_intermediates']: save.saveIntermediates(settings,image_clean,image_name,'_'.join(['8',tagDict[8]])) if run3dmorph: image_clean_unfilled = filters.removeNoise(image_border_unfilled) # Edge detection (original) edge_unsmoothed = cv2.Canny(image_clean,100,200) * 1 if settings['save_intermediates']: save.saveIntermediates(settings,edge_unsmoothed,image_name,'_'.join(['9',tagDict[9]])) # Smooth image if not run3dmorph: image_smoothed = filters.smoothImage(image_clean,settings['disk_size_smoothing']) # Edge detection (smoothed) edge_smoothed = cv2.Canny(image_smoothed,100,200) * 1 if settings['save_intermediates']: save.saveIntermediates(settings,edge_smoothed,image_name,'_'.join(['10',tagDict[10]])) print '' except: print ' '.join(["ERROR: Outline extraction failed; check intermediates and/or input parameters\n"]) # Save final image of extracted outline overlaid on original image if not run3dmorph: try: save.saveFinalOverlay(settings,image,edge_unsmoothed,image_name) except: return None # Return nothing if outline extraction runs into trouble return edge_unsmoothed,edge_smoothed,image_clean,image_smoothed,image_border # Return necessary output for 2dmorph else: try: return edge_unsmoothed,image_clean,image_clean_unfilled # Return necessary output for 3dmorph except: return None # Unless something went wrong