声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1499|回复: 13

[编程技巧] 求:将压缩图像的还原程序,用我这个对么?

[复制链接]
发表于 2009-5-17 13:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
利用离散余弦变换对图像进行压缩后,将压缩图像还原的程序,急需!!谢谢

***** 使用编辑合并一贴是好习惯, 但别人若已回覆, 建议不宜再修改! by ChaChing *****

[ 本帖最后由 ChaChing 于 2009-5-18 09:33 编辑 ]
回复
分享到:

使用道具 举报

发表于 2009-5-17 15:38 | 显示全部楼层
不鼓励直接求程序,建议楼主自己编写,遇到问题再来求助。

评分

1

查看全部评分

 楼主| 发表于 2009-5-17 16:48 | 显示全部楼层

回复 沙发 friendchj 的帖子

菜鸟太菜了, 不懂……

====== wmx_1919 于 2009-5-17 19:17 ======
I=imread('G:\lena.bmp'); I=im2double(I); T=dctmtx(8);
B=blkproc(I,[8,8],'P1*x*P2',T,T');
Mask=[1 1 1 1 0 0 0 0; 1 1 1 0 0 0 0 0; 1 1 0 0 0 0 0 0; 1 0 0 0 0 0 0 0;
           0 0 0 0 0 0 0 0; 0 0 0 0 0 0 0 0; 0 0 0 0 0 0 0 0; 0 0 0 0 0 0 0 0];
B2=blkproc(B,[8 8],'P1.*x',Mask);
I2=blkproc(B2,[8 8],'P1*x*P2',T',T);
subplot(121),imshow(I); subplot(122),imshow(I2)

B2=blkproc(B,[8 8],'P1.*x',Mask); I2=blkproc(B2,[8 8],'P1*x*P2',T',T);
这两句程序 有什么区别????分别是什么意思呢?谢谢
这个程序不是我的%
====== wmx_1919 于 2009-5-17 19:17 ======

[ 本帖最后由 ChaChing 于 2009-5-18 09:24 编辑 ]
发表于 2009-5-17 17:25 | 显示全部楼层
看看idct函数行不行

评分

1

查看全部评分

发表于 2009-5-17 20:03 | 显示全部楼层

回复 楼主 wmx_1919 的帖子

BLKPROC调用形式:
B = blkproc(A,[m n],[mborder nborder],fun,...)
B = blkproc(A,'indexed',...)
B = blkproc(A,[m n],fun, parameter1, parameter2, ...)
前两个help里有,就不说了。对于B = blkproc(A,[m n],fun, parameter1, parameter2, ...),parameter1, parameter2是要传给fun函数的参数。例如对于B2=blkproc(B,[8 8],'P1.*x',Mask);,是将参数mask传给函数'P1.x'中的P1,x是B的一块(8*8)。

评分

1

查看全部评分

 楼主| 发表于 2009-5-17 21:03 | 显示全部楼层

回复 5楼 friendchj 的帖子

我就是不怎么懂“p1.*x”和"p1*x*p2"这两个参数分别是什么意思,有什么差别,为什么用就能实现不同的功能呢、。?
发表于 2009-5-18 10:06 | 显示全部楼层

回复 5楼 friendchj 的帖子

一开始很好奇, 怎会有调用形式help里头没有写到的!
找下blkproc.m瞄了下, 还真是如此, 参数调用形式未来可能淘汰的
表示旧版可能有此形式, 将来新版就没有了, 目前算过渡吧!
个人理解对吗?
发表于 2009-5-18 10:08 | 显示全部楼层

回复 6楼 wmx_1919 的帖子

p1.*x”和"p1*x*p2"这两个参数分别是代表什么意思?
好像已非编程问题, 而是专业问题了!
 楼主| 发表于 2009-5-18 10:31 | 显示全部楼层

回复 7楼 ChaChing 的帖子

不懂:@( ···
发表于 2009-5-18 12:39 | 显示全部楼层

回复 7楼 ChaChing 的帖子

不太清楚,不过感觉这种形式挺好的,不知将来会演变成哪种更好的形式
发表于 2009-5-18 21:39 | 显示全部楼层

回复 10楼 friendchj 的帖子

谢谢回覆! 多些功能当然是不错!
image是来此边看边学的, 可说完全不懂!
喔, LZ怎知道有那种形式? help都没有的
 楼主| 发表于 2009-5-19 13:21 | 显示全部楼层

回复 11楼 ChaChing 的帖子

也不是完全不懂,似懂非懂的,不过图像处理出来了……
发表于 2009-5-19 16:48 | 显示全部楼层
这个用法肯定是没有错的,是书上的例程。只要理解以下几点,就容易了:
(1)Mask矩阵是用来压缩dct系数的
(2)有些指令是可以等效替换的,那个程序并不是最简洁的,只是告诉dct和逆dct的计算步骤
blkproc是分块处理函数,用法得等效形式如下:
fun = @dct2;
J = blkproc(I,[8 8],fun);
这2条语句可以等效为J = blkproc(I,[8 8],‘dct2’);
B=blkproc(I,[8,8],'P1*x*P2',T,T');%进行二维dct变换,可以换为B=blkproc(I,[8,8],'dct2');
B2=blkproc(B,[8 8],'P1.*x',Mask); %系数压缩
I2=blkproc(B2,[8 8],'P1*x*P2',T',T);%进行二维dct逆变换,可以换为I2=blkproc(B2,[8,8],'idct2');

对于不分块的情形,可以进行简单验证:
>> a=magic(3);b=blkproc(a,[3,3],'P1*x*P2',t,t');c=blkproc(a,[3,3],'dct2');d=dct2(a);
>> b,c,d

b =

   15.0000         0    0.0000
    0.0000   -0.0000    6.9282
    0.0000    3.4641    0.0000


c =

   15.0000         0         0
         0         0    6.9282
         0    3.4641         0


d =

   15.0000         0         0
         0         0    6.9282
         0    3.4641         0
结果基本一致

评分

1

查看全部评分

 楼主| 发表于 2009-5-19 21:12 | 显示全部楼层

回复 13楼 花如月 的帖子

非常感谢!!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-22 11:30 , Processed in 0.059443 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表