[Bf-extensions-cvs] [bfa11586] master: space_clip_editor_refine_solution move to release: T50514
meta-androcto
noreply at git.blender.org
Mon Apr 17 14:16:21 CEST 2017
Commit: bfa11586766e56b9dc28f1888466c6351984e655
Author: meta-androcto
Date: Mon Apr 17 22:15:52 2017 +1000
Branches: master
https://developer.blender.org/rBACbfa11586766e56b9dc28f1888466c6351984e655
space_clip_editor_refine_solution move to release: T50514
===================================================================
D space_clip_editor_refine_solution.py
===================================================================
diff --git a/space_clip_editor_refine_solution.py b/space_clip_editor_refine_solution.py
deleted file mode 100644
index baed13fc..00000000
--- a/space_clip_editor_refine_solution.py
+++ /dev/null
@@ -1,197 +0,0 @@
-# -*- coding:utf-8 -*-
-
-# ***** GPL LICENSE BLOCK *****
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-# All rights reserved.
-# ***** GPL LICENSE BLOCK *****
-
-bl_info = {
- "name": "Refine tracking solution",
- "author": "Stephen Leger",
- "license": "GPL",
- "version": (1, 1, 1),
- "blender": (2, 7, 8),
- "location": "Clip Editor > Tools > Solve > Refine Solution",
- "description": "Refine motion solution by setting track weight according reprojection error",
- "warning": "",
- "wiki_url": "https://github.com/s-leger/blenderTracking/wiki",
- "tracker_url": "https://github.com/s-leger/blenderTracking/issues",
- "support": "COMMUNITY",
- "category": "Tools",
-}
-
-import bpy
-import math
-from mathutils import Vector
-
-class OP_Tracking_refine_solution(bpy.types.Operator):
- """Set track weight by error and solve camera motion"""
- bl_idname = "tracking.refine_solution"
- bl_label = "Refine"
- bl_options = {"UNDO"}
-
- @classmethod
- def poll(cls, context):
- return (context.area.spaces.active.clip is not None)
-
- def execute(self, context):
- error = context.window_manager.TrackingTargetError
- smooth = context.window_manager.TrackingSmooth
- clip = context.area.spaces.active.clip
- try:
- tracking = clip.tracking
- tracks = tracking.tracks
- winx = float(clip.size[0])
- winy = float(clip.size[1])
- aspy = 1.0 / tracking.camera.pixel_aspect
- start = tracking.reconstruction.cameras[0].frame
- end = tracking.reconstruction.cameras[-1].frame
- except:
- return {'CANCELED'}
-
- marker_position = Vector()
-
- for frame in range(start, end):
- camera = tracking.reconstruction.cameras.find_frame(frame)
- if camera is not None:
- imat = camera.matrix.inverted()
- projection_matrix = imat.transposed()
- else:
- continue
-
- for track in tracking.tracks:
- marker = track.markers.find_frame(frame)
- if marker is None:
- continue
-
- # weight incomplete tracks on start and end
- if frame > start + smooth and frame < end - smooth:
- for m in track.markers:
- if not m.mute:
- tstart = m.frame
- break
- for m in reversed(track.markers):
- if not m.mute:
- tend = m.frame
- break
- dt = min(0.5 * (tend - tstart), smooth)
- if dt > 0:
- t0 = min(1.0, (frame - tstart) / dt)
- t1 = min(1.0, (tend - frame) / dt)
- tw = min(t0, t1)
- else:
- tw = 0.0
- else:
- tw = 1.0
-
- reprojected_position = track.bundle * projection_matrix
- if reprojected_position.z == 0:
- track.weight = 0
- track.keyframe_insert("weight", frame=frame)
- continue
- reprojected_position = reprojected_position / -reprojected_position.z * tracking.camera.focal_length_pixels
- reprojected_position = Vector((tracking.camera.principal[0] + reprojected_position[0],tracking.camera.principal[1] * aspy + reprojected_position[1], 0))
-
- marker_position[0] = (marker.co[0] + track.offset[0]) * winx
- marker_position[1] = (marker.co[1] + track.offset[1]) * winy * aspy
-
- dp = marker_position - reprojected_position
- if dp.length == 0:
- track.weight = 1.0
- else:
- track.weight = min(1.0, tw * error / dp.length)
- track.keyframe_insert("weight", frame=frame)
-
-
- bpy.ops.clip.solve_camera()
- return{'FINISHED'}
-
-class OP_Tracking_reset_solution(bpy.types.Operator):
- """Reset track weight and solve camera motion"""
- bl_idname = "tracking.reset_solution"
- bl_label = "Reset"
- bl_options = {"UNDO"}
-
- @classmethod
- def poll(cls, context):
- return (context.area.spaces.active.clip is not None)
-
- def execute(self, context):
- clip = context.area.spaces.active.clip
- try:
- tracking = clip.tracking
- tracks = tracking.tracks
- start = tracking.reconstruction.cameras[0].frame
- end = tracking.reconstruction.cameras[-1].frame
- except:
- return {'CANCELED'}
- start = tracking.reconstruction.cameras[0].frame
- end = tracking.reconstruction.cameras[-1].frame
- for frame in range(start, end):
- camera = tracking.reconstruction.cameras.find_frame(frame)
- if camera is None:
- continue
- for track in tracking.tracks:
- marker = track.markers.find_frame(frame)
- if marker is None:
- continue
- track.weight = 1.0
- track.keyframe_insert("weight", frame=frame)
- bpy.ops.clip.solve_camera()
- return{'FINISHED'}
-
-class RefineMotionTrackingPanel(bpy.types.Panel):
- bl_label = "Refine solution"
- bl_space_type = "CLIP_EDITOR"
- bl_region_type = "TOOLS"
- bl_category = "Solve"
-
- @classmethod
- def poll(cls, context):
- return (context.area.spaces.active.clip is not None)
-
- def draw(self, context):
- layout = self.layout
- box = layout.box()
- row = box.row(align=True)
- row.label("Refine")
- row = box.row(align=True)
- row.prop(context.window_manager, "TrackingTargetError", text="Target error")
- row = box.row(align=True)
- row.prop(context.window_manager, "TrackingSmooth", text="Smooth transition")
- row = box.row(align=True)
- row.operator("tracking.refine_solution")
- row.operator("tracking.reset_solution")
-
-def register():
- bpy.types.WindowManager.TrackingTargetError = bpy.props.FloatProperty(
- name="error",
- description="Refine motion track target error",
- default=0.3,
- min=0.01)
- bpy.types.WindowManager.TrackingSmooth = bpy.props.FloatProperty(
- name="Smooth transition",
- description="Smooth weight transition on start and end of incomplete tracks",
- default=25,
- min=1)
- bpy.utils.register_module(__name__)
-
-def unregister():
- bpy.utils.unregister_module(__name__)
- del bpy.types.WindowManager.TrackingTargetError
- del bpy.types.WindowManager.TrackingSmooth
-
-if __name__ == "__main__":
- register()
\ No newline at end of file
More information about the Bf-extensions-cvs
mailing list