Ex3 done and tested everything
parent
038055284a
commit
074c92c93d
|
@ -288,10 +288,10 @@ def two_e():
|
|||
# EXCERCISE 3: Image Filtering #
|
||||
################################
|
||||
def ex3():
|
||||
#three_a()
|
||||
# three_b()
|
||||
# three_c()
|
||||
#three_d()
|
||||
three_a()
|
||||
three_b()
|
||||
three_c()
|
||||
three_d()
|
||||
three_e()
|
||||
|
||||
def three_a():
|
||||
|
@ -312,9 +312,12 @@ def three_a():
|
|||
"""
|
||||
lena = uz_image.imread('./data/images/lena.png', uz_image.ImageType.float64)
|
||||
lena_grayscale = uz_image.transform_coloured_image_to_grayscale(lena.astype(np.float64))
|
||||
|
||||
# Gaussian noise
|
||||
lena_gausssian_noise = uz_image.gauss_noise(lena_grayscale)
|
||||
# Salt and pepper noise
|
||||
lena_salt_and_pepper = uz_image.sp_noise(lena_grayscale)
|
||||
kernel = uz_image.get_gaussian_kernel(1)
|
||||
kernel = np.array(uz_image.get_gaussian_kernel(2)) # MUST BE A 2D for TRANSPOSE
|
||||
|
||||
# Denoised
|
||||
denosised_lena = cv2.filter2D(lena_gausssian_noise, cv2.CV_64F, kernel)
|
||||
|
@ -335,6 +338,7 @@ def three_a():
|
|||
axs[0, 2].set(title='Salt and Pepper applied')
|
||||
axs[1, 2].imshow(desalted_lena, cmap='gray')
|
||||
axs[1, 2].set(title='Desalted Lena')
|
||||
axs[1, 0].set_visible(False)
|
||||
|
||||
plt.show()
|
||||
|
||||
|
@ -345,17 +349,10 @@ def three_b():
|
|||
"""
|
||||
museum_grayscale = uz_image.imread_gray('./data/images/museum.jpg', uz_image.ImageType.uint8)
|
||||
|
||||
#https://blog.demofox.org/2022/02/26/image-sharpening-convolution-kernels/ # Pa tui na slajdih lepo pise
|
||||
|
||||
kernel = np.array([[-1, -1, -1],
|
||||
[-1, 17, -1],
|
||||
[-1, -1,-1]])
|
||||
|
||||
kernel = kernel * 1./9.
|
||||
|
||||
museo = cv2.filter2D(museum_grayscale, -1, kernel)
|
||||
|
||||
museo = uz_image.sharpen_image(museum_grayscale, 1.2)
|
||||
fig, axs = plt.subplots(1, 2)
|
||||
fig.suptitle('Sharpening operation')
|
||||
axs[0].imshow(museum_grayscale, cmap='gray')
|
||||
axs[0].set(title='Original')
|
||||
axs[1].imshow(museo, cmap='gray')
|
||||
|
@ -367,6 +364,8 @@ def three_c():
|
|||
signal[15:20] = 1.0
|
||||
|
||||
fig, axs = plt.subplots(1, 4)
|
||||
fig.suptitle('Signal manipulation')
|
||||
|
||||
axs[0].plot(signal)
|
||||
axs[0].set(title='Original')
|
||||
|
||||
|
@ -392,22 +391,18 @@ def three_d():
|
|||
and pepper noise. Compare the results with the Gaussian filter for multiple noise
|
||||
intensities and filter sizes.
|
||||
"""
|
||||
lena = uz_image.imread('./data/images/obama.jpg', uz_image.ImageType.float64)
|
||||
lena = uz_image.imread('./data/images/lena.png', uz_image.ImageType.float64)
|
||||
lena_grayscale = uz_image.transform_coloured_image_to_grayscale(lena.astype(np.float64))
|
||||
# Peppered
|
||||
lena_salt_and_pepper = uz_image.sp_noise(lena_grayscale)
|
||||
|
||||
# Depeppered
|
||||
deppepered_lena = uz_image.apply_median_method_2D(lena_salt_and_pepper, 7)
|
||||
# Sharpened
|
||||
kernel = np.array([[-1, -1, -1],
|
||||
[-1, 17, -1],
|
||||
[-1, -1,-1]])
|
||||
|
||||
kernel = kernel * 1./9.
|
||||
sharpened_lena = cv2.filter2D(deppepered_lena, cv2.CV_64F, kernel)
|
||||
sharpened_lena = uz_image.sharpen_image(deppepered_lena,1)
|
||||
|
||||
|
||||
fig, axs = plt.subplots(1, 4)
|
||||
fig.suptitle('Common methods applied over Lena image')
|
||||
|
||||
axs[0].imshow(lena_grayscale, cmap='gray')
|
||||
axs[0].set(title='Orginal image')
|
||||
|
|
|
@ -326,6 +326,27 @@ def get_gaussian_kernel(sigma: float):
|
|||
|
||||
return result / np.sum(result)
|
||||
|
||||
def sharpen_image(image: Union[npt.NDArray[np.float64], npt.NDArray[np.uint8]], sharpen_factor=1.0) -> Union[npt.NDArray[np.float64], npt.NDArray[np.uint8]]:
|
||||
"""
|
||||
Accepts: image & sharpen factor
|
||||
|
||||
Returns: sharpened image
|
||||
https://blog.demofox.org/2022/02/26/image-sharpening-convolution-kernels/ <-- sharpening kernel, but also on slides
|
||||
good explanation
|
||||
"""
|
||||
sharpened_image = image.copy()
|
||||
|
||||
KERNEL = np.array([[-1, -1, -1],
|
||||
[-1, 17, -1],
|
||||
[-1, -1,-1]]) * 1./9. * sharpen_factor
|
||||
|
||||
if image.dtype.type == np.float64:
|
||||
sharpened_image = cv2.filter2D(sharpened_image, cv2.CV_64F, KERNEL)
|
||||
elif image.dtype.type == np.uint8:
|
||||
sharpened_image = cv2.filter2D(sharpened_image, cv2.CV_8U, KERNEL)
|
||||
|
||||
return sharpened_image
|
||||
|
||||
def gaussfilter2D(image: Union[npt.NDArray[np.float64], npt.NDArray[np.uint8]], sigma: float) -> Union[npt.NDArray[np.float64], npt.NDArray[np.uint8]]:
|
||||
"""
|
||||
Accepts: image, sigma
|
||||
|
@ -340,10 +361,10 @@ def gaussfilter2D(image: Union[npt.NDArray[np.float64], npt.NDArray[np.uint8]],
|
|||
return filtered_image
|
||||
|
||||
def simple_median(signal: npt.NDArray[np.float64], width: int):
|
||||
signal = signal.copy()
|
||||
if width % 2 == 0:
|
||||
raise Exception('No u won\'t do that')
|
||||
|
||||
signal = signal.copy()
|
||||
for i in range(len(signal) - int(np.ceil(width/2))):
|
||||
middle_element = int(i + np.floor(width/2))
|
||||
signal[middle_element] = np.median(signal[i:i+width])
|
||||
|
@ -352,10 +373,10 @@ def simple_median(signal: npt.NDArray[np.float64], width: int):
|
|||
def apply_median_method_2D(image:Union[npt.NDArray[np.float64], npt.NDArray[np.uint8]], width: int):
|
||||
if width % 2 == 0:
|
||||
raise Exception('No u won\'t do that')
|
||||
|
||||
image = image.copy()
|
||||
W_HALF = int(np.floor(width/2))
|
||||
padded_image = np.pad(image, W_HALF, mode='edge')
|
||||
print(image.shape)
|
||||
IMAGE_HEIGHT = image.shape[0] # y
|
||||
IMAGE_WIDTH = image.shape[1] # x
|
||||
|
||||
|
|
Loading…
Reference in New Issue