「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Python によるコンピューター ビジョンの概要 (パート 1)

Python によるコンピューター ビジョンの概要 (パート 1)

2024 年 11 月 5 日に公開
ブラウズ:196

: この投稿では、わかりやすくするためにグレースケール画像のみを使用します。

画像とは何ですか?

画像は値の行列として考えることができ、各値はピクセルの強度を表します。画像形式には主に 3 つのタイプがあります:

  • Binary: この形式の画像は、0 (黒) と 1 (白) の値を持つ単一の 2 次元行列で表されます。これは画像表現の最も単純な形式です。

Introduction To Computer Vision with Python (Part 1)

  • Grey-Scale: この形式では、画像は 0 ~ 255 の範囲の値を持つ単一の 2 次元行列で表されます。ここで、0 は黒を表し、255 は白を表します。中間値は、さまざまなグレーの色合いを表します。

Introduction To Computer Vision with Python (Part 1)

  • RGB スケール: ここで、画像は 0 ~ 255 の範囲の値を持つ 3 つの 2 次元行列 (カラー チャネルごとに 1 つずつ、赤、緑、青) で表されます。各行列には、次のピクセル値が含まれています。 1 つのカラー コンポーネントであり、これら 3 つのチャネルを組み合わせるとフルカラー画像が得られます。

Introduction To Computer Vision with Python (Part 1)

フィルター

フィルターは、特定の操作を適用して画像を変更するために使用されるツールです。フィルターは、画像上を移動し、ウィンドウ内のピクセル値の計算を実行するマトリックス (カーネルとも呼ばれます) です。平均値フィルターと中央値フィルターという 2 つの一般的なタイプのフィルターについて説明します。

平均フィルター

平均フィルターは、ウィンドウ内のピクセル値を平均化することでノイズを低減するために使用されます。ウィンドウ内の中心ピクセルを、そのウィンドウ内のすべてのピクセル値の平均に置き換えます。 cv2.blur() 関数は、カーネル サイズ 3x3 の平均フィルターを適用します。これは、平均を計算するために各ピクセルの周囲のピクセルの 3x3 ウィンドウを考慮することを意味します。これは画像を滑らかにするのに役立ちます。

import cv2
import matplotlib.pyplot as plt

image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE)

# Applies a Mean Filter of size 3 x 3
blurred_image = cv2.blur(image, (3, 3))

plt.subplot(1, 2, 1)
plt.imshow(image, cmap='gray')
plt.title('Original Image')
plt.axis("off")

plt.subplot(1, 2, 2)
plt.imshow(blurred_image, cmap='gray')
plt.title('Mean Filtered Image')
plt.axis("off")
plt.show()

Introduction To Computer Vision with Python (Part 1)

メディアンフィルター

メディアン フィルターは、各ピクセルの値をウィンドウ内のすべてのピクセルの中央値で置き換えることによってノイズを低減するために使用されます。特にごま塩ノイズの除去に効果的です。 cv2.medianBlur() 関数は、カーネル サイズ 3 のメディアン フィルターを適用します。このメソッドは、各ピクセルをその近傍のピクセル値の中央値に置き換えます。これは、ノイズを除去しながらエッジを維持するのに役立ちます。ここで、カーネル サイズが大きくなるほど、画像はよりぼやけます。

import cv2
import matplotlib.pyplot as plt

image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE)

# Applies a Median Filter with a kernel size of 3
blurred_image = cv2.medianBlur(image, 3)

plt.subplot(1, 2, 1)
plt.imshow(image, cmap='gray')
plt.title('Original Image')
plt.axis("off")

plt.subplot(1, 2, 2)
plt.imshow(blurred_image, cmap='gray')
plt.title('Median Filtered Image')
plt.axis("off")
plt.show()

Introduction To Computer Vision with Python (Part 1)

カスタムフィルター

カスタム フィルターを作成して、画像に特定の操作を適用できます。 cv2.filter2D() 関数を使用すると、任意のカスタム カーネルをイメージに適用できます。 cv2.filter2D() 関数は、カスタム カーネル (フィルター) をイメージに適用します。カーネルは、ピクセル値に対して実行される操作を定義する行列です。この例では、カーネルは指定された値に基づいて画像の特定の特徴を強化します。

import cv2
import numpy as np
import matplotlib.pyplot as plt

image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE)

# Define a custom filter kernel
kernel = np.array([[2, -1, 5],
                   [-5, 5, -1],
                   [0, -1, 0]])

filtered_image = cv2.filter2D(image, -1, kernel)

plt.subplot(1, 2, 1)
plt.imshow(image, cmap='gray')
plt.title('Original Image')
plt.axis('off')

plt.subplot(1, 2, 2)
plt.imshow(filtered_image, cmap='gray')
plt.title('Filtered Image')
plt.axis('off')

plt.show()

Introduction To Computer Vision with Python (Part 1)

閾値処理

: コード スニペットでは、しきい値処理されたイメージを割り当てるときに _ , image が表示されます。これは、 cv2.threshold 関数が、使用されたしきい値としきい値処理されたイメージの 2 つの値を返すためです。閾値処理された画像のみが必要なため、_ を使用して閾値を無視します。

閾値処理は、条件に基づいてピクセル値を設定することにより、画像を 2 値画像に変換します。しきい値処理手法にはいくつかの種類があります:

グローバルしきい値

単純なしきい値処理

画像全体に対して固定の閾値を設定するメソッドです。しきい値を超える値を持つピクセルは最大値 (255) に設定され、それ以下のピクセルは 0 に設定されます。 cv2.threshold() 関数は単純なしきい値処理に使用されます。 127 を超える強度を持つピクセルは白 (255) に設定され、127 以下の強度を持つピクセルは黒 (0) に設定され、バイナリ イメージが生成されます。

import cv2
import matplotlib.pyplot as plt

image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE)

_, thresholded_image = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)

plt.subplot(1, 2, 1)
plt.imshow(image, cmap='gray')
plt.title('Original Image')
plt.axis("off")

plt.subplot(1, 2, 2)
plt.imshow(thresholded_image, cmap='gray')
plt.title('Thresholded Image')
plt.axis("off")
plt.show()

Introduction To Computer Vision with Python (Part 1)

大津閾値

大津の手法は、画像のヒストグラムに基づいて最適な閾値を自動的に決定します。この方法では、クラス内の分散が最小化され、クラス間の分散が最大化されます。しきい値を 0 に設定し、cv2.THRESH_OTSU を使用すると、関数は前景と背景を分離するための最適なしきい値を自動的に計算します。

import cv2
import matplotlib.pyplot as plt

image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE)

_, otsu_thresholded_image = cv2.threshold(image, 0, 255, cv2.THRESH_BINARY   cv2.THRESH_OTSU)

plt.subplot(1, 2, 1)
plt.imshow(image, cmap='gray')
plt.title('Original Image')
plt.axis("off")

plt.subplot(1, 2, 2)
plt.imshow(otsu_thresholded_image, cmap='gray')
plt.title("Otsu's Thresholded Image")
plt.axis("off")
plt.show()

Introduction To Computer Vision with Python (Part 1)

適応型しきい値処理

平均適応閾値処理

平均適応しきい値では、各ピクセルのしきい値は、そのピクセルの周囲のローカル近傍のピクセル値の平均に基づいて計算されます。この方法では、画像のさまざまな領域にわたってしきい値を動的に調整します。 cv2.adaptiveThreshold() 関数は、ローカルな 11x11 近傍のピクセル値の平均値に基づいて、各ピクセルのしきい値を計算します。しきい値を微調整するために、この平均値から定数値 2 が減算されます。この方法は、照明条件が変化する画像に効果的です。

import cv2
import matplotlib.pyplot as plt

image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE)

mean_adaptive_thresholded_image = cv2.adaptiveThreshold(image, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)

plt.subplot(1, 2, 1)
plt.imshow(image, cmap='gray')
plt.title('Original Image')
plt.axis("off")

plt.subplot(1, 2, 2)
plt.imshow(mean_adaptive_thresholded_image, cmap='gray')
plt.title('Mean Adaptive Thresholded Image')
plt.axis("off")
plt.show()

Introduction To Computer Vision with Python (Part 1)

ガウス適応閾値処理

ガウス適応しきい値は、ローカル近傍内のピクセル値のガウス加重合計に基づいて、各ピクセルのしきい値を計算します。この方法は、照明が不均一な場合に、より良い結果をもたらすことがよくあります。ガウス適応しきい値では、しきい値は 11x11 近傍内のピクセル値のガウス加重合計によって決定されます。この加重平均から定数値 2 が減算されて、しきい値が調整されます。このメソッドは、照明と影が変化する画像を処理する場合に便利です。

import cv2
import matplotlib.pyplot as plt

image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE)

gaussian_adaptive_thresholded_image = cv2.adaptiveThreshold(image, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)

plt.subplot(1, 2, 1)
plt.imshow(image, cmap='gray')
plt.title('Original Image')
plt.axis("off")

plt.subplot(1, 2, 2)
plt.imshow(gaussian_adaptive_thresholded_image, cmap='gray')
plt.title('Gaussian Adaptive Thresholded Image')
plt.axis("off")
plt.show()

Introduction To Computer Vision with Python (Part 1)

参考文献

  • Encord.com
  • Pyimagesearch.com
  • OpenCV のしきい値
  • OpenCV フィルタリング
リリースステートメント この記事は、https://dev.to/thecspandz/introduction-tocomputer-vision-with-python-part-1-2kd?1に再現されています。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3