2

2つの画像間で更新された長方形の領域を見つける必要があります。たとえば、私はこれらの画像を持っています:

最初のhttp://storage.thelogin.ru/stackoverflow/find-updated-rectangles-in-image/1.png2 番目のhttp://storage.thelogin.ru/stackoverflow/find-updated-rectangles-in-image/2 .png

Imagemagickcompareは、このピクセルが更新されたことを教えてくれます。

http://storage.thelogin.ru/stackoverflow/find-updated-rectangles-in-image/3.pngを比較してください

だから私はこの領域を塗り直す必要があります(それらの最初に概説しました):

http://storage.thelogin.ru/stackoverflow/find-updated-rectangles-in-image/4.pngを比較してください

再描画は低速接続(57600ボー)で行われるため、最優先事項はデータサイズです(マジックワード用に1バイト、チェックサム用に1バイト、領域座標用に6バイト、各ピクセルに2バイト)。これらの領域を見つけるためにどのアルゴリズムを使用できますか?私は、そのようなものがvncや同様のソフトウェアで使用されていると思います。

4

1 に答える 1

4

ImageMagickが行ったように、実際に変更された領域を見つける限り、ピクセルごとの差を計算できます(例XOR)。差が0のリージョンは変更されていません。

ペイント自体が遅いのか、再ペイントデータの送信だけなのかは、あなたの質問からは明らかではありません。また、送信のもう一方の端でどのような種類のエンコード/デコードを実行できるかも明確ではありません。指定したとおりにデータを送信する必要がありますか、それとも必要に応じて別の方法でデータをエンコードできますか?

データパケットには、長方形ごとに8バイトのオーバーヘッドがあります「(マジックワード用に1バイト、チェックサム用に1バイト、領域座標用に6バイト、各ピクセルごとに2バイト)」。色深度が16ビットであるのは各ピクセルの2バイトから取得しますか?したがって、オーバーヘッドのために、輪郭を描いた最小の長方形のいくつかは、実際には、他の長方形と組み合わせて、更新されていない領域でデータを再送信するよりもコストがかかります。

それぞれにオーバーヘッドがある長方形を見つける実際の問題は、ITAソフトウェアによって提起された「StrawberryFields」採用問題に類似しています。元のリンクは無効ですが、ここに問題の説明を含む誰かの解決策があります。

57600ボーでは、1秒あたり7200バイトを送信できます。これは、1ピクセルあたり2バイトで3600ピクセルになります。正方形として、これはわずか60x60です。あなたは確かにあなたの例でそれ以上の概要を説明しました、そしてこれはオーバーヘッドを数えません。

受信側のモニターのリフレッシュレートも考慮する必要があります。モニターが1秒間に60回更新され、1秒間に60x60の正方形を1つしか送信できない場合、これはどのように見えますか?

考慮事項:

  • 色深度を減らす
  • スキャンラインごとのランレングスエンコードピクセルの違い
  • リージョンごとにより野心的な圧縮を試みますが、オーバーヘッドに注意してください
  • 非グラフィックデータを送信し、受信者にグラフィックを計算させます(たとえば、この例では、変更されたテキスト、更新された時刻などを送信し、受信者にプログレスバーなどを描画させます)
  • この狂気を放棄する
于 2012-11-05T14:29:22.100 に答える