% 加载需要压缩的图像
original_image = imread(‘your_image.jpg’);
imshow(original_image);
title(‘Original Image’);
% 将彩色图像转换为灰度图像
gray_image = rgb2gray(original_image);
% 将灰度图像转换为 double 类型
gray_image = double(gray_image);
% 进行主成分分析(PCA)
[U, S, V] = svd(gray_image);
compressed_ratio = 0.1; % 设定压缩比,这里为 0.1
k = round(compressed_ratio * min(size(gray_image))); % 计算保留的主成分数
% 保留前 k 个主成分
U_compressed = U(:, 1:k);
S_compressed = S(1:k, 1:k);
V_compressed = V(:, 1:k);
% 重构压缩后的图像
compressed_image = U_compressed * S_compressed * V_compressed’;
compressed_image = uint8(compressed_image);
% 计算原始图像和压缩后图像的贡献率
total_energy = sum(diag(S).^2);
compressed_energy = sum(diag(S_compressed).^2);
contribution_rate = compressed_energy / total_energy;
% 显示压缩后的图像
figure;
imshow(compressed_image);
title(‘Compressed Image’);
% 显示压缩比和贡献率
disp(['压缩比: ', num2str(1/compressed_ratio)]);
disp(['贡献率: ', num2str(contribution_rate)]);