web-dev-qa-db-ja.com

「偽の」高解像度画像(実際にはJPEGの場合はTIFF、意図的にアップスケールされた画像)を検出するにはどうすればよいですか?

私の仕事では、複数のソースからの印刷マーケティング用の画像を扱うことがよくありますが、高解像度の画像を要求したときに(最初は低解像度の画像を提供するのではなく)、意図的に与えられました。代わりにアップスケールされたものであり、時々、私の後ろでJPEGから単純に変換されたTIFFが与えられているのではないかと疑うかもしれません。

私は知っています オーディオファイルでそれを行うことができます 偽のロスレスFLACファイルを検出します。

したがって、検出するソフトウェア/ツールはありますか?

  1. 解像度のアップスケーリング(たとえば中解像度から高解像度まで、より微妙な場合でも)。
  2. jPEGのような不可逆形式からTIFFまたはPNGへの変換。

それとも、人間がチェックしようとする方法についてのアドバイスやアドバイスはありますか?もちろん、私のツールの中にはPhotoshopがあります。

7
user78017

2番目の質問に対処するには:

JPEGからTIFFまたはPNGなどの不可逆形式からの変換を検出する方法

画像が以前にJPEG圧縮されているかどうかを視覚的に確認する方法は、画像をズームインして、8x8ピクセルブロック間の不連続性の兆候を探すことです。これらは、JPEG圧縮が高(低品質)の場合に特に明白です。

Low quality JPEG
PNGとして保存された低品質/高圧縮JPEG-8x8ピクセルブロックがはっきりと見える

しかし、JPEG圧縮が低かった(高品質)場合、これらのブロックは見づらいかもしれません...

enter image description here
PNGとして保存された高品質/低圧縮JPEG-8x8ピクセルブロックの識別が困難

では、この高品質の画像がある時点でJPEG圧縮されているかどうかを確認するにはどうすればよいでしょうか。 JPEG圧縮では、強度情報よりも多くの色情報が意図的に削除されます。Photoshopのラボカラーモードを使用して、さらに調査することができます。

画像をラボカラーモードに変換します([画像]-> [モード]-> [ラボカラー])。これにより、画像が赤、緑、青のチャンネルからL、a、bチャンネルに変換されます。

Lチャネルは明度チャネルであり、基本的に元の画像のグレースケールバージョンです。 aチャネルとbチャネルはカラーチャネルですが、従来の意味ではありません。この回答には完全な説明は必要ありませんが、詳細については Wikipedia を参照してください。

Aまたはbチャネルを検査し、8x8ピクセルのブロック性を探します。

enter image description here
前の画像の「a」チャネル-8x8ピクセルのブロックが表示され、JPEG圧縮を示します

Aチャネルまたはbチャネルのいずれかが8x8ピクセルのブロック性を示す場合、それは画像が過去のある時点でJPEG圧縮されたことを示す非常に良い兆候です。

9

私はパーティーに遅れていますが、ここに私の数セントがあります。

PHPをインストールできます。 Windows、Linux、OSXなどで利用できます。次に、次のようなテキストファイルを作成できます。

<?php
$url = 'http://server.com/image.png';
$data = json_decode(file_get_contents('http://api.rest7.com/v1/image_upscaled.php?url=' . $url));

if (@$data->success !== 1)
{
    die('Function failed');
}
if ($data->current_width !== $data->original_width)
{
   echo 'Upscaled photo';
}
else
{
    echo 'Not upscaled';
}

写真がアップスケールされているかどうかがわかります。 100%正確ではありませんが、自動化されており、適度に高速です。

0
Jack