Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #5
0
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