问题标签 [run-length-encoding]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
991 浏览

ruby - Ruby 游程编码失败

我是在 codewars 接受培训的新手,我在这个 RLE 问题中找不到我的错误,这里是说明:

您的任务是编写这样的游程编码。对于给定的字符串,返回对(或数组)[ (i1, s1), (i2, s2), ..., (in, sn) ] 的列表(或数组),以便可以通过复制来重建原始字符串字符 sx ix 次并连接所有这些字符串。您的行程编码应该是最小的,即。对于所有 i,值 si 和 si+1 应该不同。

例子

这是我的代码:

我收到此错误:

运行长度编码 (RLE) 是一种非常简单的数据压缩形式,其中数据运行(即在许多连续数据元素中出现相同数据值的序列)存储为单个数据值和计数,而不是作为原始运行。维基百科

0 投票
3 回答
606 浏览

algorithm - 游程编码数字形状的轮廓

数字形状是二进制图像(斑点)中的一组连接像素。

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

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

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

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

在此处输入图像描述

你遇到过解决方案吗?

0 投票
2 回答
1201 浏览

python - 运行长度编码功能(无库或对象方法)

我需要编写一个使用运行长度编码来压缩列表的程序。我不知道该怎么做,在一次改变我的程序之后,我什至不知道它现在在做什么。

我们不允许导入和库或使用 python 字符串或列表对象方法(如append())。

这几乎就是我现在的位置:

以此列表为例:

它会返回这个:

这显然是遥不可及的。

0 投票
4 回答
117 浏览

arrays - 在 MATLAB 中生成具有特定重复元素的数组

我有一个数组,例如 B = [2,5,7],还有一个数 C = 10,其中 C 总是大于或等于 B 中的最大数。我想根据到 B 和 C。在这个具体的例子中,我有

A = [1, 2, 2, 2, 3, 4, 5, 5, 5, 6, 7, 7, 7, 8, 9, 10]

也就是说,我生成了一个数组 [1:C],但是 B 中的每个元素都重复了 3 次。有什么不使用for循环生成数组A的好方法吗?

谢谢!

0 投票
4 回答
5252 浏览

r - 是否有等效于 data.table::rleid 的 dplyr?

data.tablerleid为运行长度编码提供了一个很好的便利功能:

我可以在基础R上模仿这个:

有谁知道dplyr等效的(?)或者是创建rleid行为的“最佳”方法dplyr是执行以下操作

0 投票
1 回答
247 浏览

java - 运行长度编码程序有数字在字母之前

我正在制作一个用于缩短单词的行程编码程序。即 aaabbc 变为 3a2bc

到目前为止,我的程序可以正常工作,但它没有输出 3a2bc,而是执行 a3b2c。那么如何让我当前的程序切换呢?

代码:

0 投票
0 回答
55 浏览

algorithm - Write the length of the word after using the Run-Length-Compression

I want to write the length of the word w which has the following form:

  • w=a^nb^mc^pd^q

with n,m,p,q >=2 after using the Run-Length-Compression. Also if w = a^2b^3c^4d^5 I can write w with the Run-Length-Compression as a0b1c00d01. The first binary number is dropped since the number 2(10),3(11),4(100),5(101) in binary representation all starts with 1 so we get a10b11c100d101 ==> a0b1c00d01.

Now I want to write the length of the result if

My question is there anyway to simplify the result by writing the binary(n)... as sum or something similar ?

0 投票
1 回答
1148 浏览

video - 压缩来自 Kinect 相机的 RGB-D 视频

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

  1. 2D 彩色视频 ( RGB )。每像素 32 位。640x480 每秒 30 帧。
  2. 深度数据 ( D )。每像素 16 位,表示到最近物体的距离,以毫米为单位。640x480 每秒 30 帧。

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

到目前为止,我发现许多论文讨论了实现此任务的算法,例如,这篇文章: RGB and depth intra-frame Cross-Compression for low bandwidth 3D video

问题是这些论文中描述的算法没有公共访问实现。我知道,我可以自己实现它们,但是它们利用了许多其他我没有足够知识的复杂图像处理算法(边缘检测、轮廓表征……)。

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

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

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

0 投票
1 回答
1318 浏览

c++ - OCR 和 OpenCV:高分辨率图像上两帧之间的差异

根据这篇OCR: Difference between two frames,我现在知道如何使用 OpenCV 查找两个图像之间的像素差异。

我想改进此解决方案并将其与内容丰富的高分辨率图像(来自视频)一起使用。上面的示例不适用于大图像,因为该过程很慢(发现太多差异,“findCountours 方法”用 250k 元素填充选项卡,这需要大量时间来处理)。

我的应用程序使用 RLE 解码器来解码视频的压缩帧。一旦帧被解码,我想将当前帧与前一个帧进行比较,以便将两个帧之间的差异存储在“Mat”选项卡中。

所有这些的目标是能够对不同的像素进行分析并检查是否有任何拉丁字符。这使我能够减少要分析的像素数量并节省宝贵的时间。

如果有人有其他想法而不是这个想法来执行此类操作,请随时提出。

谢谢您的帮助。

编辑 1: 计算机屏幕的两个高分辨率图像示例。目前,这些是我试图分析的完美例子。正如我们所看到的,两个大图像之间只有一个窗口,我想分析任何角色的新“挑战”窗口。

第一张图片

第二张图片

编辑 2: 我正在尝试根据分析的数据调整算法。通常在以下两张图片中,我只得到绿线作为差异,根本没有文字(这是最有趣的)。我试图更好地理解事情是如何工作的。

第一张图片

测试Img1

第二张图片

测试Img2

第三张图片结果图

如您所见,我只有那些绿线,而没有文字(在减少 countours[i].size() 时,我最多只能有一个字母)

0 投票
3 回答
843 浏览

arrays - 如何通过MATLAB中的特定值增加数组中的某些元素

假设我们有一个数组

我们有几个可能重复的索引说:

我们如何增加索引序列中A(i)的数量,iA(1) = 2, A(2) = 1, A(3) = 1, A(4) = 3

代码A(indSeq) = A(indSeq)+1不起作用。

我知道我可以使用以下 for 循环来实现目标,但我想知道是否有无论如何我们可以避免 for 循环?我们可以假设indSeq是排序的。

一个for循环解决方案: