import os import numpy as np import matplotlib.pyplot as plt obraz=np.array([ [0,0,0,0,1,1,1,0,0,0,0], [0,0,0,0,1,1,1,0,0,0,0], [0,0,0,0,1,1,1,0,0,0,0], [0,0,0,0,1,1,1,0,0,0,0], [1,1,1,1,1,1,1,1,1,1,1], [1,1,1,1,1,1,1,1,1,1,1], [1,1,1,1,1,1,1,1,1,1,1], [0,0,0,0,1,1,1,0,0,0,0], [0,0,0,0,1,1,1,0,0,0,0], [0,0,0,0,1,1,1,0,0,0,0], [0,0,0,0,1,1,1,0,0,0,0], ]) elem=np.array([ [0,1,0], [1,1,1], [0,1,0], ]) def erozja(obraz,element): obraz_shape=np.shape(obraz) obraz_rows=obraz_shape[0] obraz_columns=obraz_shape[1] element_shape=np.shape(element) element_rows=element_shape[0] element_columns=element_shape[1] array=np.zeros((element_rows,element_columns)) wynik=np.zeros((obraz_rows,obraz_columns)) mid = int((element_rows-1)/2) for i in range(mid,obraz_rows-mid): for k in range(mid,obraz_columns-mid): for j in range(-mid,element_rows-mid): for l in range(-mid,element_columns-mid): if element[j+1,l+1]==0: array[j+1,l+1]=element[j+1,l+1] else: array[j+1,l+1]=obraz[i+j,k+l] if np.array_equal(array, element): wynik[i,k]=1 else: wynik[i,k]=0 return wynik def dylatacja(obraz,element): obraz_shape=np.shape(obraz) obraz_rows=obraz_shape[0] obraz_columns=obraz_shape[1] element_shape=np.shape(element) element_rows=element_shape[0] element_columns=element_shape[1] array=np.zeros((element_rows,element_columns)) wynik=np.zeros((obraz_rows,obraz_columns)) mid = int((element_rows-1)/2) for i in range(0,obraz_rows-1): for k in range(0,obraz_columns-1): for j in range(-mid,element_rows-mid): for l in range(-mid,element_columns-mid): if element[j+1,l+1]==0: array[j+1,l+1]=element[j+1,l+1] else: array[j+1,l+1]=obraz[i+j,k+l] for j in range(-mid,element_rows-mid): for l in range(-mid,element_columns-mid): if array[j+1,l+1]==element[j+1,l+1] and array[j+1,l+1]!=0: wynik[i,k]=1 return wynik def run(): wynik = erozja(obraz,elem) for x in wynik: print(x) print('\n') wynik = dylatacja(obraz,elem) for x in wynik: print(x) # print('\n') # # zamkniecie=dylatacja(obraz,elem) # zamkniecie=erozja(zamkniecie,elem) # # for x in zamkniecie: # print(x) if __name__=="__main__": run()