标签: run-length-encoding

压缩正弦波表

我有一个包含1024个条目的大型数组,其中包含7位值 range(14, 86)

这意味着有多个索引范围具有相同的值.

例如,

consider the index range 741 to 795. It maps to 14
consider the index range 721 to 740. It maps to 15
consider the index range 796 to 815. It maps to 15
Run Code Online (Sandbox Code Playgroud)

我想将这个地图提供给一个python程序,该程序会显示以下内容:

if((index >= 741) and (index <= 795)) return 14;
if((index >= 721) and (index <= 740)) return 15;
if((index >= 796) and (index <= 815)) return 15;
Run Code Online (Sandbox Code Playgroud)

groupby映射值的一些代码已经准备就绪,但我使用编码表达式时遇到了困难pairwise.

以前有人做过类似的事吗?

我已经以两种形式上传了数据集:

通常,按索引排序.

按映射值分组.

python compression trigonometry run-length-encoding

5
推荐指数
1
解决办法
434
查看次数

二进制运行长度编码

我有一个Web表单,我希望在Base64中生成一个简短表示的内容.除其他外,表单包含264个二进制值的列表,其中大部分值在任何时候都将为0.(它们代表地理地图上的区域).即使在Base64中,这个264位数也会产生一个长而令人生畏的字符串.我想尽可能有效地实现行程编码.你能帮帮我吗?我用谷歌搜索了二进制RLE,但没有发现任何用处.

我尝试了这么多 - 使用十进制计数在二进制字符串上运行RLE,并使用"A"作为表示0和1之间的变化的分隔符,然后将结果从基数11转换为基数64.例如:

00000000001111111000000010000000000000000000000001111111110001111010101000000000000000000000000000000000000111111111110111000000000000111111100000001000000000000000000000000111111111000111101010100000000000000000000000000000000000011111111111011100
Run Code Online (Sandbox Code Playgroud)

10A5A5AA22A7A1A2AAAAAAA34A9AA1A10A5A5AA22A7A1A2AAAAAAA34A9AA1A
Run Code Online (Sandbox Code Playgroud)

而这反过来成为

CNnbr/FxkgbbOw0LNAKgk65P8SdvaTG+t74o
Run Code Online (Sandbox Code Playgroud)

或者,在62号基地,

6imo7zq1pqr2mqglTHzXwJRAksm7fvHZHWQK
Run Code Online (Sandbox Code Playgroud)

它更好,但我仍然不禁怀疑我做错了什么 - 使用数字"A"作为分隔符是最好的方法吗?

另一个更新:

感谢@comingstorm,我已经缩短了压缩字符串.

ILHHASCAASBYwwccDASYgAEgWDI=
Run Code Online (Sandbox Code Playgroud)

正如我在评论中提到的那样,实际使用情况通常会导致更短的字符串.

compression math binary run-length-encoding

5
推荐指数
1
解决办法
1万
查看次数

行程编码数字形状的轮廓

数字形状是二进制图像(blob)中的一组连接像素.

它可以通过行程编码紧凑地表示,即将像素分组为水平线段并存储起始端点坐标和长度.通常,RLC表示以光栅顺序存储运行,即逐行和从右到右.

对于平滑的形状,存储要求从O(N²)下降到O(N).

形状的轮廓是一个封闭的像素链,当其内部被填充时(通过填充算法)恢复形状.它也是O(N)表示.Wen的形状可用作位图,轮廓可以通过轮廓算法获得.

我正在寻找一种算法,该算法直接计算给定其RLC表示的形状轮廓,而不是在中间位图中绘制它.期望算法在运行次数中以时间线性运行.

在此输入图像描述

你有遇到过解决方案吗?

algorithm run-length-encoding raster-graphics connected-components

5
推荐指数
1
解决办法
391
查看次数

从Kinect相机压缩RGB-D视频

我需要通过网络从Kinect摄像机发送视频。我正在从以下两个Kinect来源捕获视频:

  1. 2D彩色视频(RGB)。每个像素32位。640x480以30fps播放。
  2. 深度数据(D)。每像素16位,代表到最近物体的距离,单位为mm。640x480以30fps播放。

这相当于至少约53 MB / s的带宽。这就是为什么我需要在源处对两个视频源进行编码(压缩),然后在目标处进行解码。RGB-D数据将由目标处的对象跟踪算法处理。

到目前为止,我发现有许多论文讨论了实现这一任务的算法,例如: RGB和低带宽3D视频的深度帧内交叉压缩

问题在于,此类论文中描述的算法没有公共访问实现。我知道,我可以自己实现它们,但是它们利用了我还不了解的许多其他复杂图像处理算法(边缘检测,轮廓表征等)。

我实际上还发现了一些基于离散中值过滤器,增量(避免发送冗余数据)和LZ4压缩的C ++库:http : //thebytekitchen.com/2014/03/24/data-compression-for-the -kinect /

我的问题是:有没有更简单和/或更有效的方法来压缩Kinect源中的RGB-D数据?

PS:我正在用C ++编写代码。

compression video run-length-encoding image-compression kinect

5
推荐指数
1
解决办法
748
查看次数

使用Tensorflow数据集创建RLE(行程编码)蒙版

我一直在尝试使用Tensorflow数据集,但无法弄清楚如何有效地创建RLE蒙版。仅供参考,我正在使用Kaggle的空客船舶检测挑战赛中的dat:https://www.kaggle.com/c/airbus-ship-detection/data

我知道我的RLE解码功能可以从以下一种内核中工作(借用):

def rle_decode(mask_rle, shape=(768, 768)):
'''
mask_rle: run-length as string formated (start length)
shape: (height,width) of array to return
Returns numpy array, 1 - mask, 0 - background
'''
if not isinstance(mask_rle, str):
    img = np.zeros(shape[0]*shape[1], dtype=np.uint8)
    return img.reshape(shape).T

s = mask_rle.split()
starts, lengths = [np.asarray(x, dtype=int) for x in (s[0:][::2], s[1:][::2])]
starts -= 1
ends = starts + lengths
img = np.zeros(shape[0]*shape[1], dtype=np.uint8)
for lo, hi in zip(starts, ends):
    img[lo:hi] = 1
return img.reshape(shape).T
Run Code Online (Sandbox Code Playgroud)

....但它似乎在管道中不能很好地发挥作用:

list_ds …
Run Code Online (Sandbox Code Playgroud)

run-length-encoding tensorflow tensorflow-datasets

5
推荐指数
1
解决办法
63
查看次数

Matlab中的运行长度编码

我对MatLab很新,我有运行长度编码代码,但似乎不起作用,你能帮助我吗?

我有这个输入:

ChainCode  = 11012321170701000700000700766666666666665555555544443344444333221322222322 
Run Code Online (Sandbox Code Playgroud)

我想把它变成RLE输出:

(1,2), (0,1), (1,1), (2,1), (3,1), (2,1), (1,2), (7,1), (0,1), (7,1), (0,1), 
(1,1), (0,3), (7,1), (0,5), (7,1), (0,2), (7,1), (6,13), (5,8), (4,4), (3,2), 
(4,5), (3,3), (2,2), (1,1), (3,1), (2,5), (3,1), (2,2) 
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

lengthcode = 1;
N = 1;

for i = 2:length(ChainCode)

    if x(i)==x(i-1)
        N = N + 1; 
        valuecode(N)  = x(i);
        lengthcode(N) = lengthcode(N) + 1;
    else 
        N = 1;
        lengthcode = 1;
    end

    i = i + 1;

end
Run Code Online (Sandbox Code Playgroud)

但这不起作用,我仍然对如何打印输出这样做感到困惑.

我希望你能帮助我.谢谢.

matlab run-length-encoding

4
推荐指数
1
解决办法
9445
查看次数

从rle()对象中减去最后N个值

以下函数用于为以下数据集创建路径概述:

tc <- textConnection('
path           touchpoint  time
abc             A           1        
abc             A           2        
abc             B           3        
abc             C           4         
def             A           2       
def             B           3       
def             D           4        
def             C           5        
def             D           6 
ghi             A           1
ghi             A           2
ghi             A           3
ghi             C           4
jkl             A           5        
jkl             A           6        
jkl             B           7        
jkl             C           8     
mno             B           1        
mno             A           2        
mno             A           3       
mno             C           4 
pqr             A           1
pqr             C           2
')

paths <- read.table(tc, …
Run Code Online (Sandbox Code Playgroud)

r sequence run-length-encoding

4
推荐指数
1
解决办法
175
查看次数

按连接值对R数据帧进行分组

我没有找到R中这个常见分组问题的解决方案:

这是我的原始数据集

ID  State
1   A
2   A
3   B
4   B
5   B
6   A
7   A
8   A
9   C
10  C
Run Code Online (Sandbox Code Playgroud)

这应该是我的分组结果数据集

State   min(ID) max(ID)
A       1       2
B       3       5
A       6       8
C       9       10
Run Code Online (Sandbox Code Playgroud)

因此,我们的想法是首先按ID列(或时间戳列)对数据集进行排序.然后,应将没有间隙的所有连接状态组合在一起,并返回最小和最大ID值.它与rle方法有关,但这不允许计算组的最小值,最大值.

有任何想法吗?

group-by r run-length-encoding dataframe

4
推荐指数
2
解决办法
220
查看次数

获取向量中缺少值的运行长度

什么是一个聪明的(即,不是循环)方式来获得向量中每个缺失值的长度?我的理想输出是一个长度相同的向量,其中每个缺失值被它所属的缺失值的法术长度替换,所有其他值都是0.

所以,对于像这样的输入:

x <- c(2,6,1,2,NA,NA,NA,3,4,NA,NA)
Run Code Online (Sandbox Code Playgroud)

我想输出像:

y <- c(0,0,0,0,3,3,3,0,0,2,2)
Run Code Online (Sandbox Code Playgroud)

r vector vectorization run-length-encoding na

4
推荐指数
1
解决办法
138
查看次数

实现行程编码

我编写了一个程序来执行行程编码.在典型情况下,如果文本是

AAAAAABBCDEEEEGGHJ
Run Code Online (Sandbox Code Playgroud)

运行长度编码将成为它

A6B2C1D1E4G2H1J1
Run Code Online (Sandbox Code Playgroud)

但它为每个非重复字符添加了额外的1.由于我用它压缩BMP文件,我想到放置一个标记"$"来表示重复字符的出现,(假设图像文件有大量的重复文本).

所以它看起来像

$A6$B2CD$E4$G2HJ
Run Code Online (Sandbox Code Playgroud)

对于当前示例,它的长度是相同的,但BMP文件有明显的区别.现在我的问题在于解码.它发生了一些BMP文件具有模式,$<char><num>$I9在原始文件中,所以在压缩文件中我也包含相同的文本.$I9但是,在解码时,它会将其视为重复的I,重复9次!所以它会产生错误的输出.我想知道的是我可以使用哪个符号来标记重复字符(运行)的开头,以便它不会与原始源冲突.

language-agnostic compression run-length-encoding

3
推荐指数
1
解决办法
2215
查看次数