Advertisement
daddydean

code

Jul 11th, 2017
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.93 KB | None | 0 0
  1. import os, sys
  2. import numpy as np
  3. from scipy import ndimage as ndi
  4. from scipy.misc import imsave
  5. import matplotlib.pyplot as plt
  6.  
  7. from skimage.filters import sobel, threshold_local
  8. from skimage.morphology import watershed
  9. from skimage import io
  10.  
  11.  
  12. def open_image(name):
  13.     filename = os.path.join(os.getcwd(), name)
  14.     return io.imread(filename)
  15.  
  16.  
  17. def adaptive_threshold(image):
  18.     print(type(image))
  19.     print(image)
  20.     block_size = 41
  21.     binary_adaptive = threshold_local(image, block_size, offset=10)
  22.     binary_adaptive = np.asarray(binary_threshold, dtype=int)
  23.     return np.invert(binary_adaptive) * 1.
  24.  
  25.  
  26. def segmentize(image):
  27.     # make segmentation using edge-detection and watershed
  28.     edges = sobel(image)
  29.     markers = np.zeros_like(image)
  30.     foreground, background = 1, 2
  31.     markers[image == 0] = background
  32.     markers[image == 1] = foreground
  33.  
  34.     ws = watershed(edges, markers)
  35.  
  36.     return ndi.label(ws == foreground)
  37.  
  38.  
  39. def find_segment(segments, index):
  40.     segment = np.where(segments == index)
  41.     shape = segments.shape
  42.  
  43.     minx, maxx = max(segment[0].min() - 1, 0), min(segment[0].max() + 1, shape[0])
  44.     miny, maxy = max(segment[1].min() - 1, 0), min(segment[1].max() + 1, shape[1])
  45.  
  46.     im = segments[minx:maxx, miny:maxy] == index
  47.  
  48.     return (np.sum(im), np.invert(im))
  49.  
  50.  
  51. def run(f):
  52.     print('Processing:', f)
  53.  
  54.     image = open_image(f)
  55.     processed = adaptive_threshold(image)
  56.     segments = segmentize(processed)
  57.  
  58.     print('Segments detected:', segments[1])
  59.  
  60.     seg = []
  61.     for s in range(1, segments[1]):
  62.         seg.append(find_segment(segments[0], s))
  63.  
  64.     seg.sort(key=lambda s: -s[0])
  65.  
  66.     for i in range(len(seg)):
  67.         imsave('segments/' + f + '_' + str(i) + '.png', seg[i][1])
  68.  
  69. folder = os.path.join(os.getcwd(), 'segments')
  70. os.path.isfile(folder) and os.remove(folder)
  71. os.path.isdir(folder) or os.mkdir(folder)
  72. for f in sys.argv[1:]:
  73.     run(f)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement