大きな画像から部分画像の座標を取得する方法

概要 大きな画像の一部が切り出された複数の画像から、元の画像内での座標を取得する機会がありました。本記事では、そのための方法についての備忘録をまとめます。 OpenCV の SIFT (Scale-Invariant Feature Transform) を用いて、テンプレート画像と元の画像を特徴点マッチングし、アフィン変換を推定して座標を取得する方法を紹介します。 実装 必要なライブラリ p i p i n s t a l l o p e n c v - p y t h o n n u m p y t q d m Pythonコード 以下のコードでは、指定した大きな画像 (image_path) に対して、テンプレート画像 (templates_dir 内の PNG 画像) を SIFT でマッチングし、元の画像内の座標を取得します。 i i f f i # d # d # d # d # d # d m m r r m e e e e e e p p o o p 画 f 特 f マ f ア f 画 f メ f o o m m o 像 徴 ッ フ 像 イ r r r 読 l i i r 点 e r チ m m g r ィ e s d M r 上 d h r t c r ン m # i t d # s b k # i f # c p t t g t t み o m f e 抽 x e ン a a o e ン s r s _ e に r , e r v e 処 a m e s i f p f o v r l q 込 a g t 出 t t グ t t o t 変 t c t a t マ a c a 2 t 理 i 画 g m t S f 1 特 r 結 2 i c n o d o み d i u r u 処 c c d u 換 i _ _ f u ッ w w t n . u n 像 p _ I t = , 徴 d 果 . n v u b m s _ = m p r a r 理 h h _ r 推 m p p f r チ _ _ s p r ( と = l i F 点 e p r t t i k i g i # M i # b # x b c を i t 2 m i g r n c n _ e m n 定 a t t i n ン m = p f o n i テ _ m T = c d が s r e e e f p f o f _ f e , a v 保 m ( p i i m c i t f s a t s s n グ a t o l m ン l p g 特 v e 見 1 i t m m 2 o ア a 矩 s フ s 2 存 w f y m m a v i n i _ d e t g e e M 結 t t s r y t a プ o a 徴 c 2 s つ n u p p t , d d g フ f M 形 t ァ y e . r " p p g 2 s t m f e a = c o _ = = , _ 果 c e m l r g レ a t = 量 v . 1 か i t r l l e c e c _ o p c ィ f _ p c 描 _ イ , _ p i 結 a o o e . ( g e t t h o a a を h m = e i a e ー d h 検 2 B ら s ( n _ m o d s o m o r o ン i a r o 画 d ル n u t 果 s r r _ i N f a e u m e d f n n _ f 描 e p d n n _ ト _ s c 出 . F = な " p = p n e 2 n a d i n 変 n f i n s 名 _ a t e 画 t t g m o " t c r a s _ f p p f 画 d l n _ e s p 一 i v 器 S M か N 対 a l t s t t _ n t 換 e f n t t を , m T ( 像 n r r n 画 u t e t m i . . = i _ _ p p s f a 覧 m = 2 I a e っ o 象 t l i 2 i i c m t i 推 i t i 矩 e e o を p g t a e e 像 r o s c = a n f f n r s . t ( o t の a . & F t x た n 画 h o i n s n h a ( n 定 = n ( n = 形 _ x u 保 l q y a : が e r ( h t e l l c e e h f s i r h 読 g g i T c t 場 e 像 a s u = u e t f u e f u の = t t 存 o d ( d 見 s . d e [ c _ o o v c a l m m , み e l m B _ h r 合 : の i d e N e s c " e e " e d 近 = ( p し b m p ( つ ( d e r m h t a a 2 t p o = a e 込 _ o r F c e a 特 n _ N e o h 特 s i ア r く o d u ま a p か i e s . e r t t . a e a g d t み g b e M r r c 徴 i o x n = e 徴 t s フ a に c s s t し t a り m t 1 k f s a 3 3 e n t c e _ e r ( a a e ( t 点 t m n t e s 点 i ィ w 表 v . t _ た h t ま a e , n o n 2 2 s g 3 v , p m a t d t a c _ が q a e r : m の m N ン _ 示 2 p _ p : ) h せ g c n r i s ( ( t l 2 2 t p y e ( c t v f 見 d g : a a i マ a o 変 m . a i a : , ん e t d M f f [ [ i e ( . [ s l ( m i h e 2 e つ m e c t s ッ t n 換 a b t m t { : , A e a m o k k m ( [ t n a i p m e ( . a か ( _ t c チ e e 推 t o h g h o c n s t , l r p p a i [ r p t m l a r ) N t り t g _ h N ン _ : 定 c u . , , u v { d d 2 c e m 2 1 t m 0 a . e a a g O u ま e r f _ o グ a に h n s t 2 p e C , h n n ( [ [ e a , n i s g t e 設 R r せ m a e f n が f 失 e d p b d p . a t o ( ( k m m A g s n _ e e _ 定 M e ん p y a e e 不 f 敗 d i l a s u I t e m m d i g p . . f e 0 f t d _ s p _ s で l ( t a : 足 i : _ n i s t t M h c p a e n o 1 t q f , ] o 3 i p _ a L ( し _ t u t : n r g t e _ _ R } t u t s o , r u i , r 2 r a d t 2 i た p e r u e { e R e _ i p E " o t c 1 m d a e n M m ( , t i h , m 。 a m e r { _ t c e x n m a A ) r e h , a _ k i r e _ [ ( t h r ) g " t p s e t t e t c t a g t D ) ( e t m p n y P a w n r o ) ) c , ) h l ( s e r m a t ( m ) h _ : i r d c a 2 I I a f , p a u r s _ t ( m a p n ( o e } G m , e h t , d d r f . n t o s ) p e d p n l g b s , " R a s e c x x t i 0 a s p s i : a m e l s _ l e . ) A g r 2 s h g ] ] i n ] r f u s f t p s _ f p e s p ( Y e a , e o . . a e , r o t C t h l 1 p o a ( t a x S , t i s o p p l , a r _ h ) ) , , a r t d _ t , C i k f ) d t t 2 [ y m p e t m h s d h A N o = _ D t w ( e a c s d h ( } t s . y L o _ 2 m > m f f ( e , [ d t k i e } k " _ t b E n t ) . = a o o s m r _ h = f s " p ) i ) a - ) e e d t r r r p h e p ) F t 2 ) 1 m s ) s i m c c l ] c t : a ) , , g e 1 t s i h m m _ _ , t s l , n 0 = t n e p s _ ) s b k a ) 0 a _ s i i t h [ p ] e f p M m , . n m ) n n s a 0 t , ) ) 2 _ e 7 c a : , p , s , a ( c , e t g g e ] i f t v c o o d ) h ) s g f e 2 m < h o o s : ] , C o i m . i e d d t ] l o n p F n r s _ _ _ ) M o d e l O _ a m m p _ s _ , _ N m t e a a t a e m p T a i l t t s # f d a t a _ t o s c c , f = t e t H c _ e h h 長 i T c m h E h t e e m 方 n r h p ) R e e N s s e 形 e u e l ) S s s o ] ] t の ) e s . [ H = t n ) ) h 四 [ , ) s 0 E 4 e . . o 隅 0 h ] Y ) r r d ] c a _ : e e = o p S n s s c l e I . h h v # o ) M d a a 2 r P i p p . 変 = L s e e R 換 ( E t ( ( A 後 0 X a - - N の , , n 1 1 S 座 c , , A 標 0 1 e C , , ] 1 1 , , , 2 ( r 5 0 2 2 a 5 , ) ) n ) s , 0 a , c t R h 2 e i 5 p c 5 r k ) o n , j e T s 2 h s ) r = e 2 s ) h o l d = 5 . 0 ) 実行 # i f 実 行 _ # I T O m n M E U a a パ A M T i m ラ G P P n e メ E L U ( _ ー _ A T I _ タ P T _ M 設 A E P A = 定 T S A G = H _ T E D H _ " = I P _ R = A _ " T m / = " H a x / , i x " x n x x T _ x x E _ d x / M " e x m P : f / a L a * t A u . c T l p h E t n _ S . g r _ j " e D p s I g u R " l , t . O j U p T g P " U T _ P A T H ) まとめ 本記事では、SIFT を用いた特徴点マッチング によって、部分画像が元画像のどこに位置するかを推定し、アフィン変換 で位置を特定する方法を紹介しました。 ...

2025年2月23日 · 12 分 · Nakamura