How can I detect the line in a binary image?

6 ビュー (過去 30 日間)
Hao Yu Wang
Hao Yu Wang 2020 年 6 月 10 日
コメント済み: Hao Yu Wang 2020 年 6 月 12 日
Hi all,
I have a image as follow:
How can I use the built-in function to find the line within the white area?
In fact, I would like to obtain the vector of the line.
The shown below is an example of a possible output image.

採用された回答

KSSV
KSSV 2020 年 6 月 10 日
I = imread('image.png') ;
I1 = rgb2gray(I) ;
%% Remove the hwite background around the image
I1(1:5,:) = [] ; I1(:,1:5) = [] ;
I1(end-5:end,:) = [] ; I1(:,end-5:end) = [] ;
%
[y,x] = find(I1~=0) ; % get the two regions which are white
% USe kmeans to seperate into two groups
idx = kmeans([x y],2) ;
% get bounding box for each set
x11 = min(x(idx==1)) ; x21 = max(x(idx==1)) ;
y11 = min(y(idx==1)) ; y21 = max(y(idx==1)) ;
BB1 = [x11 y11 ; x21 y11 ; x21 y21 ; x11 y21] ;
%
x12 = min(x(idx==2)) ; x22 = max(x(idx==2)) ;
y12 = min(y(idx==2)) ; y22 = max(y(idx==2)) ;
BB2 = [x12 y12 ; x22 y12 ; x22 y22 ; x12 y22] ;
% get line for each
L1 = [mean(BB1(1:2,:)) ; mean(BB1(3:4,:))] ;
L2 = [mean(BB2(1:2,:)) ; mean(BB2(3:4,:))] ;
imshow(I) ;
hold on
% plot(x(idx==1),y(idx==1),'.r')
% plot(x(idx==2),y(idx==2),'.b')
plot(L1(:,1),L1(:,2),'r','LineWidth',3)
plot(L2(:,1),L2(:,2),'r','LineWidth',3)
  1 件のコメント
Hao Yu Wang
Hao Yu Wang 2020 年 6 月 12 日
I appreciate your kind assistance.

サインインしてコメントする。

その他の回答 (0 件)

製品


リリース

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by