图象DCT变换的MATLAB实现_精品文档Word文档格式.doc
《图象DCT变换的MATLAB实现_精品文档Word文档格式.doc》由会员分享,可在线阅读,更多相关《图象DCT变换的MATLAB实现_精品文档Word文档格式.doc(2页珍藏版)》请在冰豆网上搜索。
end
[Data,map]=imread(fname);
%读取图像数据
%new=rgb2gray(Data);
%imwrite(new,'
new.bmp'
bmp'
)
%Data=im2bw(Data,map,0.6);
%im2bw转为二进制阈值0.6
%Data=+Data;
%逻辑格式转为浮点格式
Data=rgb2gray(Data);
subplot(1,2,1);
%准备显示两幅图像
imshow(Data);
functionDCTcode;
globalData;
%全局变量,用于共享图像数据
[m,n]=size(Data);
fid=fopen('
dct.bin'
w+'
%创建dct.bin用存储DCT和BTC混合编码后的二进制文件。
%补0使尺寸为4的整数倍以便分块
m1=4*ceil(m/4);
n1=4*ceil(n/4);
Datatemp=zeros(m1,n1);
Datatemp(1:
m,1:
n)=Data;
%
fwrite(fid,m1,'
long'
fwrite(fid,n1,'
%在文件中记录图像大小
block=zeros(4,4);
%4X4大小的子带
forj=1:
4:
n
fori=1:
m
fort=0:
1:
3
forp=0:
3
block(1+t,1+p)=Datatemp(i+t,j+p);
%取出4X4数据块
end
end
%对变换后数据进编码后存储或发送,只取其中的2X2数据
DctBlock=dct2(block);
%存储(发送)编码文件
fwrite(fid,DctBlock(1,1),'
bit12'
%直流分量,用12bit量化
fwrite(fid,DctBlock(1,2),'
bit9'
%用9bit量化非直流分量
fwrite(fid,DctBlock(2,1),'
fwrite(fid,DctBlock(2,2),'
fclose(fid);
functionIDctcode;
r'
m=fread(fid,1,'
n=fread(fid,1,'
data=zeros(m,n);
%用于存放图像数据
temp=zeros(4,4);
%读取方块数据
m
block(1,1)=fread(fid,1,'
block(1,2)=fread(fid,1,'
block(2,1)=fread(fid,1,'
block(2,2)=fread(fid,1,'
temp=idct2(block);
Data(i+t,j+p)=temp(1+t,1+p);
data=uint8(Data);
subplot(1,2,2);
imshow(data);
%显示图像