clc;
clear;
close all;
warning off;
addpath(genpath(pwd));
%% Get the basis functions once
basis = get_basis();
%% Get the grayscale image
img = imread('B2DBY.jpg');
img = double(rgb2gray(img)); %convert to grayscale image
%% construct square matrix whose rows and columns divisable by 8
[img, rows, cols] = convert_dimensions(img,8);
%% DCT
freq_img = image_dct(img,basis);
%% Quantization
q = [ 1 2 4 8 16 32 64 128;
2 4 4 8 16 32 64 128;
4 4 8 16 32 64 128 128;
8 8 16 32 64 128 128 256;
16 16 32 64 128 128 256 256;
32 32 64 128 128 256 256 256;
64 64 128 128 256 256 256 256;
128 128 128 256 256 256 256 256];
quant_img = special_quantize(freq_img,q);
%% Transform 2D to 1D & Run length Encoding
q_img_1D=[];
for n_row=1:rows/8
for n_col=1:cols/8
n_start_row = 8*(n_row-1)+1; n_start_col = 8*(n_col-1)+1;
block = quant_img(n_start_row:n_start_row+7,n_start_col:n_start_col+7);
block_1D = run_length_encoding(block);
q_img_1D = [q_img_1D block_1D];
end
end
%% Huffman Step
Prs = get_probabilities(q_img_1D);
dict2 = jpeg_huffman_table(Prs);
encoded_stream = jpeg_huffman_encoder(dict2,q_img_1D);
%code = huffmanenco(q_img_1D,dict);
%% Huffman decoder
decoded_stream = jpeg_huffman_decoder(dict2,encoded_stream);
%decoded_stream = huffmandeco(code,dict);
%% From 1D to 2D
decoded_img = run_length_decoding(decoded_stream,size(img));
%% Inverse Quantization
decoded_img = inverse_quantization(decoded_img, q);
%% Inverse-DCT
decoded_img = image_idct(decoded_img,basis);
%% Quality Metrics
RMS_error = sqrt(sum((img-decoded_img).^2,'all')./(rows*cols));
compression_ratio = (8*rows*cols)/length(encoded_stream)*100;
%% Showing Time!
figure (1)
imshow(uint8(img));
figure (2)
imshow(uint8(decoded_img));
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1.版本:matlab2021a,我录制了仿真操作录像,可以跟着操作出仿真结果 2.领域:jpeg图像压缩解压缩 3.内容:jpeg图像压缩解压缩,包括DCT算法、量化、游程编解码和哈夫曼编解码 4.适合人群:本,硕等教研学习使用
资源推荐
资源详情
资源评论
收起资源包目录
基于jpeg算法的图像压缩解压缩matlab仿真,包括DCT算法、量化、游程编解码和哈夫曼编解码.rar (20个子文件)
基于jpeg算法的图像压缩解压缩matlab仿真,包括DCT算法、量化、游程编解码和哈夫曼编解码
操作录像0031.avi 2.07MB
Mona_Lisa.jpg 27KB
func
run_length_decoding.m 787B
image_idct.m 426B
get_probabilities.m 258B
run_length_encoding.m 563B
get_basis.m 223B
jpeg_huffman_table.m 749B
perform_idct.m 209B
transform_2Dto1D.m 748B
jpeg_huffman_decoder.m 384B
transform_1Dto2D.m 662B
convert_dimensions.m 359B
special_quantize.m 420B
perform_dct.m 270B
jpeg_huffman_encoder.m 261B
image_dct.m 500B
inverse_quantization.m 370B
Runme.m 2KB
B2DBY.jpg 13KB
共 20 条
- 1
资源评论
- qq_365549162023-01-18资源是宝藏资源,实用也是真的实用,感谢大佬分享~
- 2301_766992472023-05-03感谢资源主的分享,很值得参考学习,资源价值较高,支持!
fpga和matlab
- 粉丝: 15w+
- 资源: 2546
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功