Refactor get_aggregate_images out
authorLukáš Jiřiště <jiriste@icpf.cas.cz>
Tue, 20 Aug 2024 13:20:00 +0000 (15:20 +0200)
committerLukáš Jiřiště <jiriste@icpf.cas.cz>
Tue, 20 Aug 2024 13:23:21 +0000 (15:23 +0200)
Bubliny.m
get_aggregate_images.m [new file with mode: 0644]

index 865dece1d6dfe54b10bac01014c25f4efe6eb5e1..5db35aa5f5c241c1385b6d7d692290694a1d784e 100755 (executable)
--- a/Bubliny.m
+++ b/Bubliny.m
@@ -37,63 +37,21 @@ ResFile = [res_path, ResFile];
 \r
 FileType = '*.png';\r
 \r
+main_wb = waitbar(0, 'Whole processing progress');\r
 % process all directories in cycles\r
 for i=1:nSelectedDirectory\r
        FileName=([DirectoryName '/' SelectedDirectory{i} '/' FileType]);\r
        FFiles = dir(FileName);                                                 % Loads files to struct FFiles(1).name, FFiles(1).folder, FFiles(1).date - i s casem\r
 \r
-       ImageName = FFiles(1).name;\r
-       start_time = name_to_time(FFiles(1).name);\r
-       Figure = imread([FFiles(1).folder '/' ImageName]);\r
-\r
        %%D_num=str2double(SelectedDirectory{i}(21));                   % position of camera\r
-\r
-       [image_width, image_height] = size(Figure);\r
-       sumfig = zeros(image_width, image_height);\r
-       minfig = Figure;\r
-       maxfig = Figure;\r
-\r
-       step = 10;\r
-       startFile = 1;\r
-       endFile = numel(FFiles);\r
-       wait_bar = waitbar(0, '');\r
-       set(gca(wait_bar).Title, 'Interpreter', 'none');\r
-       for j=startFile:step:endFile\r
-               ImageName = FFiles(j).name;\r
-               Figure = imread([FFiles(j).folder '/' ImageName]);\r
-\r
-               waitbar((j - startFile)/(endFile - startFile), wait_bar, ['Preproccessing images from meassurement ' num2str(i) '/' num2str(nSelectedDirectory)]);\r
-\r
-               sumfig = sumfig + double(Figure);\r
-               minfig = min(minfig, Figure);\r
-               maxfig = max(maxfig, Figure);\r
-       end\r
-\r
-       close(wait_bar);\r
-\r
-       meanfig = uint8(sumfig / ((endFile - startFile) / step + 1));\r
+       [minfig, maxfig, meanfig] = get_aggregate_images(FFiles);\r
        changefig = maxfig - minfig;\r
-\r
-       %{\r
-       figure\r
-       subplot(2,2,1);\r
-       title('Pixel maxima');\r
-       imshow(maxfig);\r
-       subplot(2,2,2);\r
-       title('Pixel minima');\r
-       imshow(minfig);\r
-       subplot(2,2,3);\r
-       title('Pixel means');\r
-       imshow(meanfig);\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
 \r
+       waitbar((i - 0.5)/nSelectedDirectory, main_wb);\r
+\r
        meter = get_meter(maxfig, mask);\r
 \r
        [~, calm_level] = min(mean(double(meanfig), Weights = mask));\r
@@ -101,19 +59,23 @@ for i=1:nSelectedDirectory
        wait_bar = waitbar(0, '');\r
        set(gca(wait_bar).Title, 'Interpreter', 'none');\r
        intensity = [];\r
-       step = 10;\r
+       startFile = 1;\r
+       endFile = numel(FFiles);\r
+       step = 1;\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(i) '/' num2str(nSelectedDirectory)]);\r
+               waitbar(j/N, wait_bar, 'Proccessing the images');\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
+       waitbar(i/nSelectedDirectory, main_wb);\r
 \r
        figure\r
        plot(meter([water; bubble_top; bubble_bot]'));\r
 \r
 end\r
+close(main_wb);\r
diff --git a/get_aggregate_images.m b/get_aggregate_images.m
new file mode 100644 (file)
index 0000000..1859ae3
--- /dev/null
@@ -0,0 +1,54 @@
+function [min_img, max_img, mean_img] = get_aggregate_images(files, start_file, end_file, step)
+       if nargin < 2
+               start_file = 1;
+       end
+       if nargin < 3
+               end_file = numel(files);
+       end
+       if nargin < 4
+               step = 10;
+       end
+
+       image_name = files(1).name;
+       image = imread([files(1).folder '/' image_name]);
+
+       [image_width, image_height] = size(image);
+       sum_img = zeros(image_width, image_height);
+       min_img = image;
+       max_img = image;
+
+       step = 10;
+       start_file = 1;
+       end_file = numel(files);
+       wait_bar = waitbar(0, ['Aggregating the images']);
+       for j=start_file:step:end_file
+               image_name = files(j).name;
+               image = imread([files(j).folder '/' image_name]);
+
+               waitbar((j - start_file)/(end_file - start_file), wait_bar);
+
+               sum_img = sum_img + double(image);
+               min_img = min(min_img, image);
+               max_img = max(max_img, image);
+       end
+
+       close(wait_bar);
+
+       mean_img = uint8(sum_img / ((end_file - start_file) / step + 1));
+
+       %{
+       figure
+       subplot(2,2,1);
+       title('Pixel maxima');
+       imshow(max_img);
+       subplot(2,2,2);
+       title('Pixel minima');
+       imshow(min_img);
+       subplot(2,2,3);
+       title('Pixel means');
+       imshow(mean_img);
+       subplot(2,2,4);
+       title('Difference between max and min');
+       imshow(changefig);
+       %}
+end