二値画像から縦方向,横方向の最大の長さを求めたい

8 次查看(过去 30 天)
大輝 隅岡
大輝 隅岡 2022-10-18
図のような,すこし複雑な縦長の物体の二値画像から縦方向,横方向それぞれの最大の長さを求めたいのですが,良いアイデアが思い浮かびません.
縦方向は最大何ピクセルというように,長さをピクセル数で求めたいです.
わかりにくい文章ですみませんが,どなたか教えていただきたいです.
よろしくお願いします.

采纳的回答

Atsushi Ueno
Atsushi Ueno 2022-10-18
物体の外にノイズの無い画像であればany関数で物体を囲む長方形の座標を求める事が出来ます。
BW = rgb2gray(imread('image.png')) > 127; % すこし複雑な縦長の物体の二値画像
imshow(BW); hold on
x = find(any(BW,1)); % 横方向のベクトル(物体の在る画素のインデックスを得る)
y = find(any(BW,2)); % 縦方向のベクトル(物体の在る画素のインデックスを得る)
w = max(x)-min(x) % 横方向の最大の長さ
w = 205
h = max(y)-min(y) % 縦方向の最大の長さ
h = 96
rectangle('Position',[min(x),min(y),w,h],'EdgeColor','w'); % おまけ(物体を長方形で囲む)
  4 个评论
Atsushi Ueno
Atsushi Ueno 2022-10-20
> これは「横方向では最大で205個のピクセルがある」という解釈であっていますでしょうか?
多分NOです。「画像の水平軸方向では最大で205個のピクセルがある」がより厳密で誤解の無い表現です。
元の質問において「縦方向,横方向それぞれの最大の長さを求めたい」と表しつつも、図示した絵をみると赤い線が少し傾いています。おそらく、質問者様の意味する「横方向」は「最大フェレ径の傾きをもつ方向」で、「縦方向」は「横方向に垂直な方向」だと思います。
本回答における「横方向」は「画像の水平軸方向」です。赤い線と白い線の角度が僅かしか違わないので分かり難いですが、赤い線の「最大フェレ径」と白い線の「フェレ径(水平)」は異なります。
大輝 隅岡
大輝 隅岡 2022-10-21
わざわざ図を用意してくださりありがとごうございます。 図のおかげで、自分が勘違いしていた点がよくわかりました。 ありがとうございました。

请先登录,再进行评论。

更多回答(1 个)

Atsushi Ueno
Atsushi Ueno 2022-10-18
Image Processing Toolboxがあればbwferet関数で「最大(最小)フェレ径」を測定する事が出来ます。
I = imread('image.png');
BW = imbinarize(rgb2gray(I),'adaptive'); % Image Processing Toolboxによる二値化
frts = bwferet(BW,'all') % 最大(最小)フェレ径を求める
frts = 1×6 table
MaxDiameter MaxAngle MaxCoordinates MinDiameter MinAngle MinCoordinates ___________ ________ ______________ ___________ ________ ______________ 207.18 -171.67 {2×2 double} 97 -90 {2×2 double}
imshow(I); hold on % 表示してみる
line(frts.MaxCoordinates{:}(:,1),frts.MaxCoordinates{:}(:,2));
line(frts.MinCoordinates{:}(:,1),frts.MinCoordinates{:}(:,2));
  1 个评论
大輝 隅岡
大輝 隅岡 2022-10-20
丁寧に回答してくださりありがとうございます.とても参考になりました.
このプログラムを元に頑張ってみます.ありがとうございました.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Image Processing Toolbox 的更多信息

Community Treasure Hunt

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

Start Hunting!