bioinspiredモジュール とは何か?
bioinspiredはopencv-contribにあるモジュールのひとつで、人間の目👀の識別能力を模した処理アルゴリズムが含まれています。このモジュールを使って役に立つこととしては、逆光になった物体をクリアに表示できることです。モジュール内にはRetinaクラスがありますが、Retinaとは日本語では網膜という意味です。他にもメソッド名には色の色覚を識別する視覚細胞のParvocellular(パルボセルラー)や物体の輪郭を識別する視覚細胞のMagnocellular(マクロセルラー)などの医学英単語に関連する単語が出てきます。
環境構築
venv, pipenv, minicondaなどの仮想環境をつくり、以下のコマンドを実行。
pip install opencv-python
pip install opencv-contrib-python
開発
import argparse
from pathlib import Path
import cv2
def valid_filepath(src: Path):
if not src.exists():
print("[error]:ファイルパスが存在しません")
return False
if not src.is_file():
print("[error]:ファイルではありません")
return False
if not src.suffix in [".png", ".jpg", ".jpeg"]:
print("[error]:ファイルが画像ではありません")
return False
return True
def exec():
parser = argparse.ArgumentParser()
parser.add_argument("src_img")
args = parser.parse_args()
input_path = Path(args.src_img)
if not valid_filepath(input_path):
return False
output_folder = Path("OUTPUT")
if not output_folder.exists():
output_folder.mkdir()
# Mat作成
srcMat = cv2.imread(input_path, cv2.IMREAD_COLOR)
# Retinaオブジェクト作成
height, width = srcMat.shape[:-1]
retina = cv2.bioinspired.Retina.create((width, height))
# 処理実行
retina.run(srcMat)
# 画像を取得
parvoMat = retina.getParvo()
magnoMat = retina.getMagno()
# ファイルに出力
cv2.imwrite(
output_folder / f"{input_path.stem}_parvo.png",
parvoMat
)
cv2.imwrite(
output_folder / f"{input_path.stem}_magno.png",
magnoMat
)
if __name__ == "__main__":
exec()
結果
元画像
parvo

デフォルトで出力したため少し雑になってしまいましたが、服装の縦シマや背景の家が少し鮮明になったと思います。
magno

人物の輪郭がくっきり出てると思います。
DeepLearningでモデルを作成する手間や推論をかけたときに時間がかかりそうだったら、データを前処理するときにこのモジュールを使う選択肢はありだと思います。調べた限りでは商用はOKとのことです。
