背景
撮影した写真などが意図せず霞む場合があります。そのため、霞画像に対して画像処理を用いて霞を除去したいというニーズがあります。
実際に下記のサイトを拝見するとAdobeの製品にも霞除去機能があります。
site: https://blogs.adobe.com/japan/cc-adobe-stock-contributor-j-curbon-lightroom-how-to-goto-2/
今回はPythonとOpenCVを用いて簡易な靄除去方法をご紹介します。
detailEnhanceFilter
今回はOpenCVのNon-Photorealistic Renderingに実装されているdetailEnhanceFilterを使用します。
ライブラリの詳細は下記サイトにてご確認ください。
https://docs.opencv.org/master/df/dac/group__photo__render.html
実装
from PIL import Image
import numpy as np
import cv2
def main():
img = np.array(Image.open('images/input.jpg'))
dst = cv2.detailEnhance(img, sigma_s=10, sigma_r=0.15)
Image.fromarray(dst).save('images/result.jpg')
if __name__ == '__main__':
main()
実行結果
入力は先ほどご紹介したサイトの画像をお借りしました。
site: https://blogs.adobe.com/japan/cc-adobe-stock-contributor-j-curbon-lightroom-how-to-goto-2/
入力画像
出力画像
Adobe様の霞除去
所感
怪しくないか...
詳細強化フィルタという名前の通りでエッジが強化されているのが分かります!
しかしエッジ周辺画素が白い印象がありますね。
ただ1行の関数でこの変換能力!OpenCVは素晴らしいですね。
今回はdetailEnhanceフィルタのみの効果を試したかったので前処理は一切していません。
前処理を増やすとより良くなる印象です。
パラメータも未調整です。
ご興味のあるお方はぜひお試しください。
最後にライブラリのバージョンは下記の通りとなります。
ライブラリ
version | |
---|---|
Python | 3.7.6 |
opencv-python | 4.1.2.30 |
numpy | 1.18.1 |
pillow | 7.0.0 |