computer-visionコンピュータビジョンの始まり


備考

デジタル画像処理とコンピュータビジョンは数学とコンピュータサイエンスの間に美しく位置しているので興味深い分野です。したがって、基本を理解し、トピックを理解するためのプログラミングを適用することは非常に役立ちます。

デジタル画像は、2次元または3次元信号の離散化である。言い換えれば、デジタル画像は、連続ドメインのピクセルまたはボクセルのサンプリングされたセットである。

                                        f : R² ⊃ Ω → R

fがΩ上のデジタル画像である場合:矩形画像領域

わかりやすくするために、StackOverflowアバターのような2次元デジタル画像についてのみ説明します。

ピクセルについて:画像の種類について議論する前に、ピクセル値についてのクイックノート。親指の規則として、画素は、光(黒)を示さない値0で始まり、1に達し、最大強度(例えば、白色)に達し、それらは整数で表される。

バイナリ画像:モノクロ画像のみ。各ピクセルは0または1のいずれかであり、各ピクセルはビットで表すことができます。それらは、一般に科学的用途に使用されるか、またはマスクなどの他の画像処理操作に一般に使用されるので、あまり一般的に知られていない。

バイナリ形式のLena画像

バイナリイメージの例。 (このファイルの画像ピクセル値は必ずしもバイナリではありませんが、これはデモンストレーションのためのものです、これはImage Processing worldの星でもあるLenaです)

グレースケール画像:オンラインフィルタのおかげで、誰もがまだこれらの画像をよく知っています。これらの画像は一般に1ピクセルあたり1バイトで、黒は0、白は255です。人間は灰色の40階調しか区別できないので、その間のすべてがグレーであり、この範囲は多くのアプリケーションで十分です。 0〜1から0〜255のバイト値にマップされます)

グレースケールのレナ画像

カラー画像:最後に、最も一般的なデジタル画像タイプのカラー画像。ここではチャンネルのコンセプトについて言及する必要があります。デジタル画像はまた、チャネルを有し、実際には、上記のバイナリおよびグレースケール画像もチャネルを有する。 RGB(赤 - 緑 - 青)モデルが最も一般的な説明です。この場合、画像は、画像の赤み、青、緑を表す3つのチャンネル(寸法と混同しないでください。この場合、各ピクセルは0〜255(赤から赤まで)、0〜255(緑から最も緑まで)、0〜255(青から青まで)の3つの値です。このモデルでは、ピクセル{0,0,0}は黒、{255,255,255}は白、{255,0,0}は赤、{255、255、0}は黄色です。ただし、色は非常に広いトピックで、詳細については参照を確認することができます。

カラーのレナ画像

ハイパースペクトル画像:

チャンネルを説明した後、ハイパースペクトル画像について話すのが簡単です。これらの画像には数百のチャンネルがあり、顕微鏡、衛星画像などで一般に使用されます。

読み

  1. シグナルサンプリング: https : //en.wikipedia.org/wiki/Sampling_(signal_processing)

  2. デジタル画像処理の聖書:RC Gonzalez、REウッズ:デジタル画像処理。第3版、ピアソンプレンティスホール、アッパーサドル川、2008。

  3. コンピュータビジョンレビュー(深い学習まで):R. Szeliski:コンピュータビジョン:アルゴリズムとアプリケーション。 Springer、New York、2010

  4. バイナリ、グレースケール、カラー画像の理解を得るには: https : //en.wikipedia.org/wiki/Grayscale

これは非常に簡単な画像処理とコンピュータビジョンのPythonのエクササイズシリーズです。ルーキーの間違いがあれば事前に申し訳なく思っていますが、まだ開発中です。このシリーズでは、簡単にするために使用できるデジタル画像をPNGファイルに限定します。ここでは、画像圧縮のトピックについても説明します。

あなたはまだ行っていない場合は、リポジトリのクローンを作成する、またはあなたは単にそれをダウンロードすることができますしてくださいここのGithub経由:

git clone https://github.com/Skorkmaz88/compvis101
 

2つのファイルがあり、そのうちの1つはtutorial0.pyで、もう1つはreadingImages.ipynbです。もう1つはipythonノートブックです。しかし、2つのファイルが同じことをしています。

コードにはコメントの説明があります


 # libs
import png

# We create a greyscale image as described in our text.
# To do that simply, we create a 2D array in python. 
# x and y, x being horizontal and y being vertical directions.

x  = []
y = []
# Play around with these pixels values to get different grayscale images, they shoud be 
# in range of 0 - 255. 
white = 255
gray = 128
black = 0
width  = 100
height = 300

# Add 100 x 100 rectangle as just white(255) valued pixels
for i in range(0, 100):
    for j in range(0,100):
        y.append(white); # Pixel (i,j) is being set to a value, rest is coding trick to nest two lists 
    x.append(y)
    y = []
    
# Add 100 x 100 rectangle as just mid-gray(128) valued pixels
for i in range(0, 100):
    for j in range(0,100):
        y.append(gray);
    x.append(y)
    y = []

# Add 100 x 100 rectangle as just black(0) valued pixels
for i in range(0, 100):
    for j in range(0,100):
        y.append(black);
    x.append(y)
    y = []

# output image file 
f = open('out.png', 'wb')
w = png.Writer(width, height , greyscale=True, bitdepth=8)
w.write(f, x)
f.close()
# If everything went well, you should have 3 vertically aligned rectangles white, gray and black 
# Check your working folder

# PART 2
# Read a grayscale image and convert it to binary

# This time we will binarize a grayscale image, to do that we will read pixels and according to threshold we set
# we will decide if that pixel should be white or black 

# This file is originally 8 bit png image, can be found in github repository, you should use only this type of
# images if you want to change the image.
f = open('./img/lenaG.png', 'r')

r=png.Reader(file=f)
# You will the details about the image, for now pay attention to size and bitdepth only.
img = r.read()

width = img[0]
height = img[1]
# Threshold value for binarizing images, 
threshold = 128
print "Input image size is: "+ str(width)+ " pixels as  width, " + str(height) + " pixels as height"

f_out = open('lenaBinary.png', 'wb')
w = png.Writer(width, height , greyscale=True, bitdepth=1)

pixels = img[2]
 
x = []
y = []

# Let's traverse the Lena image 
for row in pixels:
    for pixel in row:
        p_value =  pixel
        # Now here we binarize image in pixel level
        if p_value > threshold:
            p_value = 1
        else:
            p_value = 0
            
        y.append(p_value);
    x.append(y)
    y = []

w.write(f_out, x)
f_out.close()

すべてがうまくいくなら、おめでとう!最初からイメージを作成し、既存のイメージで最初のピクセルレベル変換を実行しました。作業フォルダを確認して新しい画像を確認してください

インストールまたはセットアップ

コンピュータビジョンのセットアップまたはインストールに関する詳細な手順。

これ以降のコンピュータビジョンのシリーズでは、Python 2をプログラミング言語として使用します。 Pythonは科学コミュニティにとって共通の選択肢です。無料で、無料でオープンソースのライブラリがたくさんあります。プログラミングを学ぶのが初めての方、プログラミングを始めるのが一番簡単です。

今設定しておけば、Linuxを使用しているのであれば既にPythonを持っているでしょう。端末を開いて、 'python'とタイプして、すべてがすでに動作しているかどうかを確認してください。他の人は、 このリンクをチェックし Python 2.7をダウンロードできます。

次に、使用するライブラリをソースコードにインストールする必要があります。今ここでは、この設定はこの例のために設計されています。後の段階で、別のライブラリを追加します。もちろん、異なるコンピュータビジョンアプリケーションにはOpenCVなどの特定のライブラリが必要です。コードを実行するには、システムにインストールするライブラリが1つだけ必要です。 Pythonを使用する場合、私は一般に 'pip'を使って依存関係をインストールします。これは、Pythonモジュールをインストールするための簡単なツールです、あなたはまた、 このリンクを介しチェックすることができます

これで、必要なライブラリPyPNGをインストールする準備ができました。あなたが行う必要があるすべてのパイプを使用している場合

PyPNGをインストールする

Linux / Macを使用している場合は、Windowsを使用している場合はコマンドラインで入力します。

また、この演習では、ソースコードとipythonノートブックの横にあるgithubのリンクにあるイメージを取得する必要があります。

https://github.com/Skorkmaz88/compvis101

今、私たちは運動のために行くべきである