声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2365|回复: 14

求助,如何对RGB彩色图象进行DCT分8*8子块变换

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

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

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

x
<P>function MSE=dct2(check,trueImage,Cnum)<BR>%trueImage为待压缩的原图像,Cnum为压缩时保留的系数个数<BR>%check&lt;1×6&gt;为checkbox的选项数据,控制输出<BR>h = waitbar(0,'Please wait...');    %等待条<BR>        for i=1:100,<BR>            waitbar(i/100,h)<BR>        end<BR>        close(h)<BR>file=trueImage;</P>
<P>trueImage=imread(trueImage);<BR>trueImage1=trueImage;<BR>if jpgread(file)==0      %导入jpgread函数,判断是否为彩色图像<BR>trueImage1=rgb2gray(trueImage);     %如果是彩色图像转成灰度的<BR>end<BR>trueImage=double(trueImage1)/255;<BR>dctm=dctmtx(8);<BR>%进行基于子块的DCT变换<BR>imageDCT=blkproc(trueImage,[8 8],'P1*x*P2',dctm,dctm.');<BR>DCTvar=im2col(imageDCT,[8 8],'distinct').';<BR>n=size(DCTvar,1);<BR>DCTvar=(sum(DCTvar.*DCTvar)-(sum(DCTvar)/n).^2)/n;<BR>[dum,order]=sort(DCTvar);<BR>Cnum=64-Cnum;<BR>mask=ones(8,8);     <BR>mask(order(1:Cnum))=zeros(1,Cnum);<BR>im8x8=zeros(9,9);<BR>im8x8(1:8,1:8)=mask;<BR>im128x128=kron(im8x8(1:8,1:8),ones(16));<BR>if check(2)==1<BR>figure('name','DCT系数');<BR>imshow(im128x128);<BR>title('DCT系数');<BR>end<BR>if check(3)==1<BR>figure('name','8*8DCT变换系数图'); <BR>mesh(imageDCT);     <BR>title('8*8DCT变换系数图');<BR>end<BR>dctm=dctmtx(8);<BR>newImage=blkproc(imageDCT,[8 8],'P1*(x.*P2)*P3',dctm.',mask(1:8,1:8),dctm);<BR>if check(5)==1<BR>figure('name','重构图像对比');<BR>subplot(1,2,1);<BR>imshow(trueImage1);<BR>title('原始图像');<BR>subplot(1,2,2);<BR>    imshow(newImage);<BR>title('重构图像');<BR>end<BR>if check(6)==1<BR>figure('name','误差图像');<BR>imshow(trueImage-newImage+0.45);    %对误差图像曾亮显示<BR>title('误差图像');<BR>end<BR>error=(trueImage-newImage).^2;   %均方误差计算<BR>A=sum(error(:));<BR>B=prod(size(trueImage));<BR>MSE=A/B;<BR>这是灰度变换,彩色变换如何修改,请HAPPY教授指点,谢谢</P>
回复
分享到:

使用道具 举报

 楼主| 发表于 2006-5-17 18:34 | 显示全部楼层
顶一下,各位大人帮忙看一下,谢谢
 楼主| 发表于 2006-5-18 11:15 | 显示全部楼层

回复:(EMMA8459)顶一下,各位大人帮忙看一下,谢谢

有谁懂吗,帮忙指点一下好吗,谢谢,,真的很急
发表于 2006-5-18 11:38 | 显示全部楼层

回复:(EMMA8459)求助,如何对RGB彩色图象进行DCT分8...

分别取RGB三色分量进行变换,然后再合成不行吗
 楼主| 发表于 2006-5-18 11:57 | 显示全部楼层

回复:(suffer)回复:(EMMA8459)求助,如何对RGB彩...

我知道如何提取RGB分量。可是如果继续运用下面的程序,做出来好象还是灰度的啊
发表于 2006-5-18 12:03 | 显示全部楼层

回复:(EMMA8459)求助,如何对RGB彩色图象进行DCT分8...

<P>看看 H.264 原代码</P>
发表于 2006-5-18 16:27 | 显示全部楼层

回复:(qiuqia17)回复:(EMMA8459)求助,如何对RGB...

<DIV class=quote><B>以下是引用<I>qiuqia17</I>在2006-5-18 12:03:44的发言:</B><BR>
<P>看看 H.264 原代码</P></DIV>
<br>H.264有matlab源代码吗?
 楼主| 发表于 2006-5-18 17:20 | 显示全部楼层

回复:(happy)回复:(qiuqia17)回复:(EMMA8459)...

<P>教授,H,264好象原代码都是C语言啊</P>
发表于 2006-5-19 12:13 | 显示全部楼层
首先将两个图像分为<FONT face="宋体, MS Song">8</FONT>×<FONT face="宋体, MS Song">8 </FONT>块,然后再对每个块进行二维<FONT face="宋体, MS Song">DCT </FONT>变换。matlan 程序怎么实现的!帮帮我吧 !马上就要答辩拉
发表于 2006-5-19 12:13 | 显示全部楼层
首先将两个图像分为<FONT face="宋体, MS Song">8</FONT>×<FONT face="宋体, MS Song">8 </FONT>块,然后再对每个块进行二维<FONT face="宋体, MS Song">DCT </FONT>变换。matlab 程序怎么实现的!帮帮我吧 !马上就要答辩拉<BR>
 楼主| 发表于 2006-5-20 12:09 | 显示全部楼层

回复:(suffer)回复:(EMMA8459)求助,如何对RGB彩...

能不能具体的分析一下程序啊
发表于 2006-5-20 13:56 | 显示全部楼层

回复:(EMMA8459)求助,如何对RGB彩色图象进行DCT分8...

只要分别对<BR>I(:,:,1)<BR>I(:,:,2)<BR>I(:,:,3)<BR>作上述变换就行了<BR>变换再合成<BR><BR>matlab不是自带dct2吗?干吗还写上面这个程序?
 楼主| 发表于 2006-5-20 16:09 | 显示全部楼层

回复:(happy)回复:(EMMA8459)求助,如何对RGB彩色...

谢谢教授,因为要丢弃部分DCT系数,所以要分块,合成只要把三个矩阵相加吗
发表于 2006-5-20 16:12 | 显示全部楼层

回复:(EMMA8459)求助,如何对RGB彩色图象进行DCT分8...

不是相加是把二维矩阵和成为三位彩色图片矩阵<BR><BR>比如分析完后分别为I1,I2,I3<BR>J(:,:1)=I1;<BR>J(:,:2)=I2;<BR>J(:,:3)=I3;
 楼主| 发表于 2006-5-20 16:18 | 显示全部楼层

回复:(happy)回复:(EMMA8459)求助,如何对RGB彩色...

明白了,非常感谢
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-14 08:50 , Processed in 0.072184 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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