【图像压缩】基于matlab霍夫曼图像压缩重建【源码13期】

一、简介

基于matlab霍夫曼图像压缩重建,霍夫曼编码完全依据字符出现的概率来构造异字头的平均长度最短的码字,有时称之为最佳编码。霍夫曼编码将使用次数较多的代码用长度较短的编码代替将使用次数较少的代码用较长的编码代替并且确保编码的唯一可解性。其根本原则是压缩编码的长度最小,也就是权值和最小。

二、部分源码

function SaveImg_Callback(hObject, eventdata, handles)
% 保存
if isequal(handles.ImgH, 0) && isequal(handles.ImgL, 0)
    msgbox('请进行压缩处理!', '提示信息');
    return;
end
if ~isequal(handles.ImgH, 0)
    SaveImage(handles.ImgH);
end
if ~isequal(handles.ImgL, 0)
    SaveImage(handles.ImgL);
end
msgbox('处理结果保存成功!', '提示信息');

function Exit_Callback(hObject, eventdata, handles)
close();

function CompressAlgorithm_Callback(hObject, eventdata, handles)
function Huffman_Callback(hObject, eventdata, handles)

if isequal(handles.Img, 0)
    msgbox('请载入图像!', '提示信息');
    return;
end
if isequal(handles.ImgH, 0)
    dataImg = handles.Img;
    if ndims(dataImg) == 3
        dataImg = rgb2gray(dataImg);
    end
    sz = size(dataImg);
    [zipped,info] = Mat2Huff(dataImg);
    unzipped = Huff2Mat(zipped, info);
    dataImg = double(reshape(dataImg, sz));
    unzipped = double(reshape(unzipped, sz));
    info_dataImg = whos('dataImg');
    info_zipped = whos('zipped');
    info_unzipped = whos('unzipped');
    S = PSNR(dataImg, unzipped);
    str0 = sprintf('-----------------霍夫曼压缩-----------------\n');
    str1 = sprintf('原始数据维数为:%s,占用空间大小为:%d\n', num2str(info_dataImg.size), info_dataImg.bytes);
    str2 = sprintf('解压数据维数为:%s,占用空间大小为:%d\n', num2str(info_unzipped.size), info_unzipped.bytes);
    str3 = sprintf('压缩数据维数为:%s,占用空间大小为:%d\n', num2str(info_zipped.size), info_zipped.bytes);
    str4 = sprintf('压缩比为:%.3f%%\n', info_zipped.bytes/info_dataImg.bytes*100);
    str5 = sprintf('PSNR:%.3f\n', S);
    strH = [str0 str1 str2 str3 str4 str5];
    set(handles.textInfo, 'String', strH);
    tm = im2uint8(mat2gray(unzipped));
    axes(handles.axes2); imshow(tm, []);
    handles.strH = strH;
    handles.ImgH = tm;
    guidata(hObject, handles);
else
    set(handles.textInfo, 'String', handles.strH);
    axes(handles.axes2); imshow(mat2gray(handles.ImgH), []);
end

三、运行结果

四、matlab版本

MATLAB R2019a

五、学习与交流

文中不足之处请大家多多指教,学习与交流可以联系企鹅:3752243968
文中部分源码仅供参考,若需要全部代码可以私信(有偿)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值