def update_frame(val): global n global reference_angle global previous_angle reference_frameID = int(np.around(slider_reference_frame.val)) current_frameID = int(np.around(slider_current_frame.val)) frame0 = loadFrame(frameManager, reference_frameID, matrixID) frame1 = loadFrame(frameManager, current_frameID, matrixID) # Compute translation between reference frames slipvector = NCC.normalized_cross_correlation(frame0, frame1) # Compute orientation of reference frame (centroid_x0, centroid_y0, angle0, Cov0, lambda10, lambda20, std_dev_x0, std_dev_y0, skew_x0, skew_y0, compactness10, compactness20, eccentricity10, eccentricity20) = IM.compute_orientation_and_shape_features(frame0) # Compute orientation of current frame features1 = IM.compute_orientation_and_shape_features(frame1) (centroid_x1, centroid_y1, angle1, Cov1, lambda11, lambda21, std_dev_x1, std_dev_y1, skew_x1, skew_y1, compactness11, compactness21, eccentricity11, eccentricity21) = features1 IM.report_shape_features("Frame %d" %current_frameID , features1) # Reset tracking if reference angle changed if abs(reference_angle-angle0) > 0.001: reference_angle = angle0 # [0, 180) previous_angle = angle0 # [0, 360) slip_angle = 0 # (-∞, ∞) n = 0 # rotation carry # Track rotation current_angle, slip_angle, slip_angle_reference, n = IM.track_angle(reference_angle, previous_angle, angle1, n) previous_angle = current_angle ########### # Plotting ########### # Reference frame plot_frame(axes[1], frame0, centroid_x0, centroid_y0, Cov0) # Current frame plot_frame(axes[2], frame1, centroid_x1, centroid_y1, Cov1) # Textbox bbox_props = dict(boxstyle="round", fc="w", ec="0.5", alpha=1.0) ax = axes[0] ax.cla() ax.axis('off') ax.text(0.5, 0.5, text_template%(current_angle, slip_angle, slipvector[0], slipvector[1]), transform=ax.transAxes, ha="center", va="center", size=14, bbox=bbox_props) plt.draw()
def update_frame(val): global n global previous_angle angle = np.around(slider_rotation.val) shift = np.around(slider_translation.val) frame1 = generate_frame(angle, shift) # Slip simulation # Compute translation slipvector = NCC.normalized_cross_correlation(frame0, frame1) # Compute orientation (centroid_x, centroid_y, angle, Cov, lambda1, lambda2, std_dev_x, std_dev_y, skew_x, skew_y, compactness1, compactness2, eccentricity1, eccentricity2) = IM.compute_orientation_and_shape_features(frame1) # Track rotation current_angle, slip_angle, slip_angle_reference, n = IM.track_angle(reference_angle, previous_angle, angle, n) previous_angle = current_angle ########### # Plotting ########### ax = axes[1] ax.cla() # clear ax.imshow(frame1, cmap=cmap, vmin=0.001, vmax=1.0, interpolation='nearest') l3, l4 = plot_principal_axes_cov(centroid_x, centroid_y, Cov, UIBK_orange, ax) ax.set_title("Moving frame") ax.text(0.01, 1.0, text_template_angle%(current_angle, slip_angle), size=12, color=UIBK_orange) ax.text(0.01, 2.0, text_template_shift%(slipvector[0], slipvector[1]), size=12, color=UIBK_orange) plt.draw()
def update_frame(val): global n global previous_angle angle = np.around(slider_rotation.val) shift = np.around(slider_translation.val) frame1 = generate_frame(angle, shift) # Slip simulation # Compute translation slipvector = NCC.normalized_cross_correlation(frame0, frame1) # Compute orientation (centroid_x, centroid_y, angle, Cov, lambda1, lambda2, std_dev_x, std_dev_y, skew_x, skew_y, compactness1, compactness2, eccentricity1, eccentricity2) = IM.compute_orientation_and_shape_features(frame1) # Track rotation current_angle, slip_angle, slip_angle_reference, n = IM.track_angle( reference_angle, previous_angle, angle, n) previous_angle = current_angle ########### # Plotting ########### ax = axes[1] ax.cla() # clear ax.imshow(frame1, cmap=cmap, vmin=0.001, vmax=1.0, interpolation='nearest') l3, l4 = plot_principal_axes_cov(centroid_x, centroid_y, Cov, UIBK_orange, ax) ax.set_title("Moving frame") ax.text(0.01, 1.0, text_template_angle % (current_angle, slip_angle), size=12, color=UIBK_orange) ax.text(0.01, 2.0, text_template_shift % (slipvector[0], slipvector[1]), size=12, color=UIBK_orange) plt.draw()
# Minimum amount of active cells for slip vector thresh_active_cells_rotation = 5 # Minimum amount of active cells for slip angle thresh_eccentricity = 0.6 # Principal axis lengths (disc or square: 0.0, elongated rectangle: ->1.0) thresh_compactness = 0.9 # How much the object resembles a disc (perfect circle 1.0) # Get initial frame (Assumtion: valid frame) frame0 = loadFrame(frameManager, startID, matrixID) active_cells0 = frameManager.get_num_active_cells_matrix(startID, matrixID) # Compute orientation of initial frame (centroid_x, centroid_y, angle, Cov, lambda1, lambda2, std_dev_x, std_dev_y, skew_x, skew_y, compactness1, compactness2, eccentricity1, eccentricity2) = IM.compute_orientation_and_shape_features(frame0) reference_angle = angle # [0, 180) previous_angle = angle # [0, 360) slip_angle = 0 # (-∞, ∞) n = 0 # Rotation carry # Records r_slipvector = [] r_slipangle = [] r_centroid_x = [] r_centroid_y = [] r_angle = [] r_Cov = [] r_lambda1 = [] r_lambda2 = []
( centroid_x, centroid_y, angle, Cov, lambda1, lambda2, std_dev_x, std_dev_y, skew_x, skew_y, compactness1, compactness2, eccentricity1, eccentricity2, ) = IM.compute_orientation_and_shape_features(frame0) reference_angle = angle # [0, 180) previous_angle = angle # [0, 360) slip_angle = 0 # (-∞, ∞) n = 0 # Rotation carry # Records r_slipvector = [] r_slipangle = [] r_centroid_x = [] r_centroid_y = [] r_angle = [] r_Cov = []
frameManager = framemanager_python.FrameManagerWrapper() frameManager.load_profile(profileName); numFrames = frameManager.get_tsframe_count(); # Relative timestamps in seconds timestamps = frameManager.get_tsframe_timestamp_list()[startID:stopID] timestamps = (timestamps-timestamps[0]) / 1000.0 # Get initial frame (Assumtion: valid frame) frame0 = loadFrame(frameManager, startID, matrixID) active_cells0 = frameManager.get_num_active_cells_matrix(startID, matrixID) # Compute orientation of initial frame (centroid_x, centroid_y, angle, Cov, lambda1, lambda2, std_dev_x, std_dev_y, skew_x, skew_y, compactness1, compactness2, eccentricity1, eccentricity2) = IM.compute_orientation_and_shape_features(frame0) reference_angle = angle # [0, 180) previous_angle = angle # [0, 360) slip_angle = 0 # (-∞, ∞) n = 0 # Rotation carry # Records slipvectors = np.zeros([1,2]) slipvectors_ncc_1 = np.zeros([1,2]) slipvectors_ncc_2 = np.zeros([1,2]) slipvectors_pc = np.zeros([1,2]) slipangles = np.zeros([1,1])
( centroid_x, centroid_y, angle_deg, Cov, lambda1, lambda2, std_dev_x, std_dev_y, skew_x, skew_y, compactness1, compactness2, eccentricity1, eccentricity2, ) = IM.compute_orientation_and_shape_features(image) ######### ## PCA ######### # Extract image coordinates of active cells active_cells = np.array(np.where(image > 0.001)).T active_cells = np.fliplr(active_cells) # x in first column, y in second # Center the data center = np.mean(active_cells, axis=0) active_cells -= center # Calculate the covariance matrix Cov_PCA = np.cov(active_cells.T)
"img_disc_asymmetric.png", #"img_test01.png", "img_test02.png", "img_test03.png", "img_test04.png", "img_test05.png", "img_test06.png") frames = [] for name in filenames: frame = cv2.imread(name, cv2.CV_LOAD_IMAGE_GRAYSCALE) frames.append((name, frame)) for frame in frames: # Compute shape features and orientation features = IM.compute_orientation_and_shape_features(frame[1]) # Report IM.report_shape_features(frame[0], features) ######################## # Load pressure profile ######################## profileName = os.path.abspath("slip_and_rotation_teapot_handle.dsa") frameManager = framemanager_python.FrameManagerWrapper() frameManager.load_profile(profileName) frameID = 34 matrixID = 1 frame = np.copy(frameManager.get_tsframe(frameID, matrixID)) frame = np.uint8(frame /
color=color, linewidth=3.0, alpha=0.9) ax.axis('image') #image = cv2.imread('blob_symmetric.png', cv2.CV_LOAD_IMAGE_GRAYSCALE) image = cv2.imread('blob_asymmetric.png', cv2.CV_LOAD_IMAGE_GRAYSCALE) ################# # Image Moments ################ (centroid_x, centroid_y, angle_deg, Cov, lambda1, lambda2, std_dev_x, std_dev_y, skew_x, skew_y, compactness1, compactness2, eccentricity1, eccentricity2) = IM.compute_orientation_and_shape_features(image) ######### ## PCA ######### # Extract image coordinates of active cells active_cells = np.array(np.where(image > 0.001)).T active_cells = np.fliplr(active_cells) # x in first column, y in second # Center the data center = np.mean(active_cells, axis=0) active_cells -= center # Calculate the covariance matrix Cov_PCA = np.cov(active_cells.T)
# "img_test01.png", "img_test02.png", "img_test03.png", "img_test04.png", "img_test05.png", "img_test06.png", ) frames = [] for name in filenames: frame = cv2.imread(name, cv2.CV_LOAD_IMAGE_GRAYSCALE) frames.append((name, frame)) for frame in frames: # Compute shape features and orientation features = IM.compute_orientation_and_shape_features(frame[1]) # Report IM.report_shape_features(frame[0], features) ######################## # Load pressure profile ######################## profileName = os.path.abspath("slip_and_rotation_teapot_handle.dsa") frameManager = framemanager_python.FrameManagerWrapper() frameManager.load_profile(profileName) frameID = 34 matrixID = 1 frame = np.copy(frameManager.get_tsframe(frameID, matrixID))
def update_frame(val): global n global reference_angle global previous_angle reference_frameID = int(np.around(slider_reference_frame.val)) current_frameID = int(np.around(slider_current_frame.val)) frame0 = loadFrame(frameManager, reference_frameID, matrixID) frame1 = loadFrame(frameManager, current_frameID, matrixID) # Compute translation between reference frames slipvector = NCC.normalized_cross_correlation(frame0, frame1) # Compute orientation of reference frame (centroid_x0, centroid_y0, angle0, Cov0, lambda10, lambda20, std_dev_x0, std_dev_y0, skew_x0, skew_y0, compactness10, compactness20, eccentricity10, eccentricity20) = IM.compute_orientation_and_shape_features(frame0) # Compute orientation of current frame features1 = IM.compute_orientation_and_shape_features(frame1) (centroid_x1, centroid_y1, angle1, Cov1, lambda11, lambda21, std_dev_x1, std_dev_y1, skew_x1, skew_y1, compactness11, compactness21, eccentricity11, eccentricity21) = features1 IM.report_shape_features("Frame %d" % current_frameID, features1) # Reset tracking if reference angle changed if abs(reference_angle - angle0) > 0.001: reference_angle = angle0 # [0, 180) previous_angle = angle0 # [0, 360) slip_angle = 0 # (-∞, ∞) n = 0 # rotation carry # Track rotation current_angle, slip_angle, slip_angle_reference, n = IM.track_angle( reference_angle, previous_angle, angle1, n) previous_angle = current_angle ########### # Plotting ########### # Reference frame plot_frame(axes[1], frame0, centroid_x0, centroid_y0, Cov0) # Current frame plot_frame(axes[2], frame1, centroid_x1, centroid_y1, Cov1) # Textbox bbox_props = dict(boxstyle="round", fc="w", ec="0.5", alpha=1.0) ax = axes[0] ax.cla() ax.axis('off') ax.text(0.5, 0.5, text_template % (current_angle, slip_angle, slipvector[0], slipvector[1]), transform=ax.transAxes, ha="center", va="center", size=14, bbox=bbox_props) plt.draw()