Identification of rooms in a floorplan
조회 수: 3 (최근 30일)
이전 댓글 표시
I have a floorplan image with only walls. I want to identify the room coordinates of the floorplan.
This code actually closes the doors and identifies the rooms in the floorplan. This works well when shape of the rooms is rectangles. But It does not work well when the shape is either trapezium or L shape. Can somebody help me please?
Also it is not closing all the doors properly.
load('Walls')
e=ones(1,105);
A=imclose(imclose(~Image,e),e.');
B=imfill(A,'holes')&~A;
imshow(B)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/293657/image.jpeg)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/293658/image.jpeg)
댓글 수: 4
채택된 답변
darova
2020년 5월 19일
I skeletonized the image and found endpoints with bwmorph. Found shortest distances and connected points
I0 = imread('image.jpeg');
I1 = im2bw(I0); % binarize image
I2 = bwmorph(~I1,'skel',inf); % make thin lines
I3 = bwmorph(I2,'spur',10); % remove spurs
B = bwmorph(I3,'endpoints'); % find free ends (endpoints)
[ii,jj] = find(B); % find rows and columns of endpoints
D = pdist2([ii(:) jj(:)],[ii(:) jj(:)]); % find distances
D(D<1e-3) = nan; % remove zeros
[~,ix] = min(D); % find shortest distances
for i = 1:length(ix)
i1 = ii(i):ii(ix(i));
j1 = jj(i):jj(ix(i));
I3(i1,j1) = 1; % connect door ends
end
I4 = imdilate(I3,ones(15)); % make lines thicker
imshowpair(I0,I4) % display original and modificated images
Result
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/294534/image.png)
댓글 수: 5
darova
2020년 5월 21일
You can label image with bwlabel and select each region separately
[L,n] = bwlabel(I);
for i = 1:n
I = L == i;
imshow(I)
pause(0.5)
end
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Image Data Workflows에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!