Facebook
From Burly Pudu, 8 Months ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 160
  1. # importy
  2. from __future__ import division
  3. from pylab import *
  4. import skimage
  5. from skimage import data, filters, exposure, feature, morphology
  6. from skimage.morphology import square
  7. from skimage.filters import rank
  8. from skimage.util.dtype import convert
  9. from skimage import img_as_float, img_as_ubyte
  10. from matplotlib.pyplot import imshow
  11. import skimage.io as io
  12. from skimage.color import rgb2hsv, hsv2rgb, rgb2gray, gray2rgb
  13. from skimage.filters.edges import convolve
  14. from matplotlib import pylab as plt
  15. import numpy as np
  16. from numpy import array
  17. from IPython.display import display
  18. from ipywidgets import interact, interactive, fixed
  19. from IPython.core.display import clear_output
  20. import os
  21. import cv2
  22.  
  23. import warnings
  24.  
  25. warnings.simplefilter("ignore")
  26.  
  27.  
  28. # funkcja do generowania krotki 3-elementowej z randomowym kolorem
  29. def generate_color():
  30.     return (randint(0, 255), randint(0, 255), randint(0, 255))
  31.  
  32.  
  33. # Funkcja do znajdywania kontur├│w na pojedynczym obrazku.
  34. # Najpierw stosujemy funkcje do obr├│bki zdj─Öcia w celu uwydatnienia kraw─Ödzi,
  35. # a nast─Öpnie szukamy kontury i rysujemy je, je┼Ťli s─ů konturem zewn─Ötrznym i je┼Ťli s─ů wi─Öksze ni┼╝ zadana wielko┼Ť─ç.
  36. # Dodatkowo obliczamy te┼╝ centroid ka┼╝dego konturu.
  37.  
  38. def fun(plane, im, canny_first, canny_second, coef_blur, count_morph, size, width):
  39.     imgray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
  40.  
  41.     imgray = cv2.medianBlur(imgray, coef_blur)
  42.     imgray = cv2.Canny(imgray, canny_first, canny_second)
  43.  
  44.     kernel = np.ones((5, 5), np.uint8)
  45.     imgray = cv2.dilate(imgray, kernel, iterations=count_morph)
  46.     imgray = cv2.erode(imgray, kernel, iterations=count_morph)
  47.  
  48.     img, contours, hierarchy = cv2.findContours(imgray, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
  49.     hier = hierarchy[0]
  50.  
  51.     moments = []
  52.  
  53.     for i in range(len(hier)):
  54.         if (hier[i][3] == -1):
  55.             if (len(contours[i]) > size):
  56.                 M = cv2.moments(contours[i])
  57.                 moments.append([int(M['m10'] / M['m00']), int(M['m01'] / M['m00'])])
  58.                 cv2.drawContours(plane, contours, i, generate_color(), width, hierarchy=hierarchy, maxLevel=0)
  59.  
  60.     return plane, moments
  61.  
  62.  
  63. # Główna funkcja w programie.
  64. # Wczytuje kolejno ka┼╝dy plik ze zdj─Öciem samolotu, wywo┼éuje dla niego funkcj─Ö fun() i wy┼Ťwietla rezultat.
  65. # Dorysowuje r├│wnie┼╝ centroidy w punktach zwr├│conych przez fun().
  66.  
  67. def load(n, col, canny_first, canny_second, coef_blur, count_morph, size, width, marker):
  68.     fig, axes = plt.subplots(nrows=n // col, ncols=col, figsize=(30, 7 * (n // col)))
  69.     no = 0
  70.     for ax in axes:
  71.         for i in range(col):
  72.             if (no < 10):
  73.                 file = os.getcwd() + '//planes/samolot0' + str(no) + '.jpg'
  74.             else:
  75.                 file = os.getcwd() + '//planes/samolot' + str(no) + '.jpg'
  76.  
  77.             plane = data.load(file)
  78.             im = cv2.imread(file)
  79.  
  80.             result, moments = fun(plane, im, canny_first, canny_second, coef_blur, count_morph, size, width)
  81.             ax[i].imshow(result, cmap='gray')
  82.             for mom in moments:
  83.                 ax[i].plot([mom[0]], [mom[1]], 'wo', markersize=marker)
  84.             no = no + 1
  85.  
  86.     fig.savefig('planesAll.pdf')
  87.  
  88.  
  89. # Wywołanie głównej funkcji programu z zadanymi parametrami
  90. load(21, 3, 100, 200, 3, 1, 95, 3, 5)