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

问题描述

数字化图像是n×n的像素阵列,假定每个像素有一个0~255的灰度值,即存储一个像素需8位。为了减少存储空间,采用变长模式,即不同的像素用不同位数来存储。最终使用较少的位数对所有像素点进行存储,从而节约存储空间。
为了简化问题,进行以下几步操作。
1)图像线性化:将n×n维图像转换为1×n²向量。{P1,P2,···Pn²}
2)分段:将像素分为连续m段s1,s2,···sm,使每段中像素存储位数相同,每段最多包含256个像素点。
3)创建三个表
L:l[i]存放第i段长度。(L:length)
B:b[i]存放第i段中像素的位数。(B:bits)
P:{P1,P2,···Pn²}以变长格式存储二进制串。
简单概括就是:将图像上平面分布的像素点线性排序,并将二进制位数相同的划分到同一集合(如5、6、7二进制表示分别为101、110、111,均为三位,则为同一划分)。找到划分的最佳断点,使得所需位数最小。创建三个表分别存储每个集合像素点个数、二进制位数、具体划分情况。

有一点需要特别注意,也是很让人迷惑的一点:在具体的计算中,每进行一次划分,就要加上11。l[i]表示每段里面有多少个像素点,最多为255个即8位二进制;b[i]表示每段一个像素点需要的存储空间,最多为8位即3位二进制。则为了存储每一个分段,需要(8+3)=11的代价

则将像素点分段后的像素像素压缩公式为
阿瑟东
即每个划分中像素点个数与二进制位数的乘积加上11*划分数。
在此基础上,如何找到一个最优分段,使得存储空间最少。

递归策略

设l[i],b[i](i从1到m)是{P1,P2,···Pn²}的一个最优分段。则
l[1],b[1]是{P1,P2,···Pn²}的一个最优分段。
l[i],b[i](i从2到m)是{P1,P2,···Pn²}的一个最优分段。
则此问题转化为递归问题,即向下不断寻找像素序列的最优分段。

算法设计

(1)考察最后一个元素p[i]的分段情况;
(2)假设p[i]自成一段,则s[i]=s[i-1]+保存最后一个像素点的代价;
(3)假设最后两个像素点为一段,则s[i]=s[i-2]+保存最后两个像素点的代价;
(4)假设最后i个像素点为一段,则s[i]=s[0]+保存最后i个像素点的代价;
如何确定最后多少个元素为一段?
(5)取令s[i]最小时对应的元素个数,假设为k;
(6)则s[i]=s[i-k]+保存最后k个像素的代价;
(7)最后k个像素的代价=k*max(这k个像素对应二进制数)+11
(8)求解则s[i-k];
(9)重复以上步骤;

解题步骤

设s[i](1≤i≤n)是像素序列{P1,P2,···Pn²}的最优分段所需存储位数。
i=1 p1
在这里插入图片描述
i=2 p1 p2
在这里插入图片描述

i=3 p1 p2 p3
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

例题

求像素序列4,6,5,7,129,138,1的最优分段。
解:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 18
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值