我找到了第一部分的答案,但没有找到第一部分和第二部分的答案。
我正在使用C#.Net
到目前为止我找到的来源:
但是,我如何使用这些来满足我的需求?
答案 0 :(得分:1)
你确定更好的解决方案,以节省带宽,不是简单地替换图像nr。 2?
假设至少有一个图像不在本地,并且图像大小是x个字节。你有两种可能性:
答案 1 :(得分:0)
如果我理解正确你有1个2个图像,另一个1个。 你想比较pc1上的图像并将差异发送到pc2?
非常有趣的任务。
唯一想到的优化算法(考虑到我不知道那种情况下的专门算法)是递归地将图像划分为四叉树,比如NE,NW,SW,SE,直到达到某个最佳阈值然后仅向图像pc2发送不同图像的节点。
例如,您有图像
0000
0010
0011
0000
您将其分为以下四叉树:
NW:
00
00
NE:
00
10
SE:
11
00
SW:
00
00
您将以下信息发送到pc2: NE 0010 SE 1100
考虑到只需要一个字节或整数来指定四叉树中的完整路径(NW-> NE-> SW),您将发送
1(NE)+4(0010)+1(SE)+4(1100) = 10
字节信息而不是原始信息16。
如果再递归划分子树,输出带宽将是6个字节而不是16个。
答案 2 :(得分:0)
第2部分:
如果您将差异存储为透明GIF图像,该怎么办?然后,要构建最终图像,您只需在另一个图像上绘制透明GIF。
答案 3 :(得分:0)
正如其他人所说,您应该首先进行基准测试,以确保发送图像差异实际上可以节省带宽。
但是,如果您有非常大的图像且差异相对较少,则此问题看起来像是稀疏矩阵更新。
例如,如果您的差异矩阵如下所示:
0 0 0 0 0
0 0 0 0 0
0 0 0 1 0
1 0 1 0 0
0 0 0 0 0
然后,您可以发送一系列索引以及要更新的像素数据(伪代码):
update = [[2, 3, orig_at(2, 3)], [3, 0, orig_at(3, 0)], [3, 2, orig_at(3, 2)]]
如果您的差异通常看起来像这样,则您可以使用run-length encoding(在1或2维上)进一步优化:
0 0 0 0 0
0 0 0 0 0
0 1 1 1 1
0 1 1 1 0
0 1 1 1 0
最后,如果您的差异没有“典型”形状,则this answer中的递归细分思想是一个很好的通用解决方案。
答案 4 :(得分:-1)
我已对图像差异进行了一些分析,但代码是为java编写的。请查看以下可能提供帮助的链接
How to find rectangle of difference between two images
代码找到差异并将矩形保留在Linkedlist中。您可以使用包含矩形的链接列表来修补基本图像上的差异。
干杯!