Unable to find the number of pixels on the boundary of a ROI

2 vues (au cours des 30 derniers jours)
Warid Islam
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;

Réponse acceptée

Image Analyst
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
Warid Islam
Warid Islam le 30 Juin 2021
That worked. If I want to find the area of my ROI, is bwarea the appropriate way to proceed?
Image Analyst
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)?

Connectez-vous pour commenter.

Plus de réponses (0)

Produits


Version

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by