通过无线电以有限的数据包大小传输图像

问题描述 投票:0回答:1

我在通过无线电模块传输图像时遇到了很多问题,在接收端重建图像时出现了问题。

该模块允许我们在每个数据包中传输 256 个字节,其中 16 个字节保留用于标头(地址+AES128 加密),这为我们留下了 240 个字节的 ASCII 编码字符串。

到目前为止,我所做的是将彩色图像转换为 Base64 编码流(在 Python 中导入 base64),然后将其拆分为多个不同的行,将其合并到 240 字节限制内,然后发送到发送器。然而,在接收端,我发现在一定数量的数据包之后,很少有数据包丢失,导致整个图像不完整且无用。我还尝试了其他形式的编码,例如十六进制,这也产生了类似的结果。

相关图像是 JPG 格式的 320x240 像素、24 位深度彩色图像(PNG 图像尺寸更大)。

如果有人知道将图像转换为字符串的其他方法或任何允许我将图像转换为 ASCII 流甚至二进制流的开源工具,请告诉我。

Image:

编辑: 在更深入地研究这个问题之后,一个可能的想法是创建一个系统,其中接收器向发送器发送反馈,告知特定数据包丢失。是否有现有的软件或代码可以让我检查它。

谢谢。

python image-processing file-transfer radio-transmission
1个回答
1
投票

我认为问题在于 JPEG 和 Base64 都不能容忍任何数据丢失,因为一切都取决于之前发生的事情。

更好的方法可能是使用能够容忍缺失数据的方法。因此,也许您可以一次传输图像的一个或多个扫描线,并识别它是哪一条线,并将其放入扫描线所识别的位置处的空图像中。如果缺少一两条线,您将得到一条黑线,您可以通过插值或inpainting来修复。

问题就变成了尺寸。您的图像当前为 11kB。如果发送 320x240 RGB 文件的原始像素,则大小将为 230kB,增大了 20 倍。您可以转换为 YCbCr,它像 JPEG 一样对色度进行子采样,并且只占用一半的带宽,这样您就可以达到 115kB。 您还应该研究是否可以传输二进制而不是 ASCII - 这将有很大帮助,因为 Base64 编码会使数据膨胀约 30%。

仍在思考...顺便说一下,您可以通过阅读

慢速扫描电视

Raspberry Pi 高空热气球此处获得一些想法。

© www.soinside.com 2019 - 2024. All rights reserved.