how to calculate the area binary if some images have different pattern
2 views (last 30 days)
Show older comments
mohd akmal masud
on 2 Nov 2021
Commented: mohd akmal masud
on 4 Nov 2021
Hi all I have 4 images that all images have 4 area(like circle) as below.

Then, I used this coding below to get the area for all the 4 images that every images have 4 circle
%% TO GET THE VOLUME SEGMENTATION AFTER DEEP LEARNING PERFORM(blob all the sphere binary)
alldice=[]
acc=[]
Ts = [];
Data = [];
for ii=1:4
subplot(1,4,ii)
I = readimage(IMDS,ii);
[C,scores] = semanticseg(I,net1);
outt2=C=="foreground";
st2=strel('disk',5);
outt22=imerode(outt2,st2);
% outt22(:,:,ii) = imerode(outt2,st2);
title('output')
imshow(outt22)
info = regionprops(outt22,'Boundingbox') ;
imshow(outt22)
hold on
allbb=[]
for k = 1 : length(info)
BB = info(k).BoundingBox;
rectangle('Position', [BB(1),BB(2),BB(3),BB(4)],'EdgeColor','r','LineWidth',2) ;
allbb=[allbb; BB]
end
vol = [];
for i=1:4
zz=imcrop(outt22,allbb(i,:));
stats = regionprops('table',zz,'Centroid',...
'MajorAxisLength','MinorAxisLength');
T = regionprops('table', outt22,'Area','Centroid')
m1=stats.MajorAxisLength;
m2=stats.MinorAxisLength;
v1=stats.MinorAxisLength;
vol(i)=m1*m2*(v1/2);
end
ss=sprintf('the volume %d is %6f,%d is %6f,%d is %6f,%d is %6f',1,vol(1),2,vol(2),3,vol(3),4,vol(4));
msgbox(ss);
end
Its work. And the answer like below
T =
4×2 table
Area Centroid
____ ________________
15 105.73 132.53
21 126.52 145.38
64 147.12 108.86
31 147.42 133.9
T =
4×2 table
Area Centroid
____ ________________
15 105.73 132.53
21 126.52 145.38
64 147.12 108.86
31 147.42 133.9
T =
4×2 table
Area Centroid
____ ________________
15 105.73 132.53
21 126.52 145.38
64 147.12 108.86
31 147.42 133.9
T =
4×2 table
Area Centroid
____ ________________
15 105.73 132.53
21 126.52 145.38
64 147.12 108.86
31 147.42 133.9
But when I tried the same code into this images below. It have error.
**NOTE: the first and second image just have 3 circle, the 2 others have 4 circle.

T =
3×2 table
Area Centroid
____ ________________
6 125.67 146.33
92 147.77 109.37
52 147.15 134.06
T =
3×2 table
Area Centroid
____ ________________
6 125.67 146.33
92 147.77 109.37
52 147.15 134.06
T =
3×2 table
Area Centroid
____ ________________
6 125.67 146.33
92 147.77 109.37
52 147.15 134.06
Index in position 1 exceeds array bounds (must not exceed 3).
anyone can help me?
0 Comments
Accepted Answer
yanqi liu
on 3 Nov 2021
%% TO GET THE VOLUME SEGMENTATION AFTER DEEP LEARNING PERFORM(blob all the sphere binary)
alldice=[]
acc=[]
Ts = [];
Data = [];
for ii=1:4
subplot(1,4,ii)
I = readimage(IMDS,ii);
[C,scores] = semanticseg(I,net1);
outt2=C=="foreground";
st2=strel('disk',5);
outt22=imerode(outt2,st2);
% outt22(:,:,ii) = imerode(outt2,st2);
title('output')
imshow(outt22)
info = regionprops(outt22,'Boundingbox') ;
imshow(outt22)
hold on
allbb=[]
for k = 1 : length(info)
BB = info(k).BoundingBox;
rectangle('Position', [BB(1),BB(2),BB(3),BB(4)],'EdgeColor','r','LineWidth',2) ;
allbb=[allbb; BB]
end
vol = [];
for i=1:size(allbb,1)
zz=imcrop(outt22,round(allbb(i,:)));
stats = regionprops('table',zz,'Centroid',...
'MajorAxisLength','MinorAxisLength');
T = regionprops('table', outt22,'Area','Centroid')
m1=stats.MajorAxisLength;
m2=stats.MinorAxisLength;
v1=stats.MinorAxisLength;
vol(i)=m1*m2*(v1/2);
end
ss=sprintf('the volume %d is %6f,%d is %6f,%d is %6f,%d is %6f',1,vol(1),2,vol(2),3,vol(3),4,vol(4));
msgbox(ss);
end
3 Comments
yanqi liu
on 4 Nov 2021
%% TO GET THE VOLUME SEGMENTATION AFTER DEEP LEARNING PERFORM(blob all the sphere binary)
alldice=[]
acc=[]
Ts = [];
Data = [];
for ii=1:4
subplot(1,4,ii)
I = readimage(IMDS,ii);
[C,scores] = semanticseg(I,net1);
outt2=C=="foreground";
st2=strel('disk',5);
outt22=imerode(outt2,st2);
% outt22(:,:,ii) = imerode(outt2,st2);
title('output')
imshow(outt22)
info = regionprops(outt22,'Boundingbox') ;
imshow(outt22)
hold on
allbb=[]
for k = 1 : length(info)
BB = info(k).BoundingBox;
rectangle('Position', [BB(1),BB(2),BB(3),BB(4)],'EdgeColor','r','LineWidth',2) ;
allbb=[allbb; BB]
end
vol = [];
for i=1:size(allbb,1)
zz=imcrop(outt22,round(allbb(i,:)));
stats = regionprops('table',zz,'Centroid',...
'MajorAxisLength','MinorAxisLength');
T = regionprops('table', outt22,'Area','Centroid')
m1=stats.MajorAxisLength;
m2=stats.MinorAxisLength;
v1=stats.MinorAxisLength;
vol(i)=m1*m2*(v1/2);
end
ss = 'the volume';
for i = 1 : length(vol)
ss=sprintf('%s %d is %6f ', ss, i, vol(i));
end
msgbox(ss);
end
More Answers (1)
Voss
on 2 Nov 2021
You will have to adjust your code to handle cases when the number of regions in an image is not 4. In particular, the line
for i=1:4
can be changed to
for i = 1:length(info)
You will also need to modify your definition of ss for the same reason.
0 Comments
See Also
Categories
Find more on 3-D Volumetric Image Processing in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!