大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
1、读入图像
使用imread()函数读入图像,由于m文件和图像放在同一目录下,故采用相对路径。
img = imread('1.png');
2、统计灰度值
使用imhist()函数,对图像的灰度值在[0,255]上做统计,统计每个灰度值出现的概率size()函数用来计算图像的大小。
num = imhist(img);
[m,n] = size(img);
px = num / (m*n)
3、计算图像的信源熵
I = -log2(px);
HX = I .* px;
HX(isnan(HX)) = 0;
entropy = sum(result)
fprintf('图像的信源熵=%f\n',entropy);
4、对图像进行香农编码,实验代码见附录
(1)对每个灰度值出现的概率进行降序排列
px = sort(px,'descend');
(2)计算累加概率
(3)求码长
运用公式li = ⌈- log(p(si))⌉ i = 1,2,…
(4)求解平均码长
运用公式运L = ∑p(si)li
(5)求出码字
将P(si) 用二进制表示,并取小数点后li 位作为符号si的编码。
———————————–附录———————————–
clc,clear;
%求图像的信源熵
img = imread('1.png');
num = imhist(img);
[m,n] = size(img);
px = num / (m*n);
I = -log2(px);
HX = I .* px;
HX(isnan(HX)) = 0;
entropy = sum(HX)
%香农编码
j = max(px);
px = sort(px,'descend');
l = length(px);
AveL = 0;
for i = 1:l
%求累加概率
F = 0;
for k = 1:i-1
if (i == 1)
px(1) = 0;F = 0;
else
px(1) = j;
end
F = F + px(k);
end
fprintf('累加概率=%f\n',F);
%求码长
if (i == 1)
L = fix(-log2(j)) + 1;
y = zeros(L);
else
L = fix(-log2(px(i))) + 1;
y = dectobin(F,L);
end
fprintf('码长=%f\n',L);
disp(y);
%求平均码长
AveL = AveL + px(i) * L;
disp('-------------------------')
end
fprintf('平均码长=%f\n',AveL);
function y = dectobin(innum,N)
%十进制小数转换为二进制数
%num为输入的十进制小数
%N为指定转换后二进制的位数
count = 0;
record = zeros(1,N);
for k = 1:N
count = count+1;
num = num * 2;%小数转换为二进制,乘2取整
if num > 1
record(count) = 1;
num = num - 1;
else
record(count) = 0;
end
if(count > N)
break;
end
end
y = record;
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/195098.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...