how to Identify the centre of atom

조회 수: 1 (최근 30일)
玥
2024년 4월 12일
댓글: DGM 2024년 4월 13일
how to Identify the centre of gravity like the fllowing figure

채택된 답변

DGM
DGM 2024년 4월 12일
Here's a start.
% the original image
inpict = imread('image.png');
inpict = im2gray(inpict);
% crop out the subimages
A0 = imcrop(inpict,[31.51 30.51 277.98 277.98]);
B0 = imcrop(inpict,[326.51 30.51 277.98 277.98]);
C0 = imcrop(inpict,[621.51 30.51 277.98 277.98]);
% process A
A = imflatfield(A0,10);
A = adapthisteq(A);
A = imopen(A,strel('disk',3,0));
maskA = imextendedmax(A,50); % roughly get a mask of minimal regions
maskA = imclearborder(maskA); % get rid of partial blobs
imshow(maskA,'border','tight')
% process B
maskB = imextendedmin(B0,80); % roughly get a mask of minimal regions
maskB = imclearborder(maskB); % get rid of partial blobs
imshow(maskB,'border','tight')
% process C
C = imflatfield(C0,10);
C = adapthisteq(C);
maskC = imextendedmin(C,80); % roughly get a mask of minimal regions
maskC = imclearborder(maskC); % get rid of partial blobs
imshow(maskC,'border','tight')
% for example, find the centroids of the blobs in one of the masks
Sc = regionprops(maskC,'centroid');
centers = vertcat(Sc.Centroid);
% mark the centers on the mask
hold on;
plot(centers(:,1),centers(:,2),'x','linewidth',2)
  댓글 수: 7
Image Analyst
Image Analyst 2024년 4월 13일
@DGM in your first response, since he specifically wanted the center of gravity, you should have used "WeightedCentroid" instead of 'Centroid', though for this image it looks like they should be really close to the same location.
Maybe, after field flattening, you can use kmeans to classify a pixel as light, dark, or gray.
DGM
DGM 2024년 4월 13일
That's a pretty good point. I'll throw in an example just for sake of completeness.
% the original image
inpict = imread('image.png');
inpict = im2gray(inpict);
% crop out the subimages (i'm just going to use C)
C0 = imcrop(inpict,[621.51 30.51 277.98 277.98]);
% process C (same as before)
C = imflatfield(C0,10);
C = adapthisteq(C);
maskC = imextendedmin(C,80); % roughly get a mask of minimal regions
maskC = imclearborder(maskC); % get rid of partial blobs
% for example, find the weighted centroids of the blobs in one of the masks
% in this call to regionprops, it's important to make sure that the second argument
% has a light-on-dark polarity, hence the use of imcomplement() in the case of B or C.
% A is already light-on-dark, so we wouldn't need to complement it.
Sc = regionprops(maskC,imcomplement(C),'weightedcentroid');
centers = vertcat(Sc.WeightedCentroid);
imshow(maskC,'border','tight'); hold on;
plot(centers(:,1),centers(:,2),'x','linewidth',2)

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Get Started with Image Processing Toolbox에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by