matlab香农编码「建议收藏」

matlab香农编码「建议收藏」1、读入图像使用imread()函数读入图像,由于m文件和图像放在同一目录下,故采用相对路径。img=imread(‘1.png’);2、统计灰度值使用imhist()函数,对图像的灰度值在[0,255]上做统计,统计每个灰度值出现的概率size()函数用来计算图像的大小。num=imhist(img);[m,n]=size(img);px=num/(m*n)…


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;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/195098.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 服务器ssh免密钥登陆(vscode远程连接服务器)

    VScode实现远程查看代码要使用一些插件,我用的是Remote-SSH,安装很简单,推荐看下下面的博客,写的很详细:https://blog.csdn.net/u010417914/article/details/96918562重要的是遇到的一些问题:1.我的服务器用的是Ubuntu18.04,生成rsa公钥和私钥后,注意要以附加到文件尾部的方式把公钥拷贝到…

    2022年4月14日
  • pycharm搭建python环境_pycharm如何配置编译环境

    pycharm搭建python环境_pycharm如何配置编译环境1.安装python27双击执行python-2.7.15.msi,选择装到根目录,建议d:\Python27。一路下一步,直到完成。安装完成之后,打开cmd,输入:python,如果显示以下内容则说明安装python成功如果提示命令不存在则需要设置环境变量。windows:右键我的电脑–属性–高级系统设置–高级–环境变量–系统变量找到path项,加上值,D:\Python27;D:\P…

    2022年8月25日
  • “2014比赛现场招”开始,个人网站的完全访问权限“举”时代?

    “2014比赛现场招”开始,个人网站的完全访问权限“举”时代?

    2022年1月1日
  • 群晖|半洗白后moments正常显示人像、主题、预览「建议收藏」

    群晖|半洗白后moments正常显示人像、主题、预览「建议收藏」Moments不工作群晖重装6.2.3之后,发现moments不能正常工作了,不管是人物还是主题都是空白,还会显示有XXX张照片待发现,但会停在这儿。这如何能忍,网络上找到替换文件大法,没啥用,这台虚拟机内黑群晖只能暂时放下。想到自己还有台裸机安装的黑群晖,尝试后moments正常工作。替换ffmpeg为第三方替换的目的是为了能够正确的生成预览图、视频等。dsm版本及内核uname-a#LinuxvmDSM3.10.105#25426SMPTueMay1204:53:1

    2022年5月6日
  • 免备案cdn_cdn贝安装

    免备案cdn_cdn贝安装免备案CDN,符码CDN应该是使用CDN贝搭建,该CDN系统相对来说比较成熟,功能支持比较丰富。今天对符码免备案CDN进行简单的测试,仅供大家参考。首先,就是简单粗暴的多地区PING大法,简单看下CDN延迟效果:如果要是对比那么多免备案CDN延迟来说,符码CDN平均可以做到45ms的延迟,无疑是测试的所有免备案CDN中多地区PING平均延迟最小的一个,甚至一些国内CDN也达不到这个低延迟效果,延迟…

    2022年9月3日
  • 理解self,this,parent

    理解self,this,parent

    2021年6月30日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号