- 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()