11 Dec 17:25
ZadanieF
import imageio
import numpy as np
import matplotlib.pyplot as plt
from scipy.ndimage import grey_closing
# Wczytanie obrazów testowych z szumem
noised2 = imageio.imread('noised2.png')
noised3 = imageio.imread('noised3.png')
noised4 = imageio.imread('noised4.png')
# Zdefiniowanie elementów strukturujących
def create_square_mask(size):
return np.ones((size, size), dtype=bool) # Kwadratowa maska 5x5
def create_circle_mask(size):
center = size // 2
Y, X = np.ogrid[:size, :size]
distance = (X - center)**2 + (Y - center)**2
return distance <= center**2 # Kołowa maska 5x5
# Funkcja do filtracji z użyciem operacji closing
def apply_closing(image, mask):
return grey_closing(image, footprint=mask)
# Funkcja do wyświetlania obrazów przed i po filtracji
def displayImages(Image1, Image2, Title1="img1", Title2="img2"):
print(f"{Title1} dimensions: {Image1.shape}, dtype: {Image1.dtype}")
print(f"{Title2} dimensions: {Image2.shape}, dtype: {Image2.dtype}")
fig, axs = plt.subplots(1, 2, figsize=(12, 6))
axs[0].imshow(Image1, cmap='gray', vmin=0, vmax=255)
axs[0].set_title(Title1)
axs[1].imshow(Image2, cmap='gray', vmin=0, vmax=255)
axs[1].set_title(Title2)
fig.tight_layout()
plt.show()
# Stworzenie masek
square_mask = create_square_mask(5) # Kwadratowa maska 5x5
circle_mask = create_circle_mask(5) # Kołowa maska 5x5
# Filtracja obrazów testowych
for image, name in [(noised2, 'Noised2'), (noised3, 'Noised3'), (noised4, 'Noised4')]:
# Filtracja dla maski kwadratowej
filtered_square = apply_closing(image, square_mask)
displayImages(image, filtered_square, f"{name} - Original", f"{name} - Closing (Square Mask)")
# Filtracja dla maski kołowej
filtered_circle = apply_closing(image, circle_mask)
displayImages(image, filtered_circle, f"{name} - Original", f"{name} - Closing (Circle Mask)")