Project
Ans 1. import numpy as np
from skimage import io, img_as_float
from skimage.filters import gaussian
from scipy.fft import fft2, ifft2, fftshift, ifftshift
import matplotlib.pyplot as plt
def psnr(img1, img2):
mse = np.mean((img1 - img2) ** 2)
if mse == 0:
return float('inf')
max_pixel = 1.0
return 20 * np.log10(max_pixel / np.sqrt(mse))
def frequency_domain_filter(image):
f = fftshift(fft2(image))
rows, cols = image.shape
crow, ccol = rows//2, cols//2
f[crow-30:crow+30, ccol-30:ccol+30] = 0
image_filtered = np.abs(ifft2(ifftshift(f)))
return image_filtered
def spatial_domain_filter(image):
image_filtered = gaussian(image, sigma=1)
return image_filtered
image = img_as_float(io.imread('Image_3.png', as_gray=True))
gamma_corrected = np.power(image, 2.2)
filtered_freq = frequency_domain_filter(gamma_corrected)
filtered_spatial = spatial_domain_filter(gamma_corrected)
plt.figure(figsize=(12, 4))
plt.subplot(1, 3, 1)
plt.imshow(image, cmap='gray')
plt.title('Original Image')
plt.axis('off')
plt.subplot(1, 3, 2)
plt.imshow(filtered_freq, cmap='gray')
plt.title('Frequency Domain Filtered')
plt.axis('off')
print("PSNR Frequency Domain:", psnr(image, filtered_freq))
plt.subplot(1, 3, 3)
plt.imshow(filtered_spatial, cmap='gray')
plt.title('Spatial Domain Filtered')
plt.axis('off')
print("PSNR Spatial Domain:", psnr(image, filtered_spatial))
plt.tight_layout()
plt.show()
Ans 2. import numpy as np
from skimage import io, transform, feature, img_as_float
import matplotlib.pyplot as plt
image = img_as_float(io.imread('Image_3.png', as_gray=True))
coordinates = feature.corner_harris(image)
peaks = feature.corner_peaks(coordinates, min_distance=5)
translated = transform.warp(image, transform.AffineTransform(translation=(25, 25)))
rotated = transform.rotate(image, angle=45)
scaled = transform.rescale(image, scale=0.5)
fig, axes = plt.subplots(1, 4, figsize=(16, 4))
titles = ['Original', 'Translated', 'Rotated', 'Scaled']
images = [image, translated, rotated, scaled]
for ax, img, title in zip(axes, images, titles):
ax.imshow(img, cmap='gray')
if title == 'Original':
ax.plot(peaks[:, 1], peaks[:, 0], 'r.')
ax.set_title(title)
ax.axis('off')
plt.tight_layout()
plt.show()
Ans 3. from skimage import morphology, io, img_as_float
from skimage.filters import rank
import matplotlib.pyplot as plt
import numpy as np
image = img_as_float(io.imread('Image_3.png', as_gray=True))
selem = morphology.disk(1)
opened = morphology.opening(image, selem)
closed = morphology.closing(image, selem)
tophat = morphology.white_tophat(image, selem)
blackhat = morphology.black_tophat(image, selem)
combined = image + tophat - blackhat
def psnr(img1, img2):
mse = np.mean((img1 - img2) ** 2)
if mse == 0:
return float('inf')
max_pixel = 1.0
return 20 * np.log10(max_pixel / np.sqrt(mse))
fig, axes = plt.subplots(1, 5, figsize=(20, 4))
titles = ['Opened', 'Closed', 'Tophat', 'Blackhat', 'Combined']
images = [opened, closed, tophat, blackhat, combined]
for ax, img, title in zip(axes, images, titles):
ax.imshow(img, cmap='gray')
ax.set_title(f'{title} - PSNR: {psnr(image, img):.2f}')
ax.axis('off')
plt.tight_layout()
plt.show()