二値画像から縦方向,横方向の最大の長さを求めたい
8 次查看(过去 30 天)
显示 更早的评论
図のような,すこし複雑な縦長の物体の二値画像から縦方向,横方向それぞれの最大の長さを求めたいのですが,良いアイデアが思い浮かびません.
縦方向は最大何ピクセルというように,長さをピクセル数で求めたいです.
わかりにくい文章ですみませんが,どなたか教えていただきたいです.
よろしくお願いします.
0 个评论
采纳的回答
Atsushi Ueno
2022-10-18
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) % 横方向の最大の長さ
h = max(y)-min(y) % 縦方向の最大の長さ
rectangle('Position',[min(x),min(y),w,h],'EdgeColor','w'); % おまけ(物体を長方形で囲む)
4 个评论
Atsushi Ueno
2022-10-20
> これは「横方向では最大で205個のピクセルがある」という解釈であっていますでしょうか?
多分NOです。「画像の水平軸方向では最大で205個のピクセルがある」がより厳密で誤解の無い表現です。
元の質問において「縦方向,横方向それぞれの最大の長さを求めたい」と表しつつも、図示した絵をみると赤い線が少し傾いています。おそらく、質問者様の意味する「横方向」は「最大フェレ径の傾きをもつ方向」で、「縦方向」は「横方向に垂直な方向」だと思います。
本回答における「横方向」は「画像の水平軸方向」です。赤い線と白い線の角度が僅かしか違わないので分かり難いですが、赤い線の「最大フェレ径」と白い線の「フェレ径(水平)」は異なります。
更多回答(1 个)
Atsushi Ueno
2022-10-18
I = imread('image.png');
BW = imbinarize(rgb2gray(I),'adaptive'); % Image Processing Toolboxによる二値化
frts = bwferet(BW,'all') % 最大(最小)フェレ径を求める
imshow(I); hold on % 表示してみる
line(frts.MaxCoordinates{:}(:,1),frts.MaxCoordinates{:}(:,2));
line(frts.MinCoordinates{:}(:,1),frts.MinCoordinates{:}(:,2));
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Image Processing Toolbox 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!