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

4 ビュー (過去 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!