function [thumbnail_frame] = scapePlotFitness_to_thumbnail(fitness_matrix,parameter) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Name: scapePlotFitness_to_thumbnail.m % Date of Revision: 2013-06 % Programmer: Nanzhu Jiang, Peter Grosche, Meinard Müller % http://www.audiolabs-erlangen.de/resources/MIR/SMtoolbox/ % % % Description: % This functions finds the maximum fitness point in the fitness matrix % and derive the corresponding segment. The search region of fitness % matrix can be limited by parameter. % % % Input: % fitness_matrix: first feature sequence % parameter (optional): parameter struct with fields % .len_min_seg_frame : minimum length of segment in frames % .len_max_seg_frame : maximum length of segment in frames % % Output: % thumbnail_frame : computed thumbnail specified by its begin and end % in frames. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Reference: % If you use the 'SM toobox' please refer to: % [MJG13] Meinard Müller, Nanzhu Jiang, Harald Grohganz % SM Toolbox: MATLAB Implementations for Computing and Enhancing Similarity Matrices % Proceedings of the 53rd Audio Engineering Society Conference on Semantic Audio, London, 2014. % % License: % This file is part of 'SM Toolbox'. % % 'SM Toolbox' 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 2 of the License, or % (at your option) any later version. % % 'SM Toolbox' 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 'SM Toolbox'. If not, see % . %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Check parameters %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if nargin<2 parameter=[]; end if isfield(parameter,'len_min_seg_frame')==0 parameter.len_min_seg_frame = 1; end if isfield(parameter,'len_max_seg_frame')==0 parameter.len_max_seg_frame = size(fitness_matrix,1); end %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % find the maximum fitness point, whose corresponding segment having its % segment length fulfilled the length constrint specified %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % restricting the searching area of fitness by length hints of thumbnail max_search_area = fitness_matrix(:,:); length_min_seg = max(parameter.len_min_seg_frame,1); length_max_seg = min(parameter.len_max_seg_frame,size(fitness_matrix,1)); if(length_min_seg > length_max_seg) error('specified minimum length can not be larger than specified maximum length\n'); else max_search_area = fitness_matrix(length_min_seg:length_max_seg,:); length_not_searched = length_min_seg - 1; end if(size(max_search_area,1)~=1) % searching in area [column_max_values,column_max_indices] = max(max_search_area); [max_value,row_max_index] = max(column_max_values); x_pos = row_max_index; y_pos = column_max_indices(row_max_index); else % searching on single line [max_value,x_pos] = max(max_search_area); y_pos = 1; end seg_start = x_pos; seg_length = y_pos+ length_not_searched; seg_end = seg_start + seg_length -1; thumbnail_frame = [seg_start,seg_end]; end