How to count the amount of small squares in this picture?
조회 수: 1 (최근 30일)
이전 댓글 표시

채택된 답변
DGM
2024년 12월 17일
The given answers have problems with accuracy. One way to help with discrimination is to do some sort of template matching.
% the image
inpict = imread('https://www.mathworks.com/matlabcentral/answers/uploaded_files/1821039/image.png');
inpict = im2gray(inpict);
% the sub-image template
template = imcrop(inpict,[22.51 22.51 14.98 13.98]);
% get a correlation map describing
% where copies of the template are
C = normxcorr2(template,inpict);
mask = C > 0.5;
mask = bwareaopen(mask,9); % get rid of any specks
imshow(mask)
% count the peaks
N0 = bwconncomp(mask).NumObjects
Is that number plausible? The image isn't that large. We can just manually verify that there are 45x65 = 2925 copies of the template object. We can also do that programmatically:
% number of rows of objects
nv = smooth(max(C,[],2)) > 0.5;
nv = bwconncomp(nv).NumObjects
% number of columns of objects
nh = smooth(max(C,[],1)) > 0.5;
nh = bwconncomp(nh).NumObjects
% total
N = nv*nh
As is, the other examples produce an overestimate due to the occasional blob between objects, or content along the image boundary. When I tested them, the estimates were higher by about 100 or so.
추가 답변 (3개)
KALYAN ACHARJYA
2024년 12월 15일
Approximate Way:
image_input=imread('image file name');
image_bw=imbinarize(rgb2gray(image_input));
cc=bwconncomp(image_bw);
number=cc.NumObjects;
However, you can obtain the exact value by incorporating additional morphological and logical statements.
Image Analyst
2024년 12월 15일
It's a generic, general purpose demo of how to threshold an image to find blobs, and then measure things about the blobs, and extract certain blobs based on their areas or diameters.
댓글 수: 0
Catalytic
2024년 12월 17일
편집: Catalytic
2024년 12월 17일
BW=imbinarize(im2gray(imread('image.png')));
BW([1,end],:)=0;
BW(:,[1,end])=0;
BW=imopen(BW,ones(2));
nv=numAlong(BW,1)
nv =
45
nh=numAlong(BW,2)
nh =
65
total=nv*nh
total =
2925
function out=numAlong(BW,dim)
s=reshape( sum(BW,3-dim),[],1);
m=bwareaopen(s>max(s)/3,8);
out=bwconncomp(m).NumObjects;
end
댓글 수: 0
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!