Thresholding for different values and save all figures automatically

2 visualizzazioni (ultimi 30 giorni)
Hello guys i have a code that works and gives me the desired result (takes a grayscale or not image and thresholds and calxulates the fractal dim) but i would like help if anyone knows how can i firstly make the code run for multiple values of threshold , for example 0.3 , 0.4 , up to 0.7 and after that how to do the boxcount method that follows for each threshold and save all the figures that come up in the same folder?
What i mean is that i want the second part of the code from (Black=im2bw(Pic, 0.3); up to the end repeated for the numbers 0.3 0.4 0.5 0.6 0.7 and save all the figures and graphs in the same folder)
Thanks in advance!!
This is my code:
clc;
clear all
Image=imread('cu_giannisx1000.tif');
%Image = rgb2gray(Image);
Gray=medfilt2(Image,[3 3]);
figure, imshow(Gray)
File = 'gray1.png';
% Write to disk.
imwrite(medfilt2(Image,[3 3]) , fullfile(Folder,File));
%[Pic,rect] = imcrop(Gray);
[Pic, rect] = imcrop(Gray, [1 1 400 400 ]);
Pic=imadjust(Pic);
figure, imshow(Pic)
File = 'imadjust403.png';
% Write to disk.
imwrite(imadjust(Pic), fullfile(Folder,File));
figure, imhist(Pic)
Black=im2bw(Pic, 0.3);
figure, imshow(Black)
Label=bwlabel(Black);
File = 'im2bw403.png';
% Write to disk.
imwrite(im2bw(Pic, 0.3), fullfile(Folder,File));
figure,boxcount(Black)
[n, r] = boxcount(Black)
loglog(r, n,'bo-', r, (r/r(end)).^(-2), 'r--')
xlabel('r')
ylabel('n(r)')
legend('real box-count','space-filling box-count');
figure,boxcount(Black, 'slope')
df = -diff(log(n))./diff(log(r));
disp(['Fractal dimension, Df = ' num2str(mean(df(4:8))) ' +/- ' num2str(std(df(4:8)))]);

Risposta accettata

Benjamin Kraus
Benjamin Kraus il 3 Dic 2020
Modificato: Benjamin Kraus il 3 Dic 2020
You need to add a for loop, and update the filename based on the level, so you don't overwrite the same file. In the example below I used sprintf to create the filename, but there are tons of other options.
for level = [0.3 0.4 0.5 0.6 0.7]
figure, imhist(Pic)
Black=im2bw(Pic, level);
figure, imshow(Black)
Label=bwlabel(Black);
File = sprintf('im2bw403_%0.1f.png', level);
imwrite(im2bw(Pic, 0.3), fullfile(Folder,File));
end
You may optionally want to close the figures when you are done with each loop, to prevent tons of figures being left behind when the script is done.
% Start of loop
f = figure;
% ... Other code
% End of loop
close(f)
  13 Commenti
Benjamin Kraus
Benjamin Kraus il 3 Dic 2020
When you call fopen you are specifying 'w' which means "Open or create new file for writing. Discard existing contents, if any." Changing that to 'a' will "Open or create new file for writing. Append data to the end of the file." See the doc for fopen for more information.
Benjamin Kraus
Benjamin Kraus il 3 Dic 2020
This thread has drifted away from your original question, and has basically turned into a different question entirely. If my answer to your first question has solved your original problem, I think your best bet is to accept this answer, and then post a new question if you run into any further issues.

Accedi per commentare.

Più risposte (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by