📄 run_compress.m
字号:
function [Imageratio] = Run_Compress(bpp,xy,waveletLevel)
if nargin == 0
bpp = 0.25;
waveletLevel = 5;
end
if nargin < 3
waveletLevel = 5;
end
%装载并显示原始图像
[filename, pathname] = uigetfile( ...
{'*.bmp;*.jpg;*.jpeg;','图像文件 (*.bmp;*.jpg;*.jpeg)';
'*.bmp', '位图文件 (*.bmp)'; ...
'*.jpg','jpeg图像文件 (*.jpg)'; ...
'*.jpeg','jpeg图像文件 (*.jpeg)'; ...
}, '选择被压缩图像');
FileFullname=strcat(pathname,filename); %全名
if isequal(filename, 0) %文件不存在存在
return;
end
I = imread(FileFullname); %读入图像,Image
h = figure('name','原始影像','NumberTitle','off');
imshow(I);
ImSizeOr = prod(size(I));
if nargin<2
selection = questdlg('请选择ROI区域',...
'确定继续操作','Yes','No','Yes');
if strcmp(selection,'No')
return;
end
[BW,x,y] = roipoly; %区域选择
else
x=xy(1,:);
y=xy(2,:);
BW = roipoly(I,x,y);
end
figure(h);
hold on;
plot(x,y,'r');
hold off;
ijROI = find(BW==1);
sumROI = length(ijROI);
Imid=I;
%Imid(ijROI)=0;
%imshow(Imid);
imwrite(Imid,'midImg.pgm'); %写入中间图像,用pgm格式
%ezw编码
IezwImgName = uiputfile({'*.ezw','ezw(*.ezw)'},'保存ezw编码...','ezwPart'); %ezw保存对话框
[pathstr,IezwImgName] = fileparts(IezwImgName);%去掉后缀
ezwcodestr=sprintf('ezw midImg %f -l %d -w 0 -h 256 -e %s',bpp,waveletLevel,IezwImgName);
dos(ezwcodestr,'-echo');
%huffman编码
IhuffImgName = uiputfile({'*.mat','MAT文件(*.mat)'}, '保存ROI huffman编码...','huffPart'); %ROI保存对话框
huffImg = I(ijROI);
huffcode=mat2huff(huffImg);
save(IhuffImgName,'huffcode','x','y');
IezwImgName = [IezwImgName '.ezw'];
dir1 = dir(IezwImgName);
dir2 = dir(IhuffImgName);
ImSizeCo = dir1.bytes + dir2.bytes; %计算压缩两文件的字节数
Imageratio = ImSizeOr/ImSizeCo;
save('imageInfo','I');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -