Пример #1
0
	def do_generate_control_points_by_pair(self, pair, image_fn_pair):
		'''high level function uses by sub-stitches.  Given a pair of images make a best effort to return a .pto object'''
		'''
		pair: ImageCoordinatePair() object
		image_fn_pair: tuple of strings
		
		Algorithm:
		First try to stitch normally (either whole image or partial depending on the mode)
		If that doesn't succeed and softening is enabled try up to three times to soften to produce a match
		If that still doesn't produce a decent solution return None and let higher levels deal with
		'''
		soften_iterations = 3
	
		print
		print
		#print 'Generating project for image pair (%s / %s, %s / %s)' % (image_fn_pair[0], str(pair[0]), image_fn_pair[1], str(pair[1]))
		print 'Generating project for image pair (%s, %s)' % (image_fn_pair[0], image_fn_pair[1])
	
		if True:
			# Try raw initially
			print 'Attempting sharp match...'
			ret_project = self.try_control_points_with_position(pair, image_fn_pair)
			if ret_project:
				return ret_project
		
		print 'WARNING: bad project, attempting soften...'

		soften_image_file_0_managed = ManagedTempFile.from_same_extension(image_fn_pair[0])
		soften_image_file_1_managed = ManagedTempFile.from_same_extension(image_fn_pair[1])

		softener = Softener()
		first_run = True

		for i in range(0, soften_iterations):
			# And then start screwing with it
			# Wonder if we can combine features from multiple soften passes?
			# Or at least take the maximum
			# Do features get much less accurate as the soften gets up there?
		
			print 'Attempting soften %d / %d' % (i + 1, soften_iterations)

			if first_run:			
				softener.run(image_fn_pair[0], soften_image_file_0_managed.file_name)
				softener.run(image_fn_pair[1], soften_image_file_1_managed.file_name)
			else:
				softener.run(soften_image_file_0_managed.file_name)
				softener.run(soften_image_file_1_managed.file_name)			
			
			pair_soften_image_file_names = (soften_image_file_0_managed.file_name, soften_image_file_1_managed.file_name)
			ret_project = self.try_control_points_with_position(pair, pair_soften_image_file_names)
			# Did we win?
			if ret_project:
				# Fixup the project to reflect the correct file names
				text = str(ret_project)
				print
				print 'Before sub'
				print
				print str(ret_project)
				print
				print
				print
				print '%s => %s' % (soften_image_file_0_managed.file_name, image_fn_pair[0])
				text = text.replace(soften_image_file_0_managed.file_name, image_fn_pair[0])
				print '%s => %s' % (soften_image_file_1_managed.file_name, image_fn_pair[1])
				text = text.replace(soften_image_file_1_managed.file_name, image_fn_pair[1])

				ret_project.set_text(text)
				print
				print 'After sub'
				print
				print str(ret_project)
				print
				print
				print
				#sys.exit(1)
				return ret_project
				
			first_run = False

		print 'WARNING: gave up on generating control points!' 
		return None
Пример #2
0
	def generate_control_points(self, pair, pair_images):
		soften_iterations = 3
	
		if True:
			# Try raw initially
			ret_project = self.try_control_points(pair, pair_images)
			if ret_project:
				return ret_project
		
		print 'WARNING: bad project, attempting soften...'

		soften_image_file_0_managed = ManagedTempFile.from_same_extension(pair_images[0])
		soften_image_file_1_managed = ManagedTempFile.from_same_extension(pair_images[1])

		softener = Softener()
		first_run = True

		for i in range(0, soften_iterations):
			# And then start screwing with it
			# Wonder if we can combine features from multiple soften passes?
			# Or at least take the maximum
			# Do features get much less accurate as the soften gets up there?
		
			print 'Attempting soften %d / %d' % (i + 1, soften_iterations)

			if first_run:			
				softener.run(pair_images[0], soften_image_file_0_managed.file_name)
				softener.run(pair_images[1], soften_image_file_1_managed.file_name)
			else:
				softener.run(soften_image_file_0_managed.file_name)
				softener.run(soften_image_file_1_managed.file_name)			
			
			pair_soften_image_file_names = (soften_image_file_0_managed.file_name, soften_image_file_1_managed.file_name)
			ret_project = self.try_control_points(pair, pair_soften_image_file_names)
			# Did we win?
			if ret_project:
				# Fixup the project to reflect the correct file names
				text = ret_project.__repr__()
				print
				print 'Before sub'
				print
				print ret_project.__repr__()
				print
				print
				print
				print '%s => %s' % (soften_image_file_0_managed.file_name, pair_images[0])
				text = text.replace(soften_image_file_0_managed.file_name, pair_images[0])
				print '%s => %s' % (soften_image_file_1_managed.file_name, pair_images[1])
				text = text.replace(soften_image_file_1_managed.file_name, pair_images[1])

				ret_project.set_text(text)
				print
				print 'After sub'
				print
				print ret_project.__repr__()
				print
				print
				print
				#sys.exit(1)
				return ret_project
				
			first_run = False

		print 'WARNING: gave up on generating control points!' 
		return None