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

4 views (last 30 days)
雅晶
雅晶 on 28 Nov 2022
Commented: 雅晶 on 1 Dec 2022
上の白黒画像があるとします。
左から1つ目と2つ目の線の始点と終点は画像の4辺上にあり、3つ目の線は片方の点が4辺上になく、4つ目の線は両方の点とも4辺上にありません。
この場合に、画像内にある白線の始点と終点が画像の4辺上にあるかどうかを判断し、もし4辺上にない端点がある白線を見つけた場合は、その4辺上にない端点のx座標とy座標を抽出するということをしたいです。(画像の座標は左上が(1,1)です。)(白線内の全点の座標は分かっています。)
また、その抽出した座標の端点が始点(y座標が小さい方の端点)なのか終点(y座標が大きい方の端点)なのかも判断したいです。
そのようなスクリプトは書けますでしょうか。お答えいただけると嬉しいです。よろしくお願いいたします。
  2 Comments
Atsushi Ueno
Atsushi Ueno on 28 Nov 2022
そのようなスクリプトを書いてる途中なのですが、白線の端点を求める事が容易ではない事に気付きました。
単純に座標の大小では求まりません。極端な例を挙げると、渦巻状の線の端点はどう求めるのかという事です。
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
雅晶
雅晶 on 1 Dec 2022
確かに白線の端点について、おっしゃる通りです。詳しく説明してくださりありがとうございます。

Sign in to comment.

Answers (0)

Products


Release

R2022b

Community Treasure Hunt

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

Start Hunting!