Python OpenCV3でシャープ化フィルタリング

シャープ化フィルタリングをすると、画像全体がはっきりと見えるようになる。

[amazonjs asin="4061538225″ locale="JP" title="OpenCVによる画像処理入門 (KS情報科学専門書)"]

 

前提

ディレクトリ構成などはこことかこことか。

 

元画像

細い線がシャープになる様子を見るために、花火の画像(hanabi.jpg)を使う。
source/image ディレクトリに画像を設置する。

hanabi

 

filter2Dメソッドの使い方

filter2Dメソッドの使い方は次の通り。

[python title="filter2Dメソッドの使い方"]
cv2.filter2D(img_src, 出力画像のbit深度, シャープ化するためのオペレータ)
[/python]

出力画像のbit深度は以下の中から選択できる。
負の値を入力することで、入力画像と同じものを指定できる。

cv2.CV_16S    cv2.CV_16UC2  cv2.CV_32FC4  cv2.CV_64FC1  cv2.CV_8SC3
cv2.CV_16SC1  cv2.CV_16UC3  cv2.CV_32S    cv2.CV_64FC2  cv2.CV_8SC4
cv2.CV_16SC2  cv2.CV_16UC4  cv2.CV_32SC1  cv2.CV_64FC3  cv2.CV_8U
cv2.CV_16SC3  cv2.CV_32F    cv2.CV_32SC2  cv2.CV_64FC4  cv2.CV_8UC1
cv2.CV_16SC4  cv2.CV_32FC1  cv2.CV_32SC3  cv2.CV_8S     cv2.CV_8UC2
cv2.CV_16U    cv2.CV_32FC2  cv2.CV_32SC4  cv2.CV_8SC1   cv2.CV_8UC3
cv2.CV_16UC1  cv2.CV_32FC3  cv2.CV_64F    cv2.CV_8SC2   cv2.CV_8UC4

シャープ化するためのオペレータは以下のような考え方で作成する。

スクリーンショット 2015-07-05 2.43.30

 

シャープ化フィルタリング

sourceディレクトリにshape.pyを作成する。

[python title="shape.pyの内容"]
# -*- coding: utf-8 -*-

import cv2
import numpy as np

if __name__ == '__main__’:

# シャープの度合い
k = 10.0
# シャープ化するためのオペレータ
shape_operator = np.array([[0, -k, 0],
[-k, 1 + 4 * k, -k],
[0, -k, 0]])

# 画像の読み込み
img_src = cv2.imread("./image/hanabi.jpg", 3)

# 作成したオペレータを基にシャープ化
img_tmp = cv2.filter2D(img_src, -1, shape_operator)
img_shape = cv2.convertScaleAbs(img_tmp)

# 表示
cv2.imshow("Show SHAPE Image", img_shape)
cv2.waitKey(0)
cv2.destroyAllWindows()

[/python]

実行してみる。

[shell]
(opencv_python)$ python shape.py
[/shell]

スクリーンショット 2015-07-05 2.34.01

 

ぱっと見画像が荒くなったように見えるが、元画像と比較すると火花が細くなっているのがわかる。