function OpenFile
global gmain Data;
[fname,pname]=uigetfile('*.bmp','打开文件');
if fname==0
return;
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);
function DCTcode;
global Data;%全局变量,用于共享图像数据
[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,'long'); %在文件中记录图像大小
block=zeros(4,4); % 4X4大小的子带
for j=1:4:n
for i=1:4:m
for t=0:1:3
for p=0:1: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),'bit9');
fwrite(fid,DctBlock(2,2),'bit9');
end
end
fclose(fid);
function IDctcode;
fid=fopen('dct.bin','r');
m=fread(fid,1,'long');n=fread(fid,1,'long');
data=zeros(m,n);%用于存放图像数据
temp=zeros(4,4);
block=zeros(4,4);
%读取方块数据
for j=1:4:n
for i=1:4:m
block(1,1)=fread(fid,1,'bit12');
block(1,2)=fread(fid,1,'bit9');
block(2,1)=fread(fid,1,'bit9');
block(2,2)=fread(fid,1,'bit9');
temp=idct2(block);
for t=0:1:3
for p=0:1:3
Data(i+t,j+p)=temp(1+t,1+p);
end
end
end
end
data=uint8(Data);
subplot(1,2,2);
imshow(data);%显示图像
fclose(fid);
function [h,l]=huffmancode(P)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%huffman编码 P为概率矢量,h为编码,l为编码平均长度
%对于上例,编写计算程序prog4301.m。
% P=[0.30 0.10 0.21 0.09 0.05 0.25];
% [h,l]=huffmancode(P)
% 结果如下。
% 概率分布
% P =
% 0.3000 0.2500 0.2100 0.1000 0.0900 0.0500
% h =
% 01
% 00
% 10
% 110
% 1111
% 1110
% l =2.3800
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if length(find(P<0))~=0
error('Not a prob. verctor') % 判断是否符合概率分布条件
end
if abs(sum(P)-1)>10e-10
error('Not a prob. vector')
end
n=length(P);
for i=1:n-1
for j=i:n
if P(i)<=P(j)
p=P(i);
P(i)=P(j);
P(j)=p;
end
end
end
disp('概率分布'), P
Q=P;
m=zeros(n-1,n);
for i=1:n-1
[Q,l]=sort(Q);
m(i,:)=[l(1:n-i+1),zeros(1,i-1)];
Q=[Q(1)+Q(2),Q(3:n),1];
end
for i=1:n-1
c(i,:)=blanks(n*n);
end
% 以下计算各个元素码字
c(n-1,n)='1';
c(n-1,2*n)='0';
for i=2:n-1
c(n-i,1:n-1)=c(n-i+1,n*(find(m(n-i+1,:)==1))-(n-2):n*(find(m(n-i+1,:)==1)));
c(n-i,n)='0';
c(n-i,n+1:2*n-1)=c(n-i,1:n-1);
c(n-i,2*n)='1';
for j=1:i-1
c(n-i,(j+1)*n+1:(j+2)*n)=c(n-i+1,n*(find(m(n-i+1,:)==j+1)-1)+1:n*find(m(n-i+1,:)==j+1));
end
end
for i=1:n
h(i,1:n)=c(1,n*(find(m(1,:)==i)-1)+1:find(m(1,:)==i)*n);
ll(i)=length(find(abs(h(i,:))~=32));
end
l=sum(P.*ll);
matlab_车道检测算法
版权申诉
147 浏览量
2022-07-13
01:03:01
上传
评论
收藏 2KB ZIP 举报
wouderw
- 粉丝: 271
- 资源: 2960
最新资源
- 基于Matlab人脸肤色定理的教师人数统计+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab霍夫曼变换的表盘读数识别+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab火灾烟雾检测源码带GUI界面+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab的恶劣天气交通标志识别系统+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于MATLAB的霍夫曼变换的表盘示数识别+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab的车道线识别系统 +源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于MATLAB的教室人数统计系统带Gui界面+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于MATLAB的教室人数统计系统带Gui界面+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于MATLAB 的霍夫曼变换答题卡识别源码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab+bp神经网络的神经网络汉字识别系统+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈