clear; clc; close all; A=imread('1.jpg'); I=rgb2gray(A);%将彩色图像转为灰度图像 [M,N] = size(I);%将图像转为二维矩阵 I1 = I(:);%转为一维向量 P = zeros(1,256); %获取各符号的概率; for i = 0:255 P(i+1) = length(find(I1 == i))/(M*N); end k = 0:255; dict = huffmandict(k,P); %根据灰度级k和概率数组P生成Huffman字典 enco = huffmanenco(I1,dict); %哈夫曼编码 deco = huffmandeco(enco,dict); %哈夫曼解码 Ide = col2im(deco,[M,N],[M,N],'distinct'); %把向量重新转换成图像块; subplot(1,2,1);imshow(I);title('原始图像'); subplot(1,2,2);imshow(uint8(Ide));title('解码图像'); B=length(enco);%原始图像比特长度 sumcode=length(deco);%编码后比特长度 CR=sumcode/B;%计算压缩率 disp(['原始图像 Bit: ',num2str(B),' bit']); disp(['压缩图像 Bit: ',num2str(sumcode),' bit']); disp(['压缩率: ',num2str(CR)]);
时间: 2024-02-07 12:02:52 浏览: 134
完整版 可直接运行 MATLAB实现图像去噪 滤波 锐化 边缘检测 源程序代码 含测试图片.rar
5星 · 资源好评率100%
好的,我进行修改后的代码如下:
```matlab
clear; clc; close all;
img = imread('1.jpg');
grayImg = rgb2gray(img); %将彩色图像转为灰度图像
[M, N] = size(grayImg); %将图像转为二维矩阵
I1 = grayImg(:); %转为一维向量
probabilities = zeros(1,256); %获取各符号的概率
for i = 0:255
probabilities(i+1) = length(find(I1 == i))/(M*N);
end
symbols = 0:255;
dict = huffmandict(symbols, probabilities); %根据灰度级symbols和概率数组probabilities生成Huffman字典
encoded = huffmanenco(I1, dict); %哈夫曼编码
decoded = huffmandeco(encoded, dict); %哈夫曼解码
decodedImg = col2im(decoded, [M, N], [M, N], 'distinct'); %把向量重新转换成图像块
subplot(1,2,1);imshow(grayImg); title('原始图像');
subplot(1,2,2);imshow(uint8(decodedImg)); title('解码图像');
originalBitLength = length(I1)*8; %原始图像比特长度
compressedBitLength = length(encoded); %编码后比特长度
compressionRatio = originalBitLength/compressedBitLength; %计算压缩率
disp(['原始图像 Bit: ',num2str(originalBitLength),' bit']);
disp(['压缩图像 Bit: ',num2str(compressedBitLength),' bit']);
disp(['压缩率: ',num2str(compressionRatio)]);
```
阅读全文