Facebook
From Aqua Lechwe, 5 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 212
  1. import os
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4.  
  5. obraz=np.array([
  6.        
  7.         [0,0,0,0,1,1,1,0,0,0,0],
  8.         [0,0,0,0,1,1,1,0,0,0,0],
  9.         [0,0,0,0,1,1,1,0,0,0,0],
  10.         [0,0,0,0,1,1,1,0,0,0,0],
  11.         [1,1,1,1,1,1,1,1,1,1,1],
  12.         [1,1,1,1,1,1,1,1,1,1,1],
  13.         [1,1,1,1,1,1,1,1,1,1,1],
  14.         [0,0,0,0,1,1,1,0,0,0,0],
  15.         [0,0,0,0,1,1,1,0,0,0,0],
  16.         [0,0,0,0,1,1,1,0,0,0,0],
  17.         [0,0,0,0,1,1,1,0,0,0,0],
  18.     ])
  19.  
  20. elem=np.array([    
  21.                   [0,1,0],
  22.                   [1,1,1],
  23.                   [0,1,0],
  24.                   ])
  25.  
  26.  
  27. def erozja(obraz,element):
  28.    
  29.     obraz_shape=np.shape(obraz)
  30.     obraz_rows=obraz_shape[0]
  31.     obraz_columns=obraz_shape[1]
  32.    
  33.     element_shape=np.shape(element)
  34.     element_rows=element_shape[0]
  35.     element_columns=element_shape[1]
  36.    
  37.     array=np.zeros((element_rows,element_columns))
  38.     wynik=np.zeros((obraz_rows,obraz_columns))
  39.    
  40.     mid = int((element_rows-1)/2)
  41.     for i in range(mid,obraz_rows-mid):
  42.         for k in range(mid,obraz_columns-mid):
  43.            
  44.             for j in range(-mid,element_rows-mid):
  45.                 for l in range(-mid,element_columns-mid):
  46.                     if element[j+1,l+1]==0:
  47.                         array[j+1,l+1]=element[j+1,l+1]
  48.                     else:
  49.                         array[j+1,l+1]=obraz[i+j,k+l]
  50.            
  51.             if np.array_equal(array, element):
  52.                 wynik[i,k]=1
  53.             else:
  54.                 wynik[i,k]=0
  55.                                                
  56.     return wynik
  57.  
  58. def dylatacja(obraz,element):
  59.    
  60.     obraz_shape=np.shape(obraz)
  61.     obraz_rows=obraz_shape[0]
  62.     obraz_columns=obraz_shape[1]
  63.    
  64.     element_shape=np.shape(element)
  65.     element_rows=element_shape[0]
  66.     element_columns=element_shape[1]
  67.    
  68.     array=np.zeros((element_rows,element_columns))
  69.     wynik=np.zeros((obraz_rows,obraz_columns))
  70.    
  71.     mid = int((element_rows-1)/2)
  72.     for i in range(0,obraz_rows-1):
  73.         for k in range(0,obraz_columns-1):
  74.            
  75.             for j in range(-mid,element_rows-mid):
  76.                 for l in range(-mid,element_columns-mid):
  77.                     if element[j+1,l+1]==0:
  78.                         array[j+1,l+1]=element[j+1,l+1]
  79.                     else:
  80.                         array[j+1,l+1]=obraz[i+j,k+l]
  81.            
  82.             for j in range(-mid,element_rows-mid):
  83.                 for l in range(-mid,element_columns-mid):
  84.                     if array[j+1,l+1]==element[j+1,l+1] and array[j+1,l+1]!=0:
  85.                         wynik[i,k]=1
  86.                                                
  87.     return wynik
  88.  
  89. def run():
  90.     wynik = erozja(obraz,elem)    
  91.     for x in wynik:
  92.         print(x)
  93.    
  94.     print('\n')
  95.    
  96.     wynik = dylatacja(obraz,elem)    
  97.     for x in wynik:
  98.         print(x)
  99.    
  100.    
  101. #    print('\n')
  102. #        
  103. #    zamkniecie=dylatacja(obraz,elem)
  104. #    zamkniecie=erozja(zamkniecie,elem)
  105. #    
  106. #    for x in zamkniecie:
  107. #        print(x)
  108.    
  109.    
  110. if __name__=="__main__":
  111.     run()