压缩后图像矩阵的存储与解压缩怎么实现

要求

要求:是将一张bmp图像做压缩处理,将压缩后的数据保存下来,然后读取这些数据,把图像重构出来
用到的方法:奇异值分解
大致
图片说明

出问题的地方:

cramp01方法中最后注释的两行

%cramp_all方法中把取整保存的cramp_lst = value;替换成下面的
cramp_lst = [left;val;right];
%cramp01方法中最后注释的两行
xiaoye = cat(2,cramp_lst01,cramp_lst02,cramp_lst03);
save('xiaoye.svd','xiaoye');

结果是:
对于自定义的格式文件怎么读取

fopen('xiaoye.svd')
ans =
        3

完整代码

%图像压缩与保存
function cramp01(photo,rate)
    img=imread(photo);
    img_g=double(img);
    %颜色分离
    img_gr = img_g(:,:,1);
    img_gg = img_g(:,:,2);
    img_gb = img_g(:,:,3);
    figure(1)
    subplot(2,2,1)
    image(img_gr),title('颜色分离r压缩前');
    subplot(2,2,2)
    image(img_gg),title('颜色分离g压缩前');
    subplot(2,2,3)
    image(img_gb),title('颜色分离b压缩前');
    %cramp_all奇异值分解
    cramp_lst01=cramp_all(img_gr,rate);
    cramp_lst02=cramp_all(img_gg,rate);
    cramp_lst03=cramp_all(img_gb,rate);
    %图像重构
    xiaoye = cat(3,cramp_lst01,cramp_lst02,cramp_lst03);
    piaopiao = cat(3,cramp_lst03,cramp_lst01,cramp_lst02);%重新rgb通道位置
    disp(size(xiaoye));
    figure
    image(uint8(xiaoye));
    figure
    image(uint8(piaopiao));
    %xiaoye = cat(2,cramp_lst01,cramp_lst02,cramp_lst03);
    %save('xiaoye.svd','xiaoye');

下面是奇异值分解的方法

function cramp_lst=cramp_all(pho,rate)      
    %传入的pho默认已经是bouble型
    [u,s,v]=svd(pho);
    [row,col] = size(s);
    k=floor((row*col)*rate/(row+col+1));
    left=u(:,1:k);
    val=s(1:k,1:k);
    right=v(:,1:k);
    %需要把处理后的数据约束在0-255范围内
    low=min(min(pho));
    high=max(max(pho));
    value=left*val*right';
    figure(2);
    for i=1:3
        subplot(2,2,i);
        %显示灰度图像 I,以二元素向量 [low high] 形式指定显示范围。
        imshow(value,[low,high]),title('压缩后图像');
    end
    %取整保存
    cramp_lst = value;
    %初始化大小
    %cramp_lst = [left;val;right];

执行结果:

cramp01('mjjy.bmp',0.15)

原图:
图片说明
rgb分离后:
图1:
图片说明

图2:
图片说明

重构后:
按原来颜色通道的排列顺序重构的:
图片说明
改变顺序的重构:

图片说明

😣😣😣😣

问问大佬们那个自定义格式的文件怎么较快的读取出来,存储时怎么减小存储空间浪费

全部评论
三连支持
1 回复 分享
发布于 2022-04-20 13:08
好漂亮的构图😍大佬带我飞
1 回复 分享
发布于 2022-04-20 12:48
学到了很多
2 回复 分享
发布于 2022-04-20 13:11
Mark
点赞 回复 分享
发布于 2022-04-27 00:59
太优秀了,好厉害,支持大佬
点赞 回复 分享
发布于 2022-04-20 17:37
这里面最后问的问题哪位大佬帮帮忙给点建议😘😘,提前蟹蟹啦🌸
点赞 回复 分享
发布于 2022-04-20 13:15

相关推荐

程序员牛肉:主要是因为小厂的资金本来就很吃紧,所以更喜欢有实习经历的同学。来了就能上手。 而大厂因为钱多,实习生一天三四百的就不算事。所以愿意培养你,在面试的时候也就不在乎你有没有实习(除非是同级别大厂的实习。) 按照你的简历来看,同质化太严重了。项目也很烂大街。 要么换项目,要么考研。 你现在选择工作的话,前景不是很好了。
点赞 评论 收藏
分享
评论
6
5
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务