5月23日に開催されたSAS Forum Japan 2017の「SAS Viyaディープダイブ」セッションでは、SASのAIに搭載されている画像処理機能が入門レベルとして紹介されました。
セッション内では、皆様にとってもお馴染みの「浅草雷門」の写真を使った画像マッチングのデモも紹介しました。雷門を正面から撮った写真の中から、「雷門の提灯」の部分を切り出し、これをテンプレート画像として使用し、この「雷門の提灯」が写っている写真だけを画像マッチングによって見つけ出すというデモです。
さあ、ちゃんと「雷門の提灯」が写っている写真だけを見つけ出すことができたのでしょうか?
以下は、Jupyter Notebookを使用し、PythonからSAS の画像処理機能を活用してマッチングを実行した結果です。(コードの一部抜粋)
【ライブラリのインポート】
In [16]: # import libraries import swat import matplotlib.pyplot as plt import os import json import numpy as np |
【テンプレート画像「雷門の提灯」のロード】
In [24]: # load an image to cas r = conn.image.loadImages(casout={"caslib":"casuser", 'name':tmp_file_data[0], 'replace':True}, path=tmp_file_path) tmpTable = conn.CASTable(tmp_file_data[0]) |
【この画像にマッチングさせます】
【マッチング対象画像のロード】
In [26]: # load images to cas right_im_list = [] for i in right_file: i_path = os.path.join(directory, i) r = conn.image.loadImages(casout={"caslib":"casuser", 'name':i, 'replace':True}, path=i_path) imageTable = conn.CASTable(i) right_im_list.append(imageTable) |
【マッチング対象の23枚の写真(画像)】
【特徴点マッチング】
In [28]: def match_descMatch(imageTable, tmp_image, casout_name, threshold=0.3, highlight=True, descType="ORB_BRISK", thresholdRatio=0.8): results= conn.image.matchImages( casOut={ "name":casout_name, "replace":True }, imageTable={ "name":imageTable }, methodOptions={ "method":"DESCRIPTORMATCH", "descType":descType, "thresholdRatio":thresholdRatio }, caslib="casuser", image=tmp_image, threshold=threshold, highlight=highlight ) for i in right_file_s: casout_name="match_" + i[0] match_descMatch(imageTable=i[0], tmp_image=tmp_data, casout_name=casout_name, threshold=0.1, descType="ORB_BRISK", thresholdRatio=0.8) |
【マッチングした写真(画像)7枚】
【マッチングしない写真(画像)16枚】
以上のように、正しく「雷門の提灯」を含む写真(画像)だけを見つけることができています。
詳細(講演ビデオ)に関しては、以下をご覧ください。(YouTubeに公開済み)