こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!
- Pythonによる画像処理に興味がある。
- OpenCVをもとに画像の畳み込み処理(空間フィルタリング)を行う方法が知りたい。
OpenCVとは
OpenCV(Open Source Computer Vision Library)とは、画像処理やコンピュータビジョンの分野で広く活用されているオープンソースライブラリです。画像データの数値処理に強いのが特徴であり、高度な統計アルゴリズムも多数含まれていることから、近年機械学習の分野でも広く利用されています。
【OpenCV】画像の畳み込み処理とは
畳み込み(Convolution)とは、入力画像のそれぞれの画素に対して、着目した画素及びその周辺の画素の画素値の重み付き総和を算出し、出力画像の画素値を求める処理を指します。別名、空間フィルタリングとも呼ばれています。
フィルタリング時に用いる重みはカーネルまたはフィルタと呼びます。
入力画像の画素を INPUT(x, y)と置き、 N×Nサイズのカーネル値を f(i, k)と置くとき、出力画像の画素Output(x, y)は以下のように表せれます。
【Python×OpenCV】画像の畳み込み
PythonのOpenCVライブラリを用いて畳み込み処理を実践する方法について解説していきます。
【OpenCV】cv2.filter2D
OpenCVのもとに畳み込みを実践する場合、cv2.filter2D()
というメソッドを活用します。
以下、活用する上でのひな型コードおよび引数説明です。
cv2.filter2Dのひな型コード
conv_img = cv2.filter2D(src, # 入力画像
ddepth, # 出力画像の型(デフォルト「-1」で入力画像と同じ型を出力)
kernel # カーネル
)
引数情報
引数名 | 概要 |
---|---|
src | 入力画像 |
ddepth | 出力画像の型 デフォルト「-1」で入力画像と同じ型を出力 |
kernel | カーネル(フィルター) |
【実践】OpenCVによる画像の畳み込み
Pythonコードを実行し、畳み込みの流れを理解してみましょう。以下、異なるフィルタを用いた出力結果イメージおよびコードを示します。
値が1/16の4×4サイズのカーネルを活用する場合
入力画像
部分に畳み込み処理を行いたい画像のディレクトリを指定し、以下を実行してみましょう。
import cv2
import numpy as np
# 入力画像
img = cv2.imread("image_data.jpg")
# 4x4配列で値が1/16の畳込フィルタ要素を用意
kernel = np.ones((5,5)) /16
# フィルタを確認
print(kernel)
# 畳み込み操作
conv_img = cv2.filter2D(img, # 入力画像
-1, # 出力画像の型(デフォルト「-1」で入力画像と同じ型を出力)
kernel # カーネル
)
# 画像の比較
cv2.imshow("img",img)
cv2.imshow("conv_img",conv_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
任意の値を指定した3×3のカーネルを活用する場合
前述の例と異なるのが、カーネルサイズおよび、カーネルの値を更新している点です。こちらを、細かく値を設定したい場合に有効なコードと言えます。
import cv2
import numpy as np
# 画像
img = cv2.imread("image_data.jpg")
# 3x3配列の畳込フィルタ要素を用意
kernel = np.zeros((3,3))
# フィルタの値を更新
kernel[1,0] = 2
kernel[0,1] = 2
kernel[0,0] = 2
kernel[2,0] = -1
kernel[0,2] = -1
# フィルタを確認
print(kernel)
# 畳み込み
conv_img = cv2.filter2D(img, # 入力画像
-1, # 出力画像の型(デフォルト「-1」で入力画像と同じ型を出力)
kernel # カーネル
)
# 画像の比較
cv2.imshow("img",img)
cv2.imshow("conv_img",conv_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
【参考】Python・OpenCVを用いた画像処理
当サイトでは、PythonのOpenCVライブラリを用いた画像処理ノウハウを多数公開しています。
用途 | 【Python×OpenCV】記事名 |
---|---|
画像変換 | 画像のリサイズ・拡大・縮小 |
画像変換 | 画像の回転・反転・平行移動|アフィン変換 |
画像変換 | 画像の明るさ調節|ガンマ補正 |
画像変換 | グレースケール・HSV・L*a*b|色空間の変換 |
画像変換 | モノクロ(白黒)画像変換|2値化処理 |
画像変換 | ヒストグラムの描画・ヒストグラム均一化処理 |
画像変換 | 画像上にテキスト・図形(直線・長方形・円)を描画 |
画像変換 | 画像の透視変換・遠近法 |
画像変換 | 画像のノイズ除去・平滑化 |
画像変換 | 画像の畳み込み(空間フィルタリング) |
特徴抽出 | エッジの検出方法 |
画像認識や物体検出を学ぶ上でおすすめの教材はこちらをご参考ください。
画像処理・コンピュータビジョンの勉強におすすめ入門本・動画教材7選|OpenCV解析結果をディープラーニングに適用!
「画像処理・コンピュータビジョン分野に興味があり、画像処理のプログラミングスキルを習得したい」「OpenCVを用いた画像解析手法を学びたい」このような方向けにおすすめの教材を紹介します。
最後に
お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら