物理学者(ポスドク)による日々の研究生活のメモ書きです ( python/emacs/html/Japascript/シェルスクリプト/TeX/Mac/C言語/Linux/git/tmux/R/ポケモンGO)
opencvでできる
まずは、うまくいった例をメモ
■ 参考 : OpenCVをつかった特徴点マッチングについて少しだけ掘り下げる
基本的に↑の記事通りに動かした
■ 参考 : OpenCV3とPython3で特徴点を抽出する(AgastFeature, FAST, GFTT, MSER, AKAZE, BRISK, KAZE, ORB, SimpleBlob, SIFT)
特徴量のうち、一致度上位n個のみをプロットする
距離が遠いものはNoneとして無視する(これであってるのかわからんが・・・)
検索ワード 「python opencv 位置合わせ qiita」とか
■ 参考 : [OpenCV] いまさら局所特徴量で物体検出!?
■ 参考 : OpenCVで画像マッチングをする
■ 参考 : python+opencvで画像処理の勉強8 パターン・図形・特徴の検出とマッチング
■ 参考 : 2つの画像を比較して違いを見つける
■ 参考 : 特徴点のマッチング
(2023/10/06 追記)
■ 参考 : OpenCV-Pythonチュートリアル
opencvで画像解析する人へのチュートリアル記事
(2023/12/08 追記)
■ 参考 : 特徴点のマッチングと対応点の座標のCSV出力
■ 参考 : OpenCVで特徴量の座標を取得する
■ 参考 : 特徴量マッチングによるテンプレートマッチング
■ 参考 : Python+OpenCVを利用したマッチング処理
■ 参考 : 特徴マッチングによる物体検知
ツイート
まずは、うまくいった例をメモ
■ 参考 : OpenCVをつかった特徴点マッチングについて少しだけ掘り下げる
基本的に↑の記事通りに動かした
■ 参考 : OpenCV3とPython3で特徴点を抽出する(AgastFeature, FAST, GFTT, MSER, AKAZE, BRISK, KAZE, ORB, SimpleBlob, SIFT)
import cv2
from IPython.display import Image
from IPython.display import display
from matplotlib import pyplot as plt
#
# ここで2枚の画像読み込み
#
# (お好きな画像を読み込んでください)
akaze = cv2.AKAZE_create()
kp1, des1 = akaze.detectAndCompute(img1, None)
kp2, des2 = akaze.detectAndCompute(img2, None)
#
# 内容のチェック
#
print('##### 特徴点の数 #####')
print(len(kp1))
print('##### 特徴量記述子 #####')
print(des1)
print('##### 特徴ベクトル #####')
print(des1.shape)
#
# マッチング
#
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
matches = bf.match(des1, des2)
#
# 特徴点間のハミング距離でソート
#
matches = sorted(matches, key=lambda x: x.distance)
#
# 2画像間のマッチング結果画像を作成
#
img1_2 = cv2.drawMatches(img1, kp1, img2, kp2, matches[:40], None, flags=2)
plt.figure(figsize = (width*2/100, height/100), dpi=100)
plt.imshow(img1_2)
plt.xticks([]), plt.yticks([]) # to hide tick values on X and Y axis
plt.savefig("diff_features.png")
その後で、2枚の画像のうち、どことどこが一致しているかを調べたfrom IPython.display import Image
from IPython.display import display
from matplotlib import pyplot as plt
#
# ここで2枚の画像読み込み
#
# (お好きな画像を読み込んでください)
akaze = cv2.AKAZE_create()
kp1, des1 = akaze.detectAndCompute(img1, None)
kp2, des2 = akaze.detectAndCompute(img2, None)
#
# 内容のチェック
#
print('##### 特徴点の数 #####')
print(len(kp1))
print('##### 特徴量記述子 #####')
print(des1)
print('##### 特徴ベクトル #####')
print(des1.shape)
#
# マッチング
#
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
matches = bf.match(des1, des2)
#
# 特徴点間のハミング距離でソート
#
matches = sorted(matches, key=lambda x: x.distance)
#
# 2画像間のマッチング結果画像を作成
#
img1_2 = cv2.drawMatches(img1, kp1, img2, kp2, matches[:40], None, flags=2)
plt.figure(figsize = (width*2/100, height/100), dpi=100)
plt.imshow(img1_2)
plt.xticks([]), plt.yticks([]) # to hide tick values on X and Y axis
plt.savefig("diff_features.png")
特徴量のうち、一致度上位n個のみをプロットする
距離が遠いものはNoneとして無視する(これであってるのかわからんが・・・)
import matplotlib as mpl
mpl.rcParams['xtick.labelsize'] = 16
mpl.rcParams['ytick.labelsize'] = 16
mpl.rcParams["axes.labelsize"] = 20
mpl.rcParams["axes.titlesize"] = 20
mpl.rcParams["legend.fontsize"] = 20
mpl.rcParams['axes.linewidth'] = 2
mpl.rcParams['figure.facecolor'] = "white"
mpl.rcParams['mathtext.fontset'] = 'stix'
mpl.rcParams['font.family'] = 'STIXGeneral'
import numpy as np
n=100
x_diff = np.zeros(n)
y_diff = np.zeros(n)
for i in range(n):
x = kp1[matches[i].queryIdx].pt[0] - kp2[matches[i].trainIdx].pt[0]
if abs(x) > 20:
x_diff[i] = None
else:
x_diff[i] = x
x = kp1[matches[i].queryIdx].pt[1] - kp2[matches[i].trainIdx].pt[1]
if abs(x) > 20:
y_diff[i] = None
else:
y_diff[i] = x
fig = plt.figure(figsize=[12, 12])
x_diff = x_diff[~np.isnan(x_diff)]
y_diff = y_diff[~np.isnan(y_diff)]
plt.subplot(2, 1, 1)
plt.title("Comparison %s\nand %s" % (fname1, fname2))
plt.hist(x_diff, bins=20, label="horizontal difference\nmean=%.1f pixel\nstd=%.1f pixel" % (np.mean(x_diff), (np.std(x_diff))))
plt.legend(loc="upper right")
plt.xlabel("horizontal difference on features (x-value)")
plt.grid(linestyle='dotted', linewidth=1)
plt.subplot(2, 1, 2)
plt.hist(y_diff, bins=20, label="vertical difference\nmean=%.1f pixel\nstd=%.1f pixel" % (np.mean(y_diff), (np.std(y_diff))))
plt.legend(loc="upper right")
plt.xlabel("vertical difference on features (y-value)")
plt.grid(linestyle='dotted', linewidth=1)
fig.savefig("hist.png")
mpl.rcParams['xtick.labelsize'] = 16
mpl.rcParams['ytick.labelsize'] = 16
mpl.rcParams["axes.labelsize"] = 20
mpl.rcParams["axes.titlesize"] = 20
mpl.rcParams["legend.fontsize"] = 20
mpl.rcParams['axes.linewidth'] = 2
mpl.rcParams['figure.facecolor'] = "white"
mpl.rcParams['mathtext.fontset'] = 'stix'
mpl.rcParams['font.family'] = 'STIXGeneral'
import numpy as np
n=100
x_diff = np.zeros(n)
y_diff = np.zeros(n)
for i in range(n):
x = kp1[matches[i].queryIdx].pt[0] - kp2[matches[i].trainIdx].pt[0]
if abs(x) > 20:
x_diff[i] = None
else:
x_diff[i] = x
x = kp1[matches[i].queryIdx].pt[1] - kp2[matches[i].trainIdx].pt[1]
if abs(x) > 20:
y_diff[i] = None
else:
y_diff[i] = x
fig = plt.figure(figsize=[12, 12])
x_diff = x_diff[~np.isnan(x_diff)]
y_diff = y_diff[~np.isnan(y_diff)]
plt.subplot(2, 1, 1)
plt.title("Comparison %s\nand %s" % (fname1, fname2))
plt.hist(x_diff, bins=20, label="horizontal difference\nmean=%.1f pixel\nstd=%.1f pixel" % (np.mean(x_diff), (np.std(x_diff))))
plt.legend(loc="upper right")
plt.xlabel("horizontal difference on features (x-value)")
plt.grid(linestyle='dotted', linewidth=1)
plt.subplot(2, 1, 2)
plt.hist(y_diff, bins=20, label="vertical difference\nmean=%.1f pixel\nstd=%.1f pixel" % (np.mean(y_diff), (np.std(y_diff))))
plt.legend(loc="upper right")
plt.xlabel("vertical difference on features (y-value)")
plt.grid(linestyle='dotted', linewidth=1)
fig.savefig("hist.png")
検索ワード 「python opencv 位置合わせ qiita」とか
■ 参考 : [OpenCV] いまさら局所特徴量で物体検出!?
■ 参考 : OpenCVで画像マッチングをする
■ 参考 : python+opencvで画像処理の勉強8 パターン・図形・特徴の検出とマッチング
■ 参考 : 2つの画像を比較して違いを見つける
■ 参考 : 特徴点のマッチング
(2023/10/06 追記)
■ 参考 : OpenCV-Pythonチュートリアル
opencvで画像解析する人へのチュートリアル記事
(2023/12/08 追記)
■ 参考 : 特徴点のマッチングと対応点の座標のCSV出力
■ 参考 : OpenCVで特徴量の座標を取得する
■ 参考 : 特徴量マッチングによるテンプレートマッチング
■ 参考 : Python+OpenCVを利用したマッチング処理
■ 参考 : 特徴マッチングによる物体検知
PR
この記事にコメントする
プロフィール
HN:coffee
職業:物理屋(自称)
趣味:映画鑑賞、登山
出身:大阪府の南の田舎
自己紹介:
import MyProfile
import coffee_pote from TWITTER
import amazonのほしい物リスト from WISH_LIST
print "先月子供が産まれました!"
# 最終更新 2022/10/25
職業:物理屋
趣味:映画鑑賞、登山
出身:大阪府の南の田舎
自己紹介:
import MyProfile
import coffee_pote from TWITTER
import amazonのほしい物リスト from WISH_LIST
print "先月子供が産まれました!"
# 最終更新 2022/10/25
カテゴリー
ブログ内検索
リンク
相互リンク募集中です
(Twitterにてお知らせください)
Demo scripts for gnuplot version 5 (gnuplotのさまざまなデモ画像と作り方がまとめられている、眺めているだけでできるようになった気分になれる)
gnuplotスクリプトの解説 (米澤進吾さんの個人ページ、gnuplotと言えばこのかた)
gnuplot のページ (Takeno Lab、うちのブログがリンクされていたのでリンク返し)
Twitterから映画の評価が分かる & 映画の鑑賞記録が残せる coco (映画の感想をまとめられるサイト、いつもお世話になっています)
Astronomy Picture of the Day Archive (天文や宇宙関連の最新の話題について画像とともにNASAが説明しているページ)
今日のほしぞら (任意の時刻の空で見える星を表示してくれる、国立天文台が管理している)
GNUPLOTとアニメーション (応用の項目の「見せてあげよう!ラピュタの雷を!!」あたりからすごすぎる)
読書メーター (読んだ本をリストできる便利なサイト)
flickr難民の写真置き場 (20XX年、flickrは有料化の炎に包まれた。あらゆるflickr無料ユーザーは絶滅したかに見えた。 しかし、tumblr移住民は死に絶えてはいなかった。)
教授でもできるMac OS X へのLaTeX, X11, gccのインストレーションと環境設定 (阪大の山中卓さんのwebページ、タイトルにセンスが溢れている、内容は超充実してる、特にTeX関連、学振DCとかPDの申請書類作成時にはお世話になっております)
英語論文執筆用の例文検索サービス (とんでもないものを見つけてしまった・・・・ arXivに収録されている 811,761報の 英語論文から,例文を検索するための検索エンジン)
Demo scripts for gnuplot version 5 (gnuplotのさまざまなデモ画像と作り方がまとめられている、眺めているだけでできるようになった気分になれる)
gnuplotスクリプトの解説 (米澤進吾さんの個人ページ、gnuplotと言えばこのかた)
gnuplot のページ (Takeno Lab、うちのブログがリンクされていたのでリンク返し)
Twitterから映画の評価が分かる & 映画の鑑賞記録が残せる coco (映画の感想をまとめられるサイト、いつもお世話になっています)
Astronomy Picture of the Day Archive (天文や宇宙関連の最新の話題について画像とともにNASAが説明しているページ)
今日のほしぞら (任意の時刻の空で見える星を表示してくれる、国立天文台が管理している)
GNUPLOTとアニメーション (応用の項目の「見せてあげよう!ラピュタの雷を!!」あたりからすごすぎる)
読書メーター (読んだ本をリストできる便利なサイト)
flickr難民の写真置き場 (20XX年、flickrは有料化の炎に包まれた。あらゆるflickr無料ユーザーは絶滅したかに見えた。 しかし、tumblr移住民は死に絶えてはいなかった。)
教授でもできるMac OS X へのLaTeX, X11, gccのインストレーションと環境設定 (阪大の山中卓さんのwebページ、タイトルにセンスが溢れている、内容は超充実してる、特にTeX関連、学振DCとかPDの申請書類作成時にはお世話になっております)
英語論文執筆用の例文検索サービス (とんでもないものを見つけてしまった・・・・ arXivに収録されている 811,761報の 英語論文から,例文を検索するための検索エンジン)
最新記事
(11/20)
(03/05)
(02/29)
(02/21)
(02/21)
(02/21)
(02/21)
(01/13)
(01/05)
(01/05)