The syntax given for singular value decomposition is svd(x). I tried it with my image, but it didn't work. Can you tell me how to work with svd for images please?
Neeta Dsouza answered .
2025-11-20
Applying Singular Value Decomposition (SVD) to an image involves treating the image as a matrix and decomposing it into three matrices. Here's how you can do it step by step:
Understand the Image as a Matrix:
(height x width).Convert the Image to a Matrix:
Perform SVD:
Reconstruct or Compress the Image:
Here's an example using Python with NumPy and Matplotlib:
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
# Load the grayscale image
image = Image.open('your_image.jpg').convert('L') # Convert to grayscale
image_matrix = np.array(image)
# Perform SVD
U, S, Vt = np.linalg.svd(image_matrix, full_matrices=False)
# Reconstruct the image using the first k singular values
k = 50 # Number of singular values to keep
S_k = np.diag(S[:k]) # Truncated diagonal matrix
U_k = U[:, :k] # Truncated U matrix
Vt_k = Vt[:k, :] # Truncated V^T matrix
compressed_image = np.dot(U_k, np.dot(S_k, Vt_k))
# Plot the original and compressed images
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.title("Original Image")
plt.imshow(image_matrix, cmap='gray')
plt.axis('off')
plt.subplot(1, 2, 2)
plt.title(f"Compressed Image (k={k})")
plt.imshow(compressed_image, cmap='gray')
plt.axis('off')
plt.show()
If the image is in color, you need to apply SVD to each channel separately:
# Load the RGB image
image = Image.open('your_image.jpg')
image_array = np.array(image)
# Initialize an empty array for the compressed image
compressed_image = np.zeros_like(image_array)
# Perform SVD on each channel
for i in range(3): # Loop through R, G, B channels
U, S, Vt = np.linalg.svd(image_array[:, :, i], full_matrices=False)
S_k = np.diag(S[:k])
U_k = U[:, :k]
Vt_k = Vt[:k, :]
compressed_image[:, :, i] = np.dot(U_k, np.dot(S_k, Vt_k))
# Ensure values are in the valid range [0, 255]
compressed_image = np.clip(compressed_image, 0, 255).astype('uint8')
# Display the compressed image
plt.imshow(compressed_image)
plt.title(f"Compressed RGB Image (k={k})")
plt.axis('off')
plt.show()
numpy.linalg.svd() for the decomposition.Let me know if you have additional questions! ????