-close all; % deletes all figures whose handles are not hidden\r
-clear all; % removes all variables from memory\r
+close all;\r
+clear all;\r
\r
%% vstupni data T:\00-Orvalho\Travnickova\Bubble column\r
-%\r
-\r
-%%\r
\r
% User dialog for the data directory used for files\r
\r
DirectoryName = get_data_dir();\r
\r
-%DirectoryPath='T:\00-Orvalho\Travnickova\Bubble column\';\r
+if DirectoryName == 0\r
+ return\r
+end\r
\r
DDirectory = dir(DirectoryName); % Loads directories or subdirectories to struct FFiles(1).name, FFiles(1).folder, FFiles(1).date - i s casem\r
\r
list={DDirectory.name};\r
[Selected,OK] = listdlg('ListString',list,'ListSize',[200 500]);\r
SelectedDirectory = list(Selected)';\r
-if isempty(SelectedDirectory) % handles the error, when no spreadsheet is selected\r
- error('No experiment selected.')\r
+if isempty(SelectedDirectory)\r
+ return\r
end\r
-nSelectedDirectory = numel(SelectedDirectory); % Counts directories\r
+nSelectedDirectory = numel(SelectedDirectory);\r
\r
%{\r
[ResFile, res_path] = uiputfile('*.xlsm', 'Save results to');\r
%}\r
\r
% helper variables\r
-infmt = 'hh:mm:ss.SS'; % Time format in file names\r
-FileType = '*.png'; % extension of image file\r
+FileType = '*.png';\r
\r
-%%\r
% load of all directories in cycles\r
for iii=1:nSelectedDirectory % Cycles for directories with files\r
-\r
-\r
-%%\r
% read names of all files\r
-\r
FileName=([DirectoryName '/' SelectedDirectory{iii} '/' FileType]);\r
FFiles = dir(FileName); % Loads files to struct FFiles(1).name, FFiles(1).folder, FFiles(1).date - i s casem\r
- nFFiles = numel(FFiles); % Counts files\r
- LevelNum=str2double(SelectedDirectory{iii}(7:9))*1000;\r
\r
-%% variable allocation\r
-\r
- Height = zeros(1,nFFiles);\r
- Metr_fit_H = zeros(1,nFFiles);\r
- Bottom = zeros(1,nFFiles);\r
- Metr_fit_B = zeros(1,nFFiles);\r
-\r
-%%\r
% Initiation from the first file\r
ImageName = FFiles(1).name;\r
- start_time = duration([(ImageName(8:9)) ':' (ImageName(10:11)) ':' (ImageName(12:16))],'Format',infmt);\r
+ start_time = name_to_time(FFiles(1).name);\r
Figure = imread([FFiles(1).folder '/' ImageName]);\r
- ContrastFigure = imadjust(Figure); % Adjust the contrast of the image using imadjust.\r
- D_num=str2double(SelectedDirectory{iii}(21)); % position of camera\r
+\r
+ %%D_num=str2double(SelectedDirectory{iii}(21)); % position of camera\r
\r
[image_width, image_height] = size(Figure);\r
sumfig = zeros(image_width, image_height);\r
maxfig = Figure;\r
\r
% load of all files in cycles\r
- step=1;\r
- startFile= 1; %945; %200 (20. )\r
- endFile= numel(FFiles); %nFFiles; %1000; %325 (20.)\r
- nFFiles=endFile; % Attention!!!\r
+ step = 10;\r
+ startFile = 1; %945; %200 (20. )\r
+ endFile = numel(FFiles); %nFFiles; %1000; %325 (20.)\r
wait_bar = waitbar(0, '');\r
set(gca(wait_bar).Title, 'Interpreter', 'none');\r
- for jjj=startFile:step:nFFiles % Cycles for figures files\r
+ for jjj=startFile:step:endFile % Cycles for figures files\r
ImageName = FFiles(jjj).name;\r
Figure = imread([FFiles(jjj).folder '/' ImageName]);\r
\r
- waitbar(jjj/nFFiles, wait_bar, ['Preproccessing images from meassurement ' num2str(iii) '/' num2str(nSelectedDirectory)]);\r
+ waitbar((jjj - startFile)/(endFile - startFile), wait_bar, ['Preproccessing images from meassurement ' num2str(iii) '/' num2str(nSelectedDirectory)]);\r
\r
sumfig = sumfig + double(Figure);\r
minfig = min(minfig, Figure);\r
\r
close(wait_bar);\r
\r
- meanfig = uint8(sumfig ./ nFFiles);\r
+ meanfig = uint8(sumfig / ((endFile - startFile) / step + 1));\r
changefig = maxfig - minfig;\r
\r
+ %{\r
figure\r
subplot(2,2,1);\r
title('Pixel maxima');\r
subplot(2,2,4);\r
title('Difference between max and min');\r
imshow(changefig);\r
+ %}\r
\r
mask = get_mask(changefig, meanfig);\r
figure\r
- imshow(meanfig .* uint8(mask));\r
- figure\r
plot(mean(double(meanfig), Weights = mask));\r
\r
meter = get_meter(maxfig, mask);\r
\r
+ [~, calm_level] = min(mean(double(meanfig), Weights = mask));\r
+\r
+ wait_bar = waitbar(0, '');\r
+ set(gca(wait_bar).Title, 'Interpreter', 'none');\r
+ intensity = [];\r
+ step = 10;\r
+ N = floor((endFile - startFile)/step) + 1;\r
+ for j = 1:N\r
+ file_ind = startFile + (j - 1) * step;\r
+ ImageName = FFiles(file_ind).name;\r
+ Figure = imread([FFiles(file_ind).folder '/' ImageName]);\r
+ waitbar(j/N, wait_bar, ['Proccessing images from meassurement ' num2str(iii) '/' num2str(nSelectedDirectory)]);\r
+ intensity = mean(double(Figure), Weights = mask);\r
+ [water(j), bubble_top(j), bubble_bot(j)] = get_levels(intensity);\r
+ end\r
+ close(wait_bar);\r
+\r
+ figure\r
+ plot(meter([water; bubble_top; bubble_bot]'));\r
+\r
end % iii, Cycles for directories with files\r
--- /dev/null
+function [water, bubble_top, bubble_bot] = get_levels(intensity, threshold, level_width)
+ if nargin < 2
+ threshold = 125;
+ end
+ if nargin < 3
+ level_width = 50;
+ end
+
+ water = NaN;
+ bubble_top = NaN;
+ bubble_bot = NaN;
+ signal = intensity > threshold;
+ diff_sig = abs(signal(3:end) - signal(1:end-2));
+ diff_sig = smooth_peaks(diff_sig, level_width);
+ indeces = (1:numel(diff_sig)) + 1;
+ features = indeces(diff_sig == 1);
+ features = [1 features numel(signal)];
+ for i = 2:numel(features)
+ signal(features(i - 1):features(i)) = mean(signal(features(i - 1):features(i))) > 0.5;
+ end
+ features = features(2:end-1);
+ for i = 1:numel(features)
+ top_state = signal(features(i) - 1);
+ bot_state = signal(features(i) + 1);
+ if (top_state == 0 && bot_state == 1)
+ bubble_bot = features(i);
+ elseif (top_state == 1 && bot_state == 0)
+ bubble_top = features(i);
+ elseif (top_state == 1 && bot_state == 1)
+ water = features(i);
+ end
+ end
+end