EMMA8459 发表于 2006-5-17 15:25

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

<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,,'P1*x*P2',dctm,dctm.');<BR>DCTvar=im2col(imageDCT,,'distinct').';<BR>n=size(DCTvar,1);<BR>DCTvar=(sum(DCTvar.*DCTvar)-(sum(DCTvar)/n).^2)/n;<BR>=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,,'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>

EMMA8459 发表于 2006-5-17 18:34

顶一下,各位大人帮忙看一下,谢谢

EMMA8459 发表于 2006-5-18 11:15

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

有谁懂吗,帮忙指点一下好吗,谢谢,,真的很急

suffer 发表于 2006-5-18 11:38

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

分别取RGB三色分量进行变换,然后再合成不行吗

EMMA8459 发表于 2006-5-18 11:57

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

我知道如何提取RGB分量。可是如果继续运用下面的程序,做出来好象还是灰度的啊

qiuqia17 发表于 2006-5-18 12:03

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

<P>看看 H.264 原代码</P>

happy 发表于 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源代码吗?

EMMA8459 发表于 2006-5-18 17:20

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

<P>教授,H,264好象原代码都是C语言啊</P>

paytiy 发表于 2006-5-19 12:13

首先将两个图像分为<FONT face="宋体, MS Song">8</FONT>×<FONT face="宋体, MS Song">8 </FONT>块,然后再对每个块进行二维<FONT face="宋体, MS Song">DCT </FONT>变换。matlan 程序怎么实现的!帮帮我吧 !马上就要答辩拉

paytiy 发表于 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>

EMMA8459 发表于 2006-5-20 12:09

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

能不能具体的分析一下程序啊

happy 发表于 2006-5-20 13:56

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

只要分别对<BR>I(:,:,1)<BR>I(:,:,2)<BR>I(:,:,3)<BR>作上述变换就行了<BR>变换再合成<BR><BR>matlab不是自带dct2吗?干吗还写上面这个程序?

EMMA8459 发表于 2006-5-20 16:09

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

谢谢教授,因为要丢弃部分DCT系数,所以要分块,合成只要把三个矩阵相加吗

happy 发表于 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;

EMMA8459 发表于 2006-5-20 16:18

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

明白了,非常感谢
页: [1]
查看完整版本: 求助,如何对RGB彩色图象进行DCT分8*8子块变换