[Python][OpenCV] エッジ強調する画像処理手法 - 鮮鋭化・アンシャープマスキング

 今回はぼやけた画像を鮮明にしたりエッジを強調できる数少ない手法の鮮鋭化についてまとめていきます。

鮮鋭化のメリット・デメリット


 メリットはぼやけた画像を鮮明にする、エッジの強調ができることです。

 パラメータが1つあり、それを上げることでエッジ強調度合いを強めることができます。

 ただ、デメリットとしてノイズが増加することが挙げられます。元々ノイズが多かったりザラザラした画像の場合、そのデメリットが顕著になります。

 強調度合いのパラメータを上げるとその分ノイズ増加も悪化してしまいます。

 ノイズが少なく綺麗な画像 + エッジ検出したい箇所が弱い場合には良い効果を発揮します。

 また、メディアンフィルタなどを鮮鋭化の後に用いると、エッジ強調の効果をある程度維持しながらノイズ増加のデメリットを補うことができます。

 メディアンフィルタは別記事でまとめています。

鮮鋭化の仕組み


 以下の図のようなカーネルを使ってフィルタリングをすることで、ノイズは増加しますがエッジが強調されます。

 中央のピクセルを除いて、平滑化フィルタを減算したような内容です。

Python/OpenCVの実装


 鮮鋭化カーネルを作ってそれをcv2.filter2Dで適用します。

import cv2
import numpy as np


def make_sharp_kernel(k: int):
  return np.array([
    [-k / 9, -k / 9, -k / 9],
    [-k / 9, 1 + 8 * k / 9, k / 9],
    [-k / 9, -k / 9, -k / 9]
  ], np.float32)

img = cv2.imread(<ファイルパス>)
kernel = make_sharp_kernel(1)
img = cv2.filter2D(img, -1, kernel).astype("uint8")

鮮鋭化を実際に使ってみる


 まずはぼやけた画像を鮮明にする効果。

 霧の画像にパラメータkを9にした鮮鋭化をかけました。以下の画像を見てわかる通り鮮明になっていることは明らかです。

 次に壁のキズのエッジ強調。

 パラメータkを3にした鮮鋭化をかけました。キズがより強調され、エッジ検出しやすくなっていることが分かります。

 ただ、キズとは言い切れないような箇所も強調されたりしてノイズが増えてしまっていることが分かります。

 ほかにも、画像処理関連で色々な技術まとめているのでよかったら見てみてください!

 

コメントを残す

メールアドレスが公開されることはありません。