「偽の」高解像度画像(実際は JPEG なのに TIFF になっている、意図的に拡大された画像)を検出するにはどうすればよいですか?

「偽の」高解像度画像(実際は JPEG なのに TIFF になっている、意図的に拡大された画像)を検出するにはどうすればよいですか?

私の仕事では、印刷マーケティング用の画像を複数のソースから扱うことが多く、最初は低解像度の画像が送られてくるのですが、高解像度の画像を要求したときに、意図的に拡大された画像が送られてきたり、知らないうちに JPEG から変換されただけの TIFF が渡されたりして、同じように疑われることがあります。

知っているオーディオファイルでもできます偽のロスレス FLAC ファイルを検出します。

では、検出するためのソフトウェアやツールはありますか?

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

あるいは、人間が確認する方法についてアドバイスやヒントはありますか? 私が使用しているツールの中には、もちろん Photoshop があります。

答え1

2番目の質問にお答えします。

JPEG などの非可逆形式から TIFF や PNG への変換を検出する方法

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

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

しかし、JPEG 圧縮が低い (高品質) 場合は、これらのブロックが見えにくい場合があります...

ここに画像の説明を入力してください
高品質/低圧縮JPEGをPNGとして保存- 8x8ピクセルのブロックは識別が難しい

では、この高画質画像がどこかの時点でJPEG圧縮されているかどうかはどうやってわかるのでしょうか?JPEG圧縮では意図的に強度情報よりも色情報を多く削除しており、PhotoshopのLabカラーモードさらに調査する。

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

Lチャンネルは明度チャンネルで、基本的には元の画像のグレースケール版です。aチャンネルとbチャンネルはカラーチャンネルですが、従来の意味とは異なります。この回答には詳細な説明は必要ありませんが、詳細についてはウィキペディア

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

ここに画像の説明を入力してください
前の画像の「a」チャンネル- 8x8ピクセルのブロックノイズが見える、JPEG圧縮を示す

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

答え2

遅れて参加しましたが、私の意見を少し述べさせていただきます。

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% 正確ではありませんが、自動化されており、かなり高速です。

関連情報