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

要求

要求:是将一张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

相关推荐

04-08 23:14
已编辑
南阳理工学院 算法工程师
本人情况:26届双非本科,两段实习经历,目前拿到的都是实习的offer,一个校招的都没有,他们都说先实习,然后等拿到毕业证了直接转正,我又害怕干三个月给我叉出去面试题也发一下吧### 杭州问尔信息技术后端登录你是怎么做的?JWT令牌你了解过吗?他虽然是一段字符串,他表达了什么东西?怎么解析出来信息和过期时间?JWT令牌怎么续期?如果我拉黑一个账号,要怎么做?两种方案(有无redis)mongodb和mysql的区别?mongodb和mysql分别实用于什么项目?选型你会怎么选?数据库的事务,那些地方需要使用,那些地方不需要使用?他会影响什么性能?mysql和pgsql有什么差异你知道吗?消息队列 redis也有,为什么要用mq?前后端会部署吗?docker会用吗?内部通信前端 async和 await你知道吗?异步编程的原理是什么?vue3 为什么你改变一个字符串 前端会跟着改动AI工具会用什么?你会怎么用?### 仲财通常用的锁有哪些synchronize和ReentrantLock的区别分布式锁了解吗?分布式事务mysql表字段sql优化什么时候用索引索引什么时候会失效mysql事务ioc一些项目应用问题### 观妙科技项目问题...zset的架构是什么样子的线程池突然队列被打满了怎么办?如果上游和下游都无法控制,该怎么维护select * from user where age>20 order by update_time 索引设计检索过程是什么样的冒泡排序和快排,有什么区别怎么判断链表有没有环### 观妙科技-二面项目部分...线程池的核心参数有哪些你是怎么用线程池的JMMG1模型跳表介绍一下平衡二叉树TCP为什么要三次握手?说一下hashmap红黑树的特征你有什么学习的方法
牛马人的牛马人生:对学院本而言很强了
点赞 评论 收藏
分享
评论
6
5
分享

创作者周榜

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