How to count white pixels in Watershed segmented image?

2 ビュー (過去 30 日間)
Tawsif Mostafiz
Tawsif Mostafiz 2021 年 8 月 4 日
コメント済み: Image Analyst 2021 年 8 月 5 日
I am using watershed method to this image:
And got the output:
Now I want to convert the segmented part within the yellow boundary to black and white, and calculate its white and black pixels within the boundary. How can I do it?
The part of the code is as follows:
[B,L]=bwboundaries(tumor,'noholes'); %draw boundaries around the tumor
imshow(image);
hold on
for i=1:length(B)
plot(B{i}(:,2),B{i}(:,1), 'y' ,'linewidth',1.45);
end
title('Segmented Tumor');
hold off;

採用された回答

Image Analyst
Image Analyst 2021 年 8 月 5 日
What is the intensity that distinguishes between your "black" and "white"? 128? Don't use image as the name of your variable -- it's already the name of a built-in function.
Anyway to get the pixel values for blob in L:
pixelValues = grayScaleImage(L == 1); % A 1-D vector of all the pixel values in the region.
% Then sum up black and white
threshold = 128; % Whatever you want.
numBlackPixels = sum(pixelValues < threshold)
numWhitePixels = sum(pixelValues >= threshold)
  2 件のコメント
Tawsif Mostafiz
Tawsif Mostafiz 2021 年 8 月 5 日
編集済み: Tawsif Mostafiz 2021 年 8 月 5 日
@Image Analyst I have changed the code a little bit for better understanding. I have converted it to black and white using following:
bw=im2bw(grayScaleImage,0.15); %0.15 is the threshold value
[B,L]=bwboundaries(tumor,'noholes'); %draw boundaries around the tumor
imshow(bw);
hold on
for i=1:length(B)
plot(B{i}(:,2),B{i}(:,1), 'r' ,'linewidth',1.45);
end
title('Segmented Tumor');
hold off;
Now, the output is following:
Now, I want to count the white pixels and black pixels within the red border. Extremely sorry for being vague previously. How do I do that?
Image Analyst
Image Analyst 2021 年 8 月 5 日
Try this:
thisBoundary = B{1}; % Whatever boundary you want.
x = thisBoundary(:, 2);
y = thisBoundary(:, 1);
redMask = poly2mask(x, y, rows, columns);
pixelsInRedMask = binaryImage(redMask);
numBlack = sum(pixelsInRedMask == 0);
numWhite = sum(pixelsInRedMask == 1);

サインインしてコメントする。

その他の回答 (1 件)

darova
darova 2021 年 8 月 4 日
Here is an example with using bwlabel
A = zeros(100);
t = linspace(0,2*pi,1000); % a lot of points
[x,y] = pol2cart(t,1); % circle coordinates
ind = sub2ind(size(A),round(y*15)+30,round(x*25)+50); % convert coordinates into [rows,cols]
A(ind) = 1; % fill [rows,cols] with ones
A1 = imdilate(A,ones(2)); % make line thicker (bwlabel doesn't work for thin lines)
[B,n] = bwlabel(~A1); % separate each region
imshow(B,hot(2)) % show separated region
line(x*25+50,y*15+30) % show original curve

製品


リリース

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by