基于svd的图像压缩matlab
时间: 2023-09-30 11:06:26 浏览: 115
图像压缩是一种常见的数据压缩技术,它可以通过减少图像中冗余数据的数量来减小图像文件的大小。SVD(奇异值分解)是一种常用的矩阵分解技术,可以在图像压缩中使用。以下是基于SVD的图像压缩的Matlab代码:
```
% 读入图像
im = imread('image.jpg');
% 将图像转化为灰度图像
im_gray = rgb2gray(im);
% 将灰度图像转化为 double 类型
im_double = im2double(im_gray);
% 对图像进行SVD分解
[U,S,V] = svd(im_double);
% 取前k个奇异值
k = 100;
S_k = S(1:k,1:k);
% 重构图像
im_reconstructed = U(:,1:k)*S_k*V(:,1:k)';
% 显示原图像和压缩后的图像
subplot(1,2,1),imshow(im_gray),title('Original Image');
subplot(1,2,2),imshow(im_reconstructed),title(['Compressed Image (',num2str(k),' singular values)']);
```
在上述代码中,我们首先读入一张彩色图像,并将其转化为灰度图像。然后,我们将灰度图像转化为double类型,并使用SVD对其进行分解。我们取前k个奇异值,然后使用U、S和V的前k列来重构图像。最后,我们将原始图像和压缩后的图像显示在同一张图像上,以便比较它们的质量。
需要注意的是,压缩后的图像质量取决于取的奇异值数量,取得越少,压缩比就越高,但图像质量也越差。在实际应用中,需要根据具体需要进行调整。
阅读全文