2016-03-18 6 views
6

मेरे पास दो छवियां होंगी।अनुवादित होने के बावजूद छवियों को ओवरलैप करें

वे या तो समान या लगभग समान होंगे।

लेकिन कभी-कभी छवियों में से किसी भी अक्ष पर कुछ पिक्सेल द्वारा स्थानांतरित हो सकता है।

यह पता लगाने का सबसे अच्छा तरीका क्या होगा कि इस तरह की कोई चाल चल रही है या नहीं?

या बेहतर अभी भी, छवियों में हेरफेर करने का सबसे अच्छा तरीका क्या होगा ताकि वे इस अवांछित आंदोलन के लिए ठीक हो जाएं?

+1

क्या छवियां खराब हुई हैं? या अभी अनुवाद किया गया है, "अक्ष पर कुछ पिक्सेल द्वारा स्थानांतरित" के रूप में सुझाव दिया गया है? – ohruunuruus

+0

बस चले गए। मैंने phrasing तय किया। –

उत्तर

2

छवियों वास्तव में लगभग समान हैं, और बस अनुवाद किया जाता है (अर्थात नहीं विषम, घुमाया, छोटा, आदि) हैं, तो आप पार से संबंध का उपयोग कर की कोशिश कर सकते।

जब आप अपने साथ एक छवि को पार करते हैं (यह ऑटो-सहसंबंध है), अधिकतम मूल्य परिणामी मैट्रिक्स के केंद्र में होगा। यदि आप छवि को लंबवत या क्षैतिज रूप से स्थानांतरित करते हैं और फिर मूल छवि के साथ पार-सहसंबंधित करते हैं तो अधिकतम मान की स्थिति तदनुसार बदल जाएगी। अपेक्षित स्थिति के सापेक्ष अधिकतम मूल्य की स्थिति में बदलाव को मापकर, आप निर्धारित कर सकते हैं कि छवि को लंबवत और क्षैतिज रूप से कितनी दूर तक अनुवादित किया गया है।

यहां पाइथन में एक खिलौना उदाहरण है। कुछ सामान आयात करने के लिए एक परीक्षण छवि पैदा करने, और परीक्षण कर रहा ऑटो सहसंबंध करके प्रारंभ करें:

import numpy as np 
from scipy.signal import correlate2d 

# generate a test image 
num_rows, num_cols = 40, 60 
image = np.random.random((num_rows, num_cols)) 

# get the auto-correlation 
correlated = correlate2d(image, image, mode='full') 

# get the coordinates of the maximum value 
max_coords = np.unravel_index(correlated.argmax(), correlated.shape) 

यह निर्देशांक max_coords = (39, 59) पैदा करता है। अब दृष्टिकोण का परीक्षण करने, सही एक स्तंभ के लिए छवि पाली, बाईं तरफ कुछ यादृच्छिक मान जोड़ने, और फिर पार से संबंध में अधिकतम मूल्य पाते हैं:

image_translated = np.concatenate(
    (np.random.random((image.shape[0], 1)), image[:, :-1]), 
    axis=1) 

correlated = correlate2d(image_translated, image, mode='full') 
new_max_coords = np.unravel_index(correlated.argmax(), correlated.shape) 

यह new_max_coords = (39, 60) देता है, सही ढंग से छवि का संकेत 1 से क्षैतिज ऑफसेट है (क्योंकि np.array(new_max_coords) - np.array(max_coords)[0, 1] है)। इस जानकारी का उपयोग करके आप अनुवादों की क्षतिपूर्ति के लिए छवियों को स्थानांतरित कर सकते हैं।

ध्यान दें कि, क्या आपको इस तरह से जाने का फैसला करना चाहिए, आपके पास काम करने के लिए बहुत सारे कंक हो सकते हैं। एक छवि के आयामों को निर्धारित करते समय, एक-एक-एक त्रुटि त्रुटिपूर्ण होती है, जहां अधिकतम समन्वय 'सहसंबंध' का पालन करना चाहिए (यानी ऑटो-सहसंबंध की गणना से बचने और इन निर्देशांकों को अनुभवजन्य रूप से निर्धारित करने से बचने के लिए), खासकर अगर छवियों में भी एक है पंक्तियों/स्तंभों की संख्या। उपर्युक्त उदाहरण में, केंद्र केवल [num_rows-1, num_cols-1] है, लेकिन मुझे यकीन नहीं है कि यह आमतौर पर एक सुरक्षित धारणा है या नहीं।

लेकिन कई मामलों के लिए - विशेष रूप से उन छवियों वाले जो लगभग समान हैं और केवल अनुवादित - इस दृष्टिकोण को काफी अच्छी तरह से काम करना चाहिए।

संबंधित मुद्दे