Image Compression via Matrix Rank Reduction Algorithm
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.image import imread

# 1. Load an example image (grayscale)
img = imread("mai_phuong_thuy.jpg")   # <-- replace with your image path

if img.ndim == 3:  # convert to grayscale if RGB
    img = img.mean(axis=2)

U, S, Vt = np.linalg.svd(img, full_matrices=False)

def compress_image(k):
    """
    Reconstruct image using only top-k singular values
    """
    Uk = U[:, :k]
    Sk = np.diag(S[:k])
    Vk = Vt[:k, :]
    return Uk @ Sk @ Vk

# 3. Try different ranks
ranks = [60]

plt.figure(figsize=(12, 8))

# Original
plt.subplot(2, 3, 1)
plt.imshow(img, cmap='gray')
plt.title("Original")
plt.axis("off")

# Compressed versions
for i, k in enumerate(ranks, start=2):
    compressed = compress_image(k)
    plt.subplot(2, 3, i)
    plt.imshow(compressed, cmap='gray')
    plt.title(f"Rank {k}")
    plt.axis("off")

plt.tight_layout()
plt.show()
Want to Receive Updates On Fastest AI Models, Successful AI Startups and New Hiring Candidates. Subscribe To My Newsletters
Subscribe