imshow(meanfig .* uint8(mask));\r
figure\r
plot(mean(double(meanfig), Weights = mask));\r
+ \r
+ meter = get_meter(maxfig, mask);\r
\r
end % iii, Cycles for directories with files\r
--- /dev/null
+function mark_freq = get_mark_frequency(intensity, inverse_sensitivity)
+ if nargin < 3
+ inverse_sensitivity = 40;
+ end
+
+ freq = fft(intensity - mean(intensity));
+ freq = filtfilt(ones(1, inverse_sensitivity)/inverse_sensitivity, 1, abs(freq(1:ceil(end/2))));
+ diff_freq = (freq(3:end) - freq(1:end-2)) / 2;
+ second = 0;
+ for i = 2:numel(diff_freq)
+ if diff_freq(i - 1) >= 0 && diff_freq(i) <= 0
+ if second == 0
+ second = 1;
+ else
+ break
+ end
+ end
+ end
+ if i == numel(diff_freq)
+ error('Could not find mark frequency!');
+ end
+ mark_freq = i;
+end
--- /dev/null
+function marks = get_mark_indeces(intensity)
+ mark_freq = get_mark_frequency(intensity);
+ half_window = floor(3 * mark_freq / 8);
+ [~, marks] = min(intensity(1:mark_freq));
+ while (marks(end) + mark_freq) < numel(intensity)
+ guess = marks(end) + mark_freq;
+ if (guess + half_window) < numel(intensity)
+ [~, mark] = min(intensity(guess - half_window : guess + half_window));
+ else
+ [~, mark] = min(intensity(guess - half_window : end));
+ end
+ mark = mark + guess - half_window - 1;
+ marks = [marks mark];
+ end
+end
--- /dev/null
+function meter = get_meter(fig, mask, order)
+ if nargin < 3
+ order = 1;
+ end
+
+ meter_pic = get_meter_picture(fig, mask);
+ intensity = mean(meter_pic);
+ mark_indeces = get_mark_indeces(intensity);
+ coefs = polyfit(mark_indeces, 1:-0.1:1-(numel(mark_indeces)-1)*0.1, order);
+ meter = @(pix) polyval(coefs, pix);
+ %{
+ meter(mark_indeces)
+ figure
+ imshow(meter_pic);
+ hold on;
+ plot(mark_indeces, min(size(meter_pic))/2 * ones(size(mark_indeces)), 'mo');
+ hold off;
+ %}
+end
+
--- /dev/null
+function meter_pic = get_meter_picture(fig, mask)
+ dark_vertical = mean(mask') < 0.3;
+ next0 = find(dark_vertical == 0, 1);
+ next1 = find(dark_vertical(next0:end) == 1, 1) + next0 - 1;
+ next0 = find(dark_vertical(next1:end) == 0, 1) + next1 - 1;
+ meter_pic = fig(next1:next0,:);
+end