【数字图像处理】二值图像行程编码

前言

数字图像处理课设中要对二值图像进行压缩和解压缩,所以设计了这一部分。
Tip:此代码只适用于图像中有大面积相同色块,否则压缩效果欠佳。

一、代码部分

1. 二值图像压缩

代码如下:

import numpy as npdef BRLE(img):img=np.array(img)img_f=img.flatten()  # 图像数组扁平化BRLE_seq=[]   # 输出序列elemt=[0,1]   # 序列元素种类,因为是二值图,所以元素只有0和1flag=0   # 连续元素的值,假设第一个为0count=0  # 连续元素个数for i in range(len(img_f)):  # 开始遍历if img_f[i]==flag:count+=1if i==len(img_f)-1:  # 遍历到最后一个元素if flag == 0:BRLE_seq.append(-1 * count)elif flag == 1:BRLE_seq.append(count)else:if count>=1:if flag==0:BRLE_seq.append(-1*count)elif flag==1:BRLE_seq.append(count)count=1temp=list(elemt.copy()) # 不更改elemt的值temp.remove(flag)       # 元素不同,更换flagflag=temp[0]if i==len(img_f)-1:     # 与上面相同,遍历到最后一个元素,避免bugif flag == 0:BRLE_seq.append(-1 * count)elif flag == 1:BRLE_seq.append(count)return BRLE_seq                 # 输出的是列表,不是二维数组

2. 二值图像解压缩

代码如下:

import numpy as npdef IBRLE(seq,rows,cols):  # 这里要输入压缩后的序列(就是列表)以及源图像的尺寸ORG_seq=[] # 结果列表for i in range(len(seq)):if seq[i]>0:for m in range(seq[i]):ORG_seq.append(1)else:for n in range(np.abs(seq[i])):  # seq[i]小于0,循环时要取绝对值ORG_seq.append(0)return np.array(ORG_seq).reshape(rows,cols)

二、运行部分

原二值图如下:

压缩后的序列如下:

[-1277, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55, -19, 55]

解压缩:

【数字图像处理】二值图像行程编码相关推荐

  1. Win8Metro(C#)数字图像处理--2.24二值图像闭运算

    原文:Win8Metro(C#)数字图像处理--2.24二值图像闭运算  [函数名称] 二值图像闭运算函数CloseOperateProcess(WriteableBitmap src) [算法说 ...

  2. Win8 Metro(C#)数字图像处理--2.40二值图像轮廓提取算法

    Win8 Metro(C#)数字图像处理--2.40二值图像轮廓提取算法 原文:Win8 Metro(C#)数字图像处理--2.40二值图像轮廓提取算法  [函数名称] 二值图像轮廓提取      ...

  3. Win8 Metro(C#)数字图像处理--2.39二值图像投影

    原文:Win8 Metro(C#)数字图像处理--2.39二值图像投影  [函数名称] 二值图像投影         ImageProjection(WriteableBitmap src) [算 ...

  4. matlab数字图像处理——图像的读写,灰度、二值图像

    一.实验目的 1.结合数字图像处理的知识,直观感受图像处理的基本实现过程 2.熟悉MATLAB工具的使用 3.了解图像的读写和显示 二.实验内容 实验内容一:图像读取 (1)利用编程实现读取图像 利用 ...

  5. 数字图像处理——形态学操作(二值图像篇)

    形态学操作 内容简介 1. 预备知识--结构元 2. 形态学基本操作 2.1 腐蚀和膨胀 2.2 开操作与闭操作 2.3 击中和击不中变换(hit and miss transform) 3. 基本的 ...

  6. MATLAB 数字图像处理GUI二值图像实验

    电信19-2 翁大弟 摘要 图像信息是人类获取信息的重要来源及利用信息的重要手段,数字图像处理的产生和迅速发展主要受三个因素的影响:一是计算机的发展:二是广泛的农牧业.环境.军事.工业等方面的应用需求 ...

  7. 数字图像处理知识点总结

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|新机器视觉 数字图像处理知识点总结 第一章 导论 1.   ...

  8. 数字图像处理应用matlab,数字图像处理与应用(MATLAB版)

    第 1章 绪论 1n 1.1 图像的概念 1n 1.2 图像的分类 2n 1.3 图像的表示 2n 1.3.1 图像信号的表示 2n 1.3.2 数字图像的表示 3n 1.3.3 颜色模型 4n 1. ...

  9. 数字图像处理与机器视觉光盘资料_机器视觉——数字图像处理知识点总结

    数字图像处理知识点总结 第一章 导论 1. 图像:对客观对象的一种相似性的生动性的描述或写真. 2. 图像分类:按可见性(可见图像.不可见图像),按波段数(单波段.多波段.超波段),按空间坐标和亮度的 ...

最新文章

  1. Hadoop vs Spark性能对比
  2. 在c++中,如果派生类没有重写基类中对应virtual函数会怎样?
  3. java多线程编程(三)- 线程的创建
  4. 数据挖掘原理与算法(第二版)
  5. VUE 自定义取色器组件
  6. Docker创建镜像Nuget失败
  7. 关于SharePoint中文翻译的吐槽
  8. 安卓分屏神器_手机端必备神器,一经推出轻松拥有过千万用户下载量!
  9. KVM 核心技术详解
  10. Java 悲观锁和乐观锁的实现
  11. [Java]Mybatis学习笔记(动力节点老杜)
  12. Matlab实现二维Goldstein分支切割相位展开算法
  13. macOS Monterey升级
  14. 35家互联网金融企业与安存科技签订集体战略合作协议
  15. dedecms 列表页 隔行 插入样式
  16. 神盾特工hive_《神盾局特工》第七季再爆幕后照,这位角色复古装又美出新高度!...
  17. C语言如何取一个数的负数
  18. 20155322 2017-2018-1《信息安全系统设计》第六周学习总结
  19. TSP问题(34个省会城市):遗传算法
  20. VIM插件配置——ctags/taglist/omnicppcomplete/winmanager

热门文章

  1. 服务器怎么和本地共享文件夹同步,云服务器如何共享文件夹同步
  2. 微信消息收发与微信内部emoji表情转义
  3. python的拼音_python 中文分词和拼音首字母
  4. Python打印车次信息
  5. android+扁平+png,[3.28更新]更好看的扁平化主题 —Flat+ 超全图标
  6. 【MM系列】SAP MM物料账在制品承担差异功能及配置
  7. 【C/C++】【面经】2022 网易互娱面经( 游戏客户端方向 )(更新:一面;二面;)
  8. 搭建普罗米修斯Prometheus监控系统
  9. 变邻域搜索算法解决0-1背包问题
  10. 万字长文带你轻松了解LSTM全貌