Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查找两个图像之间的差异并更新第二个图像 我如何找到两个图像之间的差异 替换第二个图像中的差异以使两个图像相同_C#_Image Processing_Compare - Fatal编程技术网

C# 查找两个图像之间的差异并更新第二个图像 我如何找到两个图像之间的差异 替换第二个图像中的差异以使两个图像相同

C# 查找两个图像之间的差异并更新第二个图像 我如何找到两个图像之间的差异 替换第二个图像中的差异以使两个图像相同,c#,image-processing,compare,C#,Image Processing,Compare,我已经找到了第一部分的答案,但没有找到第一部分和第二部分的答案。这样做的原因是为了节省带宽 到目前为止,我找到的资料来源: 但是,我如何使用这些来满足我的需要呢?您确定要节省带宽,更好的解决方案不是简单地替换图像编号2吗 假设至少有一个图像不在本地,并且图像大小为x字节。你有两种可能: 要比较这两个图像,您必须:下载它,比较它们,然后上载新图像。因此,您将在网络上传输2个字节(加上计算时间) 要覆盖第二个图像,您必须:上载新图像。网络上的x字节(无计算时间) 如果我理解正确

我已经找到了第一部分的答案,但没有找到第一部分和第二部分的答案。这样做的原因是为了节省带宽

到目前为止,我找到的资料来源:


但是,我如何使用这些来满足我的需要呢?

您确定要节省带宽,更好的解决方案不是简单地替换图像编号2吗

假设至少有一个图像不在本地,并且图像大小为x字节。你有两种可能:

  • 要比较这两个图像,您必须:下载它,比较它们,然后上载新图像。因此,您将在网络上传输2个字节(加上计算时间)
  • 要覆盖第二个图像,您必须:上载新图像。网络上的x字节(无计算时间)

如果我理解正确,您有一台带有2个图像的电脑,另一台带有1个图像。 是否要比较pc1上的图像并将差异发送到pc2

相当有趣的任务

想到的唯一优化算法(考虑到我不知道这种情况下的专用algrothims)是递归地将图像划分为四叉树,比如NE、NW、SW、SE,直到达到某个最佳阈值,然后仅将图像之间不同的节点发送到pc2

例如,你有一张照片

0000
0010
0011
0000
将其划分为以下四叉树:

NW: 
00
00

NE:
00
10

SE:
11
00

SW:
00
00
您向pc2发送以下信息: 东北0010东南1100

考虑到只需要一个字节或整数就可以在您将要发送的四叉树中指定完整路径(NW->NE->SW)

1(NE)+4(0010)+1(SE)+4(1100) = 10
字节的信息,而不是原来的16字节

如果将子树再递归分割一次,则输出带宽将为6字节,而不是16字节。

对于第2部分:


如果将差异存储为透明的GIF图像会怎么样?然后,要构建最终图像,您只需在另一个图像上绘制透明的GIF。

我对图像差异进行了一些分析,但代码是为java编写的。请查看下面的链接,可能会有所帮助

代码查找差异并将矩形保留在Linkedlist中。可以使用包含矩形的linkedlist将差异修补到基础图像上


干杯

正如其他人所说,您应该首先进行基准测试,以确保发送图像差异实际上节省了带宽

但是,如果您有非常大的图像,并且具有相对较少的差异,那么这个问题看起来就像稀疏矩阵更新

例如,如果您的差异矩阵如下所示:

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
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
然后,您可以发送一系列索引以及要更新的像素数据(伪代码):

如果您的差异看起来更像这样,您可以使用(1或2维)进一步优化:

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
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

最后,如果您的差异没有“典型”形状,那么来自的递归细分思想是一个很好的通用解决方案。

不,只涉及计算时间…我不会传输整个图像…我只传输差异并在已传输的第一个图像中更新它。因此,您有两个本地图像的副本?图像的格式是什么?用户是在修改你软件中的图像,还是她能给你一个完全不同的图像,可能有不同的尺寸?我现在有了其他的一切…用不同的尺寸更新pc2正是我需要的!!。。。最好用C#