wmx_1919 发表于 2009-5-17 13:57

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

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

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

[ 本帖最后由 ChaChing 于 2009-5-18 09:33 编辑 ]

friendchj 发表于 2009-5-17 15:38

不鼓励直接求程序,建议楼主自己编写,遇到问题再来求助。

wmx_1919 发表于 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,,'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,,'P1.*x',Mask);
I2=blkproc(B2,,'P1*x*P2',T',T);
subplot(121),imshow(I); subplot(122),imshow(I2)

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

[ 本帖最后由 ChaChing 于 2009-5-18 09:24 编辑 ]

xiezhh 发表于 2009-5-17 17:25

看看idct函数行不行

friendchj 发表于 2009-5-17 20:03

回复 楼主 wmx_1919 的帖子

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

wmx_1919 发表于 2009-5-17 21:03

回复 5楼 friendchj 的帖子

我就是不怎么懂“p1.*x”和"p1*x*p2"这两个参数分别是什么意思,有什么差别,为什么用就能实现不同的功能呢、。?

ChaChing 发表于 2009-5-18 10:06

回复 5楼 friendchj 的帖子

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

ChaChing 发表于 2009-5-18 10:08

回复 6楼 wmx_1919 的帖子

p1.*x”和"p1*x*p2"这两个参数分别是代表什么意思?
好像已非编程问题, 而是专业问题了!

wmx_1919 发表于 2009-5-18 10:31

回复 7楼 ChaChing 的帖子

不懂:@( ···

friendchj 发表于 2009-5-18 12:39

回复 7楼 ChaChing 的帖子

不太清楚,不过感觉这种形式挺好的,不知将来会演变成哪种更好的形式

ChaChing 发表于 2009-5-18 21:39

回复 10楼 friendchj 的帖子

谢谢回覆! 多些功能当然是不错!
image是来此边看边学的, 可说完全不懂!
喔, LZ怎知道有那种形式? help都没有的

wmx_1919 发表于 2009-5-19 13:21

回复 11楼 ChaChing 的帖子

也不是完全不懂,似懂非懂的,不过图像处理出来了……

花如月 发表于 2009-5-19 16:48

这个用法肯定是没有错的,是书上的例程。只要理解以下几点,就容易了:
(1)Mask矩阵是用来压缩dct系数的
(2)有些指令是可以等效替换的,那个程序并不是最简洁的,只是告诉dct和逆dct的计算步骤
blkproc是分块处理函数,用法得等效形式如下:
fun = @dct2;
J = blkproc(I,,fun);
这2条语句可以等效为J = blkproc(I,,‘dct2’);
B=blkproc(I,,'P1*x*P2',T,T');%进行二维dct变换,可以换为B=blkproc(I,,'dct2');
B2=blkproc(B,,'P1.*x',Mask); %系数压缩
I2=blkproc(B2,,'P1*x*P2',T',T);%进行二维dct逆变换,可以换为I2=blkproc(B2,,'idct2');

对于不分块的情形,可以进行简单验证:
>> a=magic(3);b=blkproc(a,,'P1*x*P2',t,t');c=blkproc(a,,'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
结果基本一致

wmx_1919 发表于 2009-5-19 21:12

回复 13楼 花如月 的帖子

非常感谢!!
页: [1]
查看完整版本: 求:将压缩图像的还原程序,用我这个对么?