Spaces:
Sleeping
Sleeping
| import cv2 | |
| import numpy as np | |
| from matplotlib import pyplot as plt | |
| def load_image(image): | |
| if len(image.shape) == 2: # Grayscale image | |
| return image, 'grayscale' | |
| elif len(image.shape) == 3: # RGB image | |
| return image, 'rgb' | |
| else: | |
| raise ValueError("Unsupported image format") | |
| # 1. Histogram Equalization | |
| def histogram_equalization(image): | |
| if len(image.shape) == 3: # Convert to grayscale if RGB | |
| image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) | |
| equalized_img = cv2.equalizeHist(image) | |
| return equalized_img | |
| # 2. Sobel Edge Detection | |
| def sobel_edge_detection(image): | |
| if len(image.shape) == 3: # Convert to grayscale if RGB | |
| image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) | |
| sobel_x = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3) | |
| sobel_y = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=3) | |
| sobel_combined = np.sqrt(sobel_x**2 + sobel_y**2) | |
| sobel_combined = cv2.normalize(sobel_combined, None, 0, 255, cv2.NORM_MINMAX) # Added normalization | |
| return sobel_combined | |
| # 3. Gaussian Blur | |
| def gaussian_blur(image, kernel_size=5): | |
| blurred_img = cv2.GaussianBlur(image, (kernel_size, kernel_size), 0) | |
| return blurred_img | |
| # 4. Laplacian of Gaussian (LoG) | |
| def laplacian_of_gaussian(image): | |
| if len(image.shape) == 3: # Convert to grayscale if RGB | |
| image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) | |
| blurred_img = cv2.GaussianBlur(image, (3, 3), 0) | |
| log_img = cv2.Laplacian(blurred_img, cv2.CV_64F) | |
| log_img = cv2.normalize(log_img, None, 0, 255, cv2.NORM_MINMAX) # Added normalization | |
| return log_img | |
| # 5. Median Filtering | |
| def median_filter(image, kernel_size=5): | |
| median_img = cv2.medianBlur(image, kernel_size) | |
| return median_img | |
| # Frequency Domain Transforms | |
| def fourier_transform(image): | |
| if len(image.shape) == 3: # Convert to grayscale if RGB | |
| image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) | |
| dft = np.fft.fft2(image) | |
| dft_shift = np.fft.fftshift(dft) | |
| magnitude_spectrum = 20 * np.log(np.abs(dft_shift)) | |
| return magnitude_spectrum | |
| def discrete_cosine_transform(image): | |
| if len(image.shape) == 3: # Convert to grayscale if RGB | |
| image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) | |
| dct = cv2.dct(np.float32(image) / 255.0) | |
| return dct | |
| def high_pass_filter(image): | |
| if len(image.shape) == 3: # Convert to grayscale if RGB | |
| image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) | |
| dft = np.fft.fft2(image) | |
| dft_shift = np.fft.fftshift(dft) | |
| rows, cols = image.shape | |
| crow, ccol = rows // 2, cols // 2 | |
| mask = np.ones((rows, cols), np.float64) # Changed to float64 | |
| mask[crow-30:crow+30, ccol-30:ccol+30] = 0 | |
| fshift = dft_shift * mask | |
| f_ishift = np.fft.ifftshift(fshift) | |
| img_back = np.fft.ifft2(f_ishift) | |
| img_back = np.abs(img_back) | |
| return img_back | |
| def low_pass_filter(image): | |
| if len(image.shape) == 3: # Convert to grayscale if RGB | |
| image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) | |
| dft = np.fft.fft2(image) | |
| dft_shift = np.fft.fftshift(dft) | |
| rows, cols = image.shape | |
| crow, ccol = rows // 2, cols // 2 | |
| mask = np.zeros((rows, cols), np.float64) # Changed to float64 | |
| mask[crow-30:crow+30, ccol-30:ccol+30] = 1 | |
| fshift = dft_shift * mask | |
| f_ishift = np.fft.ifftshift(fshift) | |
| img_back = np.fft.ifft2(f_ishift) | |
| img_back = np.abs(img_back) | |
| return img_back | |
| def wavelet_transform(image): | |
| import pywt | |
| if len(image.shape) == 3: # Convert to grayscale if RGB | |
| image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) | |
| coeffs2 = pywt.dwt2(image, 'haar') | |
| LL, (LH, HL, HH) = coeffs2 | |
| return LL | |