필터 지우기
필터 지우기

線の端点の条件判断について

조회 수: 2 (최근 30일)
雅晶
雅晶 2022년 11월 28일
댓글: 雅晶 2022년 12월 1일
上の白黒画像があるとします。
左から1つ目と2つ目の線の始点と終点は画像の4辺上にあり、3つ目の線は片方の点が4辺上になく、4つ目の線は両方の点とも4辺上にありません。
この場合に、画像内にある白線の始点と終点が画像の4辺上にあるかどうかを判断し、もし4辺上にない端点がある白線を見つけた場合は、その4辺上にない端点のx座標とy座標を抽出するということをしたいです。(画像の座標は左上が(1,1)です。)(白線内の全点の座標は分かっています。)
また、その抽出した座標の端点が始点(y座標が小さい方の端点)なのか終点(y座標が大きい方の端点)なのかも判断したいです。
そのようなスクリプトは書けますでしょうか。お答えいただけると嬉しいです。よろしくお願いいたします。
  댓글 수: 2
Atsushi Ueno
Atsushi Ueno 2022년 11월 28일
そのようなスクリプトを書いてる途中なのですが、白線の端点を求める事が容易ではない事に気付きました。
単純に座標の大小では求まりません。極端な例を挙げると、渦巻状の線の端点はどう求めるのかという事です。
regionprops ("Extrema")が最も近い要素ですが、これは凸形状の要素であってちょっと違います。
I = imread('https://www.mathworks.com/matlabcentral/answers/uploaded_files/1210583/image.jpeg');
BW = im2gray(I) > 127; % RGB ⇒ グレースケール化 ⇒ 2値化
CC = bwconncomp(BW,4) % 連結要素の検出(Image Processing Toolbox 要)
CC = struct with fields:
Connectivity: 4 ImageSize: [720 960] NumObjects: 4 PixelIdxList: {[2632×1 double] [6440×1 double] [5838×1 double] [4765×1 double]}
for k = 1:CC.NumObjects
[row, col] = ind2sub(CC.ImageSize, CC.PixelIdxList{k});
% 画像内にある白線の始点と終点が画像の4辺上にあるかどうかを判断
% もし4辺上にない端点がある白線を見つけた場合
if all((row ~= 1) & (row ~= CC.ImageSize(1)) & (col ~= 1) & (col ~= CC.ImageSize(2)))
% その4辺上にない端点のx座標とy座標を抽出する
min(row); % 端点??????????
max(row); % 端点??????????
min(col); % 端点??????????
max(col); % 端点??????????
end
% その抽出した座標の端点が始点(y座標が小さい方の端点)なのか終点(y座標が大きい方の端点)なのかも判断
end
雅晶
雅晶 2022년 12월 1일
確かに白線の端点について、おっしゃる通りです。詳しく説明してくださりありがとうございます。

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

답변 (0개)

제품


릴리스

R2022b

Community Treasure Hunt

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

Start Hunting!