我已阅读并在matlab中转换为灰度
I=imread('tbilisi.jpg');
gray=rgb2gray(I);
现在我已经完成了这张图片的svd(当然首先我已经转换为双格式)
>> [U E V]=svd(double(gray));
让我们展示我们所拥有的每个组件的大小
>> whos
Name Size Bytes Class Attributes
E 575x1000 4600000 double
I 575x1000x3 1725000 uint8
U 575x575 2645000 double
V 1000x1000 8000000 double
gray 575x1000 575000 uint8
现在让我们选择前40个组件和近似原始图像
>> approximated=uint8(U(:,1:40)*E(1:40,1:40)*V(:,1:40)');
现在让我们再次检查尺寸
>> whos
Name Size Bytes Class Attributes
E 575x1000 4600000 double
I 575x1000x3 1725000 uint8
U 575x575 2645000 double
V 1000x1000 8000000 double
approximated 575x1000 575000 uint8
gray 575x1000 575000 uint8
近似且灰色具有相同的字节,其中是压缩?提前谢谢
答案 0 :(得分:4)
压缩图像是编码的图像。 SVD组件是您应该存储的组件。例如,
compressed = {U(:,1:40), E(1:40,1:40), V(:,1:40)'}
可能是您的压缩图像。 compressed
的信息少于gray
(尽管所有值都是双倍的,因此每个值占用的空间是一个输入图像像素的8倍;转换为单精度浮点数会有所帮助,例如)。
将组件相乘以形成approximated
时,您正在解码(“解压缩”)图像。结果必须与grey
图像的像素数相同,因此占用的空间量完全相同。
请注意,此类压缩通常通过将图像分割为小方块来完成。每个方块被独立压缩,并且选择存储的组件的数量使得与输入的差异不是太大。这允许用细节很少的部分图像用比具有大量细节的部分更少的字节来表示。
答案 1 :(得分:1)
术语中存在混淆:近似图像!=压缩图像。
原始(灰色)和解码(近似)图像应尽可能相似 - 包括尺寸。
压缩的“图像”不是图像。它是您存储在文件中并发送给您的朋友的字节集。在这种情况下,它是截断的U,E和V矩阵,希望小于解码图像。当您的朋友获取压缩文件时,她可以创建解码图像。