Binary Image: Count number of pixels that are 1.
24 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Justine Schneider
am 3 Jul. 2017
Kommentiert: Image Analyst
am 1 Feb. 2022
The code below is a simplified version of the one part of a longer code that I am running into an error. In the code below, I successfully convert the gray scale image into a binary image. Then I try to count the number of pixels in the image that are 1 (by using the for loop and bin()). However, MATLAB says, "Undefined function or variable 'rows'." Then if I type a number instead of saying rows columns, I get the error, "if bin(i,j) == 1."
I've looked at the syntax of the bin command, and I have tried problem solving this. However, I don't know if the for loop knows to apply itself to the image. Please let me know how I can fix this for loop to work properly.
Code:
I = imread('rice.png');
figure; imshow(I);
bw = imbinarize(I);
figure; imshow(bw);
ctr= 0;
for i = 1 : rows
for j = 1 : columns
if bin(i,j) == 1
ctr = ctr + 1;
end
end
end
1 Kommentar
Akzeptierte Antwort
Andrei Bobrov
am 3 Jul. 2017
May be so:
I = imread('rice.png');
figure; imshow(I);
bw = imbinarize(I);
figure; imshow(bw);
ctr= 0;
for i = 1 : rows
for j = 1 : columns
if bw(i,j) == 1
ctr = ctr + 1;
end
end
end
8 Kommentare
oussama zayene
am 1 Feb. 2022
Image Analyst
am 1 Feb. 2022
I'm sure that after almost 2 years he did. It probably went something like this:
props = regionprops(bw, 'BoundingBox');
for k = 1 : numel(props)
thisBB = props(k).BoundingBox;
croppedImage = imcrop(bw, thisBB);
% Now do something with cropped image.....
end
Weitere Antworten (4)
Jan
am 3 Jul. 2017
Alternatively without a loop:
bw = imbinarize(I);
ctr = sum(bw(:) == 1);
or even shorter for a binary image:
ctr = sum(bw(:));
Image Analyst
am 4 Feb. 2018
Bearbeitet: Image Analyst
am 1 Feb. 2022
If you want to know why your code didn't work, the problem with your code is that you forgot to define rows and columns for your image. After imread(), you need this:
[rows, columns, numberOfColorChannels] = size(I);
But better, like Jan said, you can simply could the number of white/true/1 pixels with this:
numWhite = sum(BW(:)) % numWhite is what you called ambiguously called ctr ("counter", "centroid"?)
No nested for loop is even needed.
numWhite = nnz(bw);
0 Kommentare
bipul
am 23 Sep. 2018
Bearbeitet: bipul
am 23 Sep. 2018
function ctr = PixelCounter(bw)
%I = imread('rice.png');
%I = I(4:15, 18:29);
%figure; imshow(I);
%bw = im2bw(I)
%figure; imshow(bw);
ctr= 0;
[rows columns] = size(bw);
for i = 1 : rows
for j = 1 : columns
if bw(i,j) == 1
ctr = ctr + 1;
end
end
end
%fprintf('1 are: %d \n', ctr);
%disp(ctr);
end
1 Kommentar
Siehe auch
Kategorien
Mehr zu Image Processing and Computer Vision finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!