How to find out area under the curved shape of the attached figure?
1 visualizzazione (ultimi 30 giorni)
Mostra commenti meno recenti
Risposta accettata
Image Analyst
il 16 Dic 2023
Try the attached code to automatically find the lower dark shape. It produces.
5 Commenti
Image Analyst
il 16 Dic 2023
If you have a variety of intensity levels, then that's not good. You should try to adjust your image capture parameters to get consistent exposure. If you can't do that then you'll have to come up with some algorithm to automatically threshold. Like maybe you can find the mean of the image, and then multiply by a factor so that the mean of a new image will be some known value, like 100. Then you could use the fixed threshold. Otherwise you'll have to do some tricky examination of the shape of the histogram and coms up with some way to find the threshold from that.
The imclearborder I used is available only in r2023b. If you can upgrade, do it. Otherwise you'll have to do some tricky operations with bwselect and imclearborder to remove the blob on the right, left, and top sides.
Doing medfilt2 before or after the thresholding is something I wondered about. Not sure which might be better. I just tried it on the grayscale image and it seemed to work fine, so I left it there. You can put it right after the initial mask creation and see if it's any better there.
Più risposte (1)
DGM
il 15 Dic 2023
It's going to be up to you to define where the curve boundary is. It's not clear in concept or in terms of available contrast.
This can be done interactively, but for sake of demonstrating things on the forum, I'm going to have to do it programmatically.
% read the image
inpict = imread('https://www.mathworks.com/matlabcentral/answers/uploaded_files/1570032/image.jpeg');
inpict = im2gray(inpict);
% display the image
imshow(inpict);
% create the ROI interactively with the mouse
% i can't do this on the forum, obviously
%ROI = drawpolygon(gca);
% create the ROI programmatically for example
ROI = images.roi.Polygon(gca);
ROI.Position = [711.5 1600; 724.6 1428; 778.5 1206; 838.9 1035; ...
909.1 914; 1007 876.4; 1077 871.5; 1188 897.6; 1237 943.4; ...
1275 1014; 1329 1165; 1376 1394; 1387 1549; 1387 1600];
% create a mask from the image
mask = createMask(ROI);
% find the area in pixels
Apx = nnz(mask)
% find the area in mm
% you'll need some appropriate conversion factor
k = 0.1; % mm per px
Amm = Apx*k^2
0 Commenti
Vedere anche
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!