动态规划——图像压缩

一个动态规划算法的应用——图像压缩 青少年总是会有许许多多的梦想,我们也永远是在实现梦想的道路上去勇敢奋斗。 当然,我们也有遇到过打击或者说是不在意你这么梦想的人或事情。为什么?因为他们认为你想的这个东西基于你目前状况根本没法实现,而且他们认为你也不能会实现。因为我都实现不了,你怎么会实现。 但是,我想说梦想是你一个人,也有可能是你这一个圈子或者一个团队的。关别人什么事。所以想清楚怎么实现才是要做的事情,如果陷入怀疑之中,那永远也做... 阅读详情

目录

问题描述

最优子结构性质

递归计算最优值


问题描述

在计算机中常用像素点灰度值序列{P1,P2, … ,Pn}表示图像。其中整数Pi,1<=i<=n,表示像素点i的灰度值。通常灰度值的范围是0~255,一个像素需要8位表示。

实际情况下,若一个像素灰度值小于8,则只需要3位来表示;灰度值小于16,则只需要4位表示……由此可以看出,如果用定长8位来表示灰度图中的每一个像素,就会造成很大的空间浪费。图像压缩问题要求确定像素序列{P1,P2,…Pn}的最优分段,使得以此分段所需要的存储空间最小。

另外,如果图像压缩的操作对象是一个彩色图像,那么需要将其先转换为灰度图,计算原始大小再进行DP压缩;并且,计算压缩比后要将图像恢复。

最优子结构性质

设l[i],b[i],1<=i<=m是{p1,p1,……pn}的一个最优分段,则l[1],b[1]是{p1,……,pl[1]}的一个最优分段,且l[i],b[i],2<=i<=m是{pl[1]+1,……,pn}的一个最优分段。即图像压缩问题满足最优子结构性质。

递归计算最优值

设s[i],1<=i<=n是像素序列{p1,p1,……pi}的最优分段所需的存储位数,由最优子结构性质可得:

s[i]=min_{1\leq k\leq min{i,256}}{s[i-k]+k*b_m{max}(i-k+1,i)}+11其中,b_{max}(i,j)=\left \lceil log(max_{i\leq k \leq j}{p_k}+1) \right \rceil 。

核心代码如下:

void Compress(int n, int p[], int s[], int l[], int b[])  //令s[i]为前i个段最优合并的存储位数
{ 
    int Lmax = 256, header = 11;
    s[0] = 0;
    for(int i=1; i<=n; i++)  //i表示前几段
    {
        b[i] = length(p[i]); //计算像素点p需要的存储位数
        int bmax = b[i];
        cout<<i<<"bmax: "<<bmax<<endl;
        s[i] = s[i-1] + bmax; 
        l[i] = 1;
        for(int j=2; j<=i && j<=Lmax; j++)   //递推关系:s[i]=  min(1<=j<=i)(lsum(i-j+1, i)<=256) {s[i-j]+ lsum(i-j+1,i)*bmax(i-j+1,i) } + 11
        {
            if(bmax < b[i-j+1])
                bmax = b[i-j+1];
            if(s[i] > s[i-j] + j*bmax)   //因为一开始所有序列并没有分段,所以可以看作每一段就是一个数,故lsum(i-j+1, i) = j;
            {
                s[i] = s[i-j] + j*bmax;
                l[i] = j;   //最优断开位置,l[i]表示前i段的最优分段方案中应该是在i-j处断开  比如l[5] = 3,这表示前五段的最优分段应该是(5-3=2)处断开,s[5] = s[2] + 3*bmax   
                            //即 12 | 345,以此类推,得到l[n];之后构造最优解时再由l[n]向前回溯
            }
        }
        s[i] += header;
    }
}
void Traceback(int n, int &m, int s[], int l[])
{
    if(n == 0) return;
    Traceback(n-l[n], m, s, l);
    s[m++] = n-l[n];  //重新为s[]数组赋值,用来存储分段位置
}

动态规划--图像压缩 1)问题描述 2)基本思路 3)代码实现 import java.util.Scanner; public class example { /** * * @param n 图像灰度数组的大小 * @param p 图像灰度数组 * @param s s[i]表示从0到i压缩为一共占多少存储空间 * @param l l代表l... 阅读详情

相关推荐

图像压缩动态规划

对图形学不了解,看到这个题目挺懵的 /* * 首先,要知道:像素点存储的位数(bit)=log2(像素点的个数)+1。1<=像素点的个数<=255。其中log(像素点的个数)向下取整 * 例:将像素序列表示成数组p[n]={10,9,12,40,50,35,15,12,8,10,9,15,11,130,160,240}。 * 像素点存储的最大位数=log2(255)+1=8。(优先选取最大的位数为其他像素点个数存储的基准) * 因此可以选择都用8bit存储,这样一共消耗16*8=128bit的空

m0_52386243的博客 624

动态规划 图像压缩

设l[i],b[i],1<=i<=m是{p1,p1,……pn}的一个最优分段,则l[1],b[1]是{p1,……,pl[1]}的一个最优分段,且l[i],b[i],2<=i<=m是{pl[1]+1,。因此需要用3位表示b[i],如果限制1<=l[i]<=255,则需要用8位表示l[i]因此,第i个像素段所需的存储空间为l[i]*b[i]+11位…第i个像素段Si中(1≤i≤m),有l[i]个像素,且该段中每个像素都只用b[i]位表示。设s[i],1<=i<=n是像素序列{p1,p1,。

计算机 409

0016算法笔记——【动态规划】图像压缩问题

1、问题描述:      在计算机中,常用像素点的灰度值序列{p1,p1,……pn}表示图像。其中整数pi,1       压缩的原理就是把序列{p1,p1,……pn}进行设断点,将其分割成一段一段的。分段的过程就是要找出断点,让一段里面的像素的最大灰度值比较小,那么这一段像素(本来需要8位)就可以用较少的位(比如7位)来表示,从而减少存储空间。      b代表bits,l代表length

liufeng_king的专栏 3万+

【计算机算法设计与分析】图像压缩问题(C++_动态规划)

状态转移方程更新的过程简单来说就是:在每次加入新像素点的时候从后往前去试,把新像素和前几个像素放在一起可以使总体的存储位数最少。,表示像素点i的灰度值。状态转移方程的含义是后k个像素点为一组,这k个像素点都按照最多存储长度来算,也就是。除去这k个像素点以外,前面的划分由于其满足最优子结构,还按照原本的来,即。由于多分了一组,新的组需要附加像素点数目l[i]的8位和最大像素存储长度。中,有I[i]个像素,且该段中每个像素都只用b[i]位表示。的最优分段,使得依此分段所需的存储空间最小。按此格式存储像素序列。

ccql's Blog 2317

图像压缩-动态规划课件

跟贾冉一同合作的成果。她花了很多心思做的ppt。上传以做纪念。 该资源是算法设计与分析课程中对于图像压缩的动态规划算法的课件。属于原创型。现上传与大家一同分享。也算是对jr与gavin的劳动成果的一种肯定

实验三 Gmapping建图

自主移动机器人第三次实验课,内容包括:(1)turtlebot的gmapping建图;(2)rosbag的使用;(3)gazebo中的gmapping建图。

lj164567487的博客 4648

3.7 图像压缩

在动态规划中,图像压缩是指通过减少图像数据的存储空间,以实现图像文件的压缩和存储优化。动态规划在图像压缩中可以应用于两个主要方面:无损压缩和有损压缩。无损压缩是指通过压缩图像数据,使得压缩后的图像可以完全还原为原始图像,没有任何信息丢失。在无损压缩中,动态规划可以用于寻找图像中的冗余部分,并进行数据的编码和解码。例如,通过动态规划算法,可以找到图像中连续的相同像素值或者相似的像素值,并用更简洁的方式表示,从而减少存储空间的占用。

tang7mj的博客 2068

三种 绘制奈奎斯特曲线 的方法

如何绘制Nyquist曲线 提供三种绘制方法,其中使用最广泛的是概略图绘制方法 ①解析法绘制 ②概略图法绘制 ③MATLAB绘制

weixin_46664967的博客 6万+

动态规划的图像压缩问题

动态规划的图像压缩问题2022.5.15动态规划的图像压缩问题问题描述(参照算法设计与分析教材)举例动态规划解决问题 2022.5.15 动态规划的图像压缩问题 问题描述(参照算法设计与分析教材) ​ 计算机中的图像由一系列像点构成,每个像点称为一个像素,图像分辨率越高,使用的像素就越多,例如Windows桌面的图片经常使用的设置是1024×768个,大概达到106量级.图像传输和视频处理有时在1秒钟内要处理几十帧图片,这些图片的像素就很可观了,因此图像处理常常需要大量的存储空间和高的处理速度,图像压缩问

qq_51501845的博客 2143

GB/T 27930-2023协议升级与CANoe仿真测试实践

本文深入解析GB/T 27930-2023协议的核心升级,包括A/B类系统分类与EVIN码引入,并详细指导如何使用CANoe搭建仿真测试环境、编写CAPL脚本及利用DLL库进行一致性验证与故障注入测试,助力开发人员确保电动汽车充电通信的合规性与稳定性。

y7z8a的博客 540

BUCK电路为何无法实现100%占空比?自举电路原理与替代方案解析

在开关电源设计中,DC-DC转换器是实现电压变换的核心器件,其工作原理基于功率开关管的周期性导通与关断。BUCK(降压)电路作为一种经典拓扑,通过调节开关管的占空比来控制输出电压。然而,其占空比存在理论上限,无法达到100%,这一限制源于高边开关管的驱动需求。为了驱动高边N沟道MOSFET(NMOS),需要栅极电压高于源极电压,而自举(Bootstrap)电路通过利用开关节点电压的跳变,巧妙地生成了这一高压驱动信号。自举电路必须在每个开关周期内存在续流阶段(低边管导通)为电容充电,这从根本上限制了最大占空比

weixin_32239523的博客 308

动态规划之图像压缩问题

图像压缩1 问题描述2 问题分析5 递归子结构4 例题5 递归计算最优值6 核心代码 1 问题描述 2 问题分析 没有分段之前,固定的 每8位二进制 截取为一个像素点; 现在分段之后,看到一串二进制,我首先要知道多少位截取一个像素点,即告诉我像素点的存储位数 (需3位二进制即可); 在此基础上,还要告诉我从什么位置开始像素点的存储位数开始出现变化,即告诉我目前这种存储位数的像素点有多少个 (需8位二进制即可)。 5 递归子结构 4 例题 划分3段的这种方案比前面划分4段的方案少

无知的圆的博客 1179

智能体异常行为检测-基于行为序列的异常模式识别技术【附代码】

在多智能体系统(Multi-Agent Systems, MAS)中,智能体之间的行为协调与自主决策是系统稳定运行的关键。然而,当某个智能体因策略偏移、环境变化或潜在攻击而出现**异常行为(Abnormal Behavior)**时,整个系统可能陷入混乱或崩溃。

一键难忘的博客 1143

图像压缩---动态规划

全面的了解,看书《算法设计分析》曲婉婷 网上看到的不满意,而且TraceBack的时候,采用的大都是递归。 1 算法与思路描述 转载自:动态规划之–图像压缩 1.1问题描述 图像压缩的问题我们是这样理解的:大家都知道计算机的图像是用灰度值序列来表示的{P1,P2…Pn},其中Pi表示像素点i的灰度值。而通常灰度值的范围是0~255,因此需要8位二进制数来表示一个像素。这个时候大家应该有了一些小的...

大草的博客 8088

Laser-Marking 激光振镜打标机的开源代码 - 下载 - 搜珍网

为了方便开发者的使用和定制化需求,我们在这里提供激光振镜打标机的开源代码,并附带详细的描述。首先,让我们来了解一下激光振镜打标机的基本原理。振镜系统由两个可移动的反射镜组成,可以控制激光束在水平和垂直方向上的偏转角度,从而实现对工件的精确控制。通过这段开源代码,开发者可以根据自己的需求对激光振镜打标机进行二次开发和定制化。你可以修改振镜角度、打标速度等参数,也可以添加其他功能,例如自动识别和追踪等。首先,我们创建了一个串口对象,用于与激光振镜打标机进行通信。函数实现了对用户输入文本的打标操作。

TechProX的博客 1278

全志A133的AndroidSDK

本小节来学习如何下载全志安卓SDK,SDK的目录,编译和烧录提示:以下是本篇文章正文内容,下面案例可供参考以上就是整个SDK的目录和编译烧录,目的在于让初学者快速了解整个源码的目录和编译出镜像喜欢就订阅吧。

qq_24093081的博客 4054

动态规划-图像压缩

可参考:0016算法笔记——【动态规划】图像压缩问题 动态规划之--图像压缩

qq_38261075的博客 570

机器学习与深度学习基础概念

本篇主要介绍机器学习主要概念,包括不限于标签、特征、样本、训练、模型、回归模型、分类模型、泛化、过拟合、预测、平稳性、训练集、验证集、测试集。

专注大数据与人工智能技术分享,欢迎私信加群互相学习! 3万+

动态规划——图像压缩问题

动态规划——图像压缩问题 问题: 图象压缩问题要求确定象素序列{p1 ,p2 ,…,pn}的最优分段,使得依此分段所需的存储空间最少。每个分段的长度不超过256位。 问题描述比较复杂,复习时间比较紧张,此处不贴了。 分析: s[i]:子结构。p1,p2,…pi在最优分段时所需的位数 s[i]应该为所有划分方式中位数最少的那一种,为此需要遍历所有的划分方式。 据此递推公式如下: s[i] = min_1<=k<=min{i,256}_{s[i-k] + k*bmax(i-k+1,i)} + 11

qq_43513855的博客 2168

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

动态规划---图像压缩

1、问题描述:      在计算机中,常用像素点的灰度值序列{p1,p1,……pn}表示图像。其中整数pi,1       压缩的原理就是把序列{p1,p1,……pn}进行设断点,将其分割成一段一段的。分段的过程就是要找出断点,让一段里面的像素的最大灰度值比较小,那么这一段像素(本来需要8位)就可以用较少的位(比如7位)来表示,从而减少存储空间。      b代表bits,l代表

Unique-You的博客 8876

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

动态规划在图像压缩中的应用

图像压缩是一种降低图像文件大小的技术,目的是为了节省存储空间或加快传输速度。

d_dtt的博客 743

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

图像压缩算法动态规划c语言,图像压缩算法  动态规划

图片在计算机存储的是图片中的一个一个像素,也就是像素的灰度值。灰度值的范围是0~255。有灰白图像和彩色图像,它们每个像素的通道数量不同。灰白图像是单通道的,而彩色图像是3个通道的(BGR),也就是彩色图像的每个像素都存放三个灰度值。现在图像压缩问题是这样的:有一些像素序列{p1,p2,……,pn},当然每个像素值都是0到255之间的。要求对这样的像素序列进行分段,使得最后所需要的存储空间最小。比...

weixin_29284201的博客 1634

动态规划- 图像压缩

起因 前几天老师讲了下课本《计算机算法设计与分析》上的动态规划的一个问题,特地来这里实现下。 如果你提前知道了这个算法的背景,比如像素点啊,位长之类的概念,理解起来可能会比较好接受。 先将彩色图片转黑白图片,然后按顺序像个贪吃蛇一样来回走,扫描出灰度值之后,如何压缩的过程。 这个算法本身也有一定的难度,理解起来不太容易,不过按照定义直接推导也能实现出来,只是时间上的问题罢了。 说起来还有点好笑的事,老师代码上写了灰度值序列10,12,15,255,1,2,经过压缩后的最小空间为:57 擦,这比不

huan_yue_的博客 1391

【动态规划】图像压缩问题

【动态规划】图像压缩问题 标签: 图像压缩/ 动态规划/ 算法笔记/ 最优子结构 12141 1、问题描述: 在计算机中,常用像素点的灰度值序列{p1,p1,……pn}表示图像。其中整数pi,1<=i<=n,表示像素点i的灰度值。通常灰度值的范围是0~255。因此最多需要8位表示一个像素。 压缩的原理...

weixin_30604651的博客 231
上一篇: 算法分析——最接近点对问题
下一篇: 动态规划——三角剖分问题
Zephyr .
博客等级 码龄5年 29粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值