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

1 次查看(过去 30 天)
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;

采纳的回答

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

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Naming Conventions 的更多信息

产品


版本

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by