MATLAB Answers

Hello everyone.I would like to ask you how to extract the data of a local area of a picture. The code I wrote is shown below. Please help me correct the mistakes. Thank you all.

조회 수: 2(최근 30일)
Wesley
Wesley 2021년 5월 20일
댓글: Wesley 2021년 5월 20일
BW21=imread('m1.jpg');
% stats = regionprops(BW21,'Area','Centroid');%binaryImage
%
% %props = regionprops(BW21, 'Perimeter');%binaryImage
[labeledImage, numRegions] = bwlabel(BW21);%binaryImage
props = regionprops(labeledImage, 'Area','Centroid','Perimeter');
% Compute all the areas.
allAreas = [props.Area];
% Display each blob in its own figure.
for k = 1 : numRegions
thisRegion = ismember(labeledImage, k);
figure;
imshow(thisRegion);
drawnow;
end
%%%Data extraction of the first region on the image
data=imbinarize(BW21);%'image.jpeg'
result=edge(data);
figure,imshow(result);
[r,c]=find(result==1);
figure,plot(c,r,'.');
%%%Data extraction for the first area
for i=1:1:912
for j=1:1:1312
if BW31(i,j)~=1
BW31(i,j)=0;
end
end
end
x = linspace(1,912,912)';
y = linspace(1,1312,1312)';
contourf(y, x, BW31 ,20);
colorbar;
xlabel('x');
ylabel('y');
axis equal
data=imbinarize(BW31);%'image.jpeg'
result=edge(data);
figure,imshow(result);
[r,c]=find(result==1);
figure,plot(c,r,'.');
%
% Data extraction for the second area
%
BW32=bwlabel(BW21);
for i1=1:1:912
for j1=1:1:1312
if BW32(i1,j1)~=1
BW32(i1,j1)=0;
end
end
end
x1= linspace(2,912,912)';
y1 = linspace(2,1312,1312)';
contourf(y1, x1, BW32 ,20);
colorbar;
xlabel('x1');
ylabel('y1');
axis equal
data1=imbinarize(BW32);%'image.jpeg'
result1=edge(data1);
figure,imshow(result1);
[r1,c1]=find(result1==1);
figure,plot(c1,r1,'.');
...
%

답변(3개)

Sulaymon Eshkabilov
Sulaymon Eshkabilov 2021년 5월 20일
Is that what you are trying to get?
D = imread('BW.jpeg');
MYdata=imbinarize(D);
figure(1)
imshow(MYdata);
R=edge(MYdata);
figure,imshow(R);
[Edge,C]=find(R==1);
figure(2)
plot(C,Edge,'k.'), title('Separated local area pictures')
  댓글 수: 1
Wesley
Wesley 2021년 5월 20일
Thank you very much for your kind reply. My idea is to extract the data from the first area. The second, the third, and the area behind it don't matter. I'd like to ask you this question. Thank you very much.

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


Sulaymon Eshkabilov
Sulaymon Eshkabilov 2021년 5월 20일
Maybe here you can find some good help:
https://www.mathworks.com/matlabcentral/answers/76528-measurement-in-images-image-analysis?s_tid=srchtitle

Image Analyst
Image Analyst 2021년 5월 20일
You say "My idea is to extract the data from the first area. The second, the third, and the area behind it don't matter." By "area" I assume you mean "region". I have no idea what "data" means. You can get the area, the cropped region, individual uncropped blobs using ismember(), and lots of other stuff from regionprops().
But you have
% Compute all the areas.
allAreas = [props.Area];
so you're getting all the areas of all the blobs, if "area" is what you meant by "data". Otherwise, explain what "data" means to you. And define what you mean by "first" since blobs have varying size and are at verying locations.
  댓글 수: 1
Wesley
Wesley 2021년 5월 20일
Thank you very much for your reply. In this way, the extracted coordinate data is in one block. I want to extract the coordinates of the edge curve of a single small area. For example, like the picture I sent below, the data of such a small area is saved individually. Thank you very much for your help.

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

Community Treasure Hunt

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

Start Hunting!

Translated by