画像ファイル解析ソフトウェア

画像ファイル解析ソフトウェア

Linuxでファイル、特に画像ファイルを分析できるプログラムはありますか?このプログラムは、16進エディタのように動作し、画像の特定の領域を描いた後にどのバイトが変更されたかを示します。

答え1

どのピクセル(およびどのチャンネル)が変更されたかを確認するために処理された画像を比較する方法を探している場合は、ImageMagickのcompareツールを使用できます。 ImageMagickウェブサイトはこれについて広く扱っています:http://www.imagemagick.org/script/compare.php

以下はそのページの例です。しかし、私はバラの写真はこのウェブサイトから入手されました。。画像があり、rose.jpgここでシャープ機能を実行して結果をに保存するとしますreconstruct.jpg

$ convert rose.jpg -sharpen 0x1 reconstruct.jpg

      バラ.jpg   再建.jpg

compareその後、ツールを使用して、次のように上記の2つの画像から画像を構築できます。difference1.png

$ compare rose.jpg reconstruct.jpg difference1.png

                                              違い 1.png

元の画像からヒントを削除するには、difference1.pngこの-compose srcオプションを使用して差分画像から元の画像をさらに削除できます。結果はで見ることができますdifference2.png

$ compare -compose src rose.jpg reconstruct.jpg difference2.png

                                              違い2.png

compareこれは私たちができることの表面的な部分にすぎません。また、各カラーチャンネルの違いなどを表示することもできます。

これは何してるの-compose src

興味があれば、ここで詳しく説明します。

抜粋http://www.imagemagick.org/script/command-line-options.php#compose

- 作成演算子

画像構成の種類を設定します。バラよりアルファ合成アルファ合成の詳細な議論

この設定は、何らかの方法で複数の画像をマージする画像処理演算子に影響します。ここにはオペレーター、 -比較する-人工- レイヤー数人造、-単調にする- モザイク- レイヤー数マージ、- 境界- 額縁-度

これは「composite」コマンドの主なオプションの1つでもあります。

答え2

コマンドラインモード

ファイルの16進数の内容を端末に出力するなど、xxdさまざまなコマンドラインプログラムがあります。hexdumpこれを使用してvim16進ファイルを編集できます。バラよりこの回答

本当にこれはあなたがしたいことですか?特に画像ファイルを分析したいと思いました。これを行うには、プログラミング言語を使用することをお勧めします。

プログラミング言語を使う

画像は単なる数の行列です。たとえば、RGB画像は、0から255までの値を含む3つの行列で表現できます。 5×5ピクセルの赤いモノクロ画像は次のとおりです。

マトリックス1(赤い平面):

255 255 255 255 255
255 255 255 255 255
255 255 255 255 255
255 255 255 255 255
255 255 255 255 255

マトリックス2(緑色の平面):

0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

マトリックス3(青い平面):

0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

このようにして画像を分析するための様々なツールが作られてきた。これらのツールは、画像処理の世界ではかなり標準的です。

  1. MATLAB(Matrix Labs)はもともとこの目的のために作成されました。 GNU OctaveはデフォルトでMATLABと互換性があり、その代わりに使用できます。
  2. Pythonは、その機能を使用して画像を操作するのに最適なオープンソースの代替手段です。scikit イメージパック。

それらはすべてインタラクティブで使いやすいです。>>たとえば、MATLABはコマンドを入力するとメッセージを表示します。コンパイルする必要はありません。

MATLAB/オクターブの例

画像を読むには:

>> im = imread('Penguins.jpg');

画像から赤い平面を抽出するには:

>> red = im(:,:,1);

これは:演算子を使用して、画像の最初のz平面(赤い平面)からすべてのx座標とすべてのy座標を抽出します。

赤い平面の最初の5x5ピクセルを見てください。

>> red(1:5, 1:5)

ans =

  116  118  118  120  118
  116  116  117  118  116
  118  117  117  118  118
  117  117  118  118  118
  119  118  117  118  118

Pythonの例を公開しませんが、同じように簡単です。

答え3

ファイルが圧縮またはその他のエンコード形式ではなく、変更が制限されている場合cmp -l

シングルレンズテープカートリッジに画像を渡すことができる最初のTargaVistaグラフィックボードを入手したとき、単純なコマンドライン(DOS)アップロードユーティリティと描画パッケージが付属していましたが、ドキュメントはありませんでした。

圧縮されていない画像のサイズが18 * 3 *(幅*高さ)ピクセルであることを簡単に計算できます。その後、完全に黒い画像を作成し、各ファイルの片隅にデフォルトのカラーピクセルが1つしかない複数のファイルをエクスポートしました。これらのファイルを比較することで(SunOSに転送した後)、行と列のバイト順序と色の順序を簡単に分析し、レンダリングされた画像を.²に圧縮解除するcmp -プログラムを作成できます。.gif.tga

1これは1990年で、/をサポートするオープンソースライブラリは.tga.vst
ありませんでした。 2私たちにカードを販売したディーラーは、米国から送信されたファイル形式情報を含むほとんど読めないn番目のファックスを私たちに提供するのに数週間かかりました。これに基づいて、ファイルのRunLengthEncodedバージョンを実装し、フレームあたりのアップロード時間を数秒短縮できます。

関連情報