目录

  • 一、Run-Length Encoding
  • 二、图像游程编码
    • 1.条件图像游程编码方法
    • 2. 条件图像游程编码代码实现
  • 总结
  • 参考

一、Run-Length Encoding

这种数据压缩方法背后的思想是:如果一个数据项d在输入流中连续出现n次,则用单对nd替换n次出现。然后,一个数据项的连续出现被称为运行长度为n,这种进行数据压缩的方法被称为运行长度编码或RLE。我们首先将这个想法应用于文本压缩,然后再应用于图像压缩。

二、图像游程编码

1.条件图像游程编码方法

假设一个具有n个灰度的图像,该方法首先根据每个像素的近邻为每个像素分配一个n位代码。然后它将n位代码转换为一个长字符串,并计算运行长度。运行长度分配在压缩流上的前缀代码。该方法将图像中的每条扫描线都视为一个二阶马尔可夫模型。在这样一个模型中,当前数据项的值仅取决于它过去的两个邻居,而不一定是两个直接的邻居。一组训练图像用于计算邻居a,b的每一对可能的值,即X的每个值出现的次数。如果A和B有相似的值,那么很自然地期望X会有相似的值。如果A和B有非常不同的值,我们期望X有许多不同的值,每个值的概率都很低

2. 条件图像游程编码代码实现


def int2bin(n, count):"""returns the binary of integer n,using count number of digits"""return "".join([str((n >> y) & 1) for y in range(count - 1, -1, -1)])class Run_Length_Encoding:def __init__(self):self.lowbit = '0'self.highbit = '1'self.compression_factor_text = 3self.escape_character = '@'self.alphabet_bit = 14def condictional_run_length_encoding_image(self, input: list):import randomapproch_run_length_encoding = self.run_length_encoding_grayimage(input)# approch_run_length_encoding = [random.randint(0, 15) for i in range(100)]  # 做随机测试from Huffman import Huffmandic = Huffman().dictionary(approch_run_length_encoding)Huffmandic = Huffman().huffman_code(dic)A_list = [elem[:] for elem in dic.keys()]B_list = [elem[:] for elem in dic.keys()]C_list = []Out_list = []Name_list = []for i in A_list:for j in B_list:for c in range(len(approch_run_length_encoding) - 2):if approch_run_length_encoding[c] == int(i) and approch_run_length_encoding[c + 1] == int(j):C_list.append(approch_run_length_encoding[c + 2])C_dic = Huffman().dictionary(C_list)C_dic = Huffman().huffman_code(C_dic)C_list = []Out_list.append(C_dic) if len(C_dic) != 0 else NoneName_list.append(i + "+" + j) if len(C_dic) != 0 else Nonecondictional_rle_outstring = int2bin(approch_run_length_encoding[0], self.alphabet_bit) + int2bin(approch_run_length_encoding[1], self.alphabet_bit)Huffman_outstring = ''for k in range(2, len(approch_run_length_encoding)):alphabet = Out_list[Name_list.index(str(approch_run_length_encoding[k - 2]) + "+" + str(approch_run_length_encoding[k - 1]))]condictional_rle_outstring += alphabet[str(approch_run_length_encoding[k])]for k in range(len(approch_run_length_encoding)):Huffman_outstring += Huffmandic[str(approch_run_length_encoding[k])]print("Huffman_outstring : ", len(Huffman_outstring), Huffman_outstring)print("condictional_rle_outstring : ", len(condictional_rle_outstring), condictional_rle_outstring)
input =  [[0, 0, 0, 1], [1, 1, 1, 0], [1, 1, 1, 0]]
output :  [3, 4, 1, 3, 1]

总结

以上就是今天要讲的内容,本文仅仅简单介绍了条件图像游程编码的相关定义和其中简单代码实的实现方法。


参考

[1] Salomon, David, and Giovanni Motta. Handbook of data compression. London; New York: Springer, 2010.
[2] H. Gharavi, “Conditional Run-Length and Variable-Length Coding of Digital Pictures,” in IEEE Transactions on Communications, vol. 35, no. 6, pp. 671-677, June 1987, doi:10.1109/TCOM.1987.1096817.

本文部分参考自《Handbook of Data Compression 》,该内容仅供学习研究之用,如若喜欢请支持购买正品书籍。本文关于Huffman部分的代码参考博客Python 代码实现哈夫曼编码。本文关于run_length_encoding_grayimage 的实现部分参考前文图像游程编码博客。
转载本文请联系原作者获取授权,同时请注明本文来自池鱼醉故渊博客。

[二维压缩] | 条件图像游程编码相关推荐

  1. python定位二维码_图像中二维码的检测和定位

    二维码 二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的:在代码编制上巧妙地利用构成计算机内部 ...

  2. matlab 把图像变成二维的,matlab图像怎么变成二维矩阵

    求:matlab二维直方图图像分割程序.. 我给你个网站``里面的教学很详细~~希望能帮到你~~~~反正里面的软件教程很多``就是不知道有没你要找的``如果有~~给我加分哈``http://tech. ...

  3. 二维 Arnold 的图像置乱加密及解密——Matlab实现

    二维 Arnold 的图像置乱加密及解密--Matlab实现 二维 Arnold 的图像置乱加密及解密(1):RGB图像的处理 基于Arnol变换的图像置乱 Arnold变换是俄国数学家Vladimi ...

  4. 【图像加密】基于matlab GUI正交拉丁方+二维Arnold置乱图像加密【含Matlab源码 813期】

    ⛄一.正交拉丁方置乱及二维Arnold置乱简介 0 引言 随着通讯技术的飞速发展, 越来越多的领域需要传送数字图像信号, 因此信息的传送安全问题显得越来越重要.通常应用于数字图像通信的两种保护技术为: ...

  5. 【图像加密】正交拉丁方+二维Arnold置乱图像加密【含GUI Matlab源码 813期】

    ⛄一.正交拉丁方置乱及二维Arnold置乱简介 0 引言 随着通讯技术的飞速发展, 越来越多的领域需要传送数字图像信号, 因此信息的传送安全问题显得越来越重要.通常应用于数字图像通信的两种保护技术为: ...

  6. leetcode C++ 48. 旋转图像 给定一个 n × n 的二维矩阵表示一个图像。 将图像顺时针旋转 90 度。

    一.思路: 某一个的转化后的路径变化:(i,j)-->(j,n-1-i)-->(n-1-i,n-1-j)-->(i,j), 所以转变一个,就等于转变4个,n为偶数数时,遍历n*n/4 ...

  7. 【matplotlib】绘制简单二维、三维图像

    学习,matplotlib模块的绘图功能. 主要参考于博客:http://blog.csdn.net/ali197294332/article/details/51694141 具体模块导入在最后第7 ...

  8. 二维数组(图像)转变成3通道图

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 总结 前言 通过查阅与实践,总结两种方法 总结 代码如下: 法一: a=np.arange(6).reshape(2, ...

  9. 第4章 Python 数字图像处理(DIP) - 频率域滤波5 - 二变量函数的傅里叶变换、图像中的混叠、二维离散傅里叶变换及其反变换

    目录 二变量函数的傅里叶变换 二维冲激及其取样性质 二维连续傅里叶变换对 二维取样和二维取样定理 图像中的混叠 二维离散傅里叶变换及其反变换 二变量函数的傅里叶变换 二维冲激及其取样性质 两个连续变量 ...

  10. 二维图像的傅立叶变换

    摘要:二维图像的傅立叶变换,与一维傅立叶相比,在理解上要抽象很多.我在网上找了几篇相对较好的文章,并用matlab自己做了几个实验图像,希望能对大家理解二维图像的傅立叶变换有所帮助. 关键字:二维傅立 ...

最新文章

  1. 观点PK_倘若做不好AI,云服务商还能勇往直前吗?
  2. github 视觉测量_计算机视觉八大任务全概述:PaddlePaddle工程师详解热门视觉模型...
  3. Java HashMap遍历的两种方式
  4. 十个 Laravel 5 程序优化技巧
  5. Android——设置布局的背景颜色
  6. PHP文件信息相关api
  7. [Java基础]File基础
  8. Tomcat权威指南-读书摘要系列6
  9. python中ttk和tkinter_python tkinter中ttk组件如何使用?
  10. ROS笔记(17) Gazebo
  11. 飞猪信息流内容推荐探索
  12. Android开发之自定义UI组件和属性
  13. 基于WEB的PDF打印——浏览器中静默打印PDF文件
  14. 程序员泪流满面的瞬间,第三季
  15. 小明的成绩从去年的72分提升到了今年的85分,请计算小明成绩提升的百分点
  16. Leopard中修改分辨率
  17. 至联云解析:为什么说web3.0是IPFS的天下?
  18. can总线rollingcounter_请问什么是汽车CAN通信中报文中信号checksum和rolling counter,具体有什么用?为什么要加在报文中。...
  19. 双台笔记本之间的屏幕扩展
  20. 利用空间滤波器“清理”激光束

热门文章

  1. SPDY与http2
  2. Android TextToSpeech TTS中文文本转语音(语音合成)
  3. 永中云编辑(java版)
  4. 4.4 输入法图片 android,支持安卓4.4!搜狗输入法5.1新版发布
  5. 智慧城管管理平台和监控系统建设方案
  6. Excel教程数据透视表系列案例二十二
  7. week7-学习写技术交底书的所得
  8. Linux桌面没有minidwep,ubuntu 12.04完整安装minidwep-gtk教程
  9. html5音乐加大音量,怎么调大音乐声音 mp3音量增大器介绍【图解】
  10. hog特征的matlab实现