Unable to find the number of pixels on the boundary of a ROI
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Warid Islam
le 30 Juin 2021
Commenté : Image Analyst
le 1 Juil 2021
Hi,
I want to find the number of pixels on the boundary of a ROI. I also want to find the number of pixels inside the ROI. I tried the regionprops method but it is throwing me an error message. Any suggestions would be appreciated.
myFolder = 'D:\regionGrowing_MLT\newim\Segmentation Results';
% Check to make sure that folder actually exists. Warn user if it doesn't.
if ~isfolder(myFolder)
errorMessage = sprintf('Error: The following folder does not exist:\n%s\nPlease specify a new folder.', myFolder);
uiwait(warndlg(errorMessage));
myFolder = uigetdir(); % Ask for a new one.
if myFolder == 0
% User clicked Cancel
return;
end
end
% Get a list of all files in the folder with the desired file name pattern.
filePattern = fullfile(myFolder, '*.jpg'); % Change to whatever pattern you need.
theFiles = dir(filePattern);
for k = 1 : length(theFiles)
baseFileName = theFiles(k).name;
fullFileName = fullfile(theFiles(k).folder, baseFileName);
fprintf(1, 'Now reading %s\n', fullFileName);
% Now do whatever you want with this file name,
% such as reading it in as an image array with imread()
imageArray = imread(fullFileName);
imageArray=imbinarize(imageArray);
s = regionprops(imageArray,'Area','Perimeter');
s(k,:)=s;
end
The following error message is displayed:
Unable to perform assignment because the size
of the left side is 1-by-1 and the size of
the right side is 5-by-1.
Error in im3d (line 24)
s(k,:)=s;
0 commentaires
Réponse acceptée
Image Analyst
le 30 Juin 2021
Try this:
perimImage = bwperim(imageArray);
numPerimPixels = nnz(perimImage);
or
boundaries = bwboundaries(imageArray);
numPerimPixels = 0;
for k = 1 : length(boundaries)
thisBoundary = boundaries{k};
numPerimPixels = numPerimPixels + size(thisBoundary, 1);
end
2 commentaires
Image Analyst
le 1 Juil 2021
bwarea gives an area weighted by the shape of the boundary, while regionprops() or nnz() is strictly a pixel count. Just depends on how you want it.
for this image
0 1
1 1
What is the area? Is it 3 pixels? Or is it half a pixel? Neither is wrong - it's just how you interpret "area". Do you consider a pixel like a little block or tile? Or are you going from pixel center to pixel center.
What is the length of the 1 region here:
0 1 1 1 0
Is it 3? Or is it 2 (going center to center)?
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Wavelet Toolbox dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!