こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!
- Pythonによる画像処理に興味がある。
- OpenCVの画像処理を適用し画像のノイズ除去・平滑化(ぼかし)を実行できるようになりたい。
OpenCVとは
OpenCV(Open Source Computer Vision Library)とは、画像処理やコンピュータビジョンの分野で広く活用されているオープンソースライブラリです。画像データの数値処理に強いのが特徴であり、高度な統計アルゴリズムも多数含まれていることから、近年機械学習の分野でも広く利用されています。
【OpenCV】画像の平滑化とは
画像の平滑化(ぼかし)は、画像中のノイズ除去を目的とした手法であり、画像中のエッジやノイズを消すことによって実現されます。平滑化は、ローパスフィルタからなるカーネルを重畳積分することによって実行可能です。
本記事ではOpenCVで用意されている「画像の平滑化手法」と「Pythonでのコーディング方法」を解説します。
【Python×OpenCV】画像のノイズ除去・平滑化処理
PythonのOpenCVライブラリを用いて画像の平滑化を実現する方法について解説します。
平滑化フィルタによるノイズ除去|cv2.blur
OpenCVのcv2.blur()
メソッドを活用すると、正規化されたボックスフィルターを活用して画像のぼかしが実行されます。以下、9×9のボックスフィルタを用いて平滑化したコード例を示します。
import cv2
# 画像
img = cv2.imread("image_data.jpg")
# 平滑化フィルタ
smooth_img = cv2.blur(img, # 入力画像
(9,9) # 畳込配列
)
# 表示
cv2.imshow("smooth_img",smooth_img) # 平滑化した画像
cv2.imshow("img",img) # オリジナル画像
cv2.waitKey(0)
cv2.destroyAllWindows()
メディアンフィルタによるノイズ除去|cv2.medianBlur
cv2.medianBlur() メソッドを用いると、カーネル内の全画素の中央値計算に基づき平滑化が実行されます。メディアンフィルタは、常にオリジナル画像内にある画素値を出力として用いるため、外れ値のようなドット系のノイズ除去に効果的であると言えます。
import cv2
# 画像
img = cv2.imread("image_data.jpg")
# メディアンフィルタ
median_filter = cv2.medianBlur(img, # 入力画像
1 # カーネルサイズ(奇数)
)
# 表示
cv2.imshow("median_filter",median_filter)
cv2.imshow("img",img)
cv2.waitKey(0)
cv2.destroyAllWindows()
ガウシアンフィルタによるノイズ除去|cv2.GaussianBlur
cv2.GaussianBlur()
を活用すると、注目画素との距離に応じた重み付け平均値を出力するガウシアンカーネルを用いて、平滑化が実行されます。ガウシアンフィルタの特徴はオリジナル画像に存在しない画素の画素値を活用して平滑化が実行される点です。そのため、白色ノイズ等の除去に適した平滑化手法と言えます。
import cv2
# 画像
img = cv2.imread("image_data.jpg")
# ガウシアンフィルタ
img_gafilter = cv2.GaussianBlur(img, # 入力画像
(9,9), # カーネルの縦幅・横幅
2 # 横方向の標準偏差(0を指定すると、カーネルサイズから自動計算)
)
# 表示
cv2.imshow("img_gafilter",img_gafilter)
cv2.imshow("img",img)
cv2.waitKey(0)
cv2.destroyAllWindows()
バイラテラルフィルタによるノイズ除去|cv2.bilateralFilter
一般的に、画像の平滑化を行うと、エッジをぼかすことになりますが、バイラテラルフィルタcv2.bilateralFilter()
の場合、エッジを保持しつつ画像をぼかすことができるのが特徴的です。
import cv2
# 画像
img = cv2.imread("image_data.jpg")
# バイラテラルフィルタ
br_filter = cv2.bilateralFilter(img, # 入力画像
100, # 注目画素の周辺領域(値が大きいほどぼかしが強くなる)
120, # 色空間の標準偏差
10 # 距離空間の標準偏差
)
# 表示
cv2.imshow("br_filter",br_filter)
cv2.imshow("img",img)
cv2.waitKey(0)
cv2.destroyAllWindows()
【参考】Python・OpenCVを用いた画像処理
当サイトでは、PythonのOpenCVライブラリを用いた画像処理ノウハウを多数公開しています。
用途 | 【Python×OpenCV】記事名 |
---|---|
画像変換 | 画像のリサイズ・拡大・縮小 |
画像変換 | 画像の回転・反転・平行移動|アフィン変換 |
画像変換 | 画像の明るさ調節|ガンマ補正 |
画像変換 | グレースケール・HSV・L*a*b|色空間の変換 |
画像変換 | モノクロ(白黒)画像変換|2値化処理 |
画像変換 | ヒストグラムの描画・ヒストグラム均一化処理 |
画像変換 | 画像上にテキスト・図形(直線・長方形・円)を描画 |
画像変換 | 画像の透視変換・遠近法 |
画像変換 | 画像のノイズ除去・平滑化 |
画像変換 | 画像の畳み込み(空間フィルタリング) |
特徴抽出 | エッジの検出方法 |
画像認識や物体検出を学ぶ上でおすすめの教材はこちらをご参考ください。
画像処理・コンピュータビジョンの勉強におすすめ入門本・動画教材7選|OpenCV解析結果をディープラーニングに適用!
「画像処理・コンピュータビジョン分野に興味があり、画像処理のプログラミングスキルを習得したい」「OpenCVを用いた画像解析手法を学びたい」このような方向けにおすすめの教材を紹介します。
最後に
お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら
【参考】Python・OpenCVを用いた画像処理
当サイトでは、PythonのOpenCVライブラリを用いた画像処理ノウハウを多数公開しています。
用途 | 【Python×OpenCV】記事名 |
---|---|
画像変換 | 画像のリサイズ・拡大・縮小 |
画像変換 | 画像の回転・反転・平行移動|アフィン変換 |
画像変換 | 画像の明るさ調節|ガンマ補正 |
画像変換 | グレースケール・HSV・L*a*b|色空間の変換 |
画像変換 | モノクロ(白黒)画像変換|2値化処理 |
画像変換 | ヒストグラムの描画・ヒストグラム均一化処理 |
画像変換 | 画像上にテキスト・図形(直線・長方形・円)を描画 |
画像変換 | 画像の透視変換・遠近法 |
画像変換 | 画像のノイズ除去・平滑化 |
画像変換 | 画像の畳み込み(空間フィルタリング) |
特徴抽出 | エッジの検出方法 |
画像認識や物体検出を学ぶ上でおすすめの教材はこちらをご参考ください。
画像処理・コンピュータビジョンの勉強におすすめ入門本・動画教材7選|OpenCV解析結果をディープラーニングに適用!
「画像処理・コンピュータビジョン分野に興味があり、画像処理のプログラミングスキルを習得したい」「OpenCVを用いた画像解析手法を学びたい」このような方向けにおすすめの教材を紹介します。
最後に
お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら