二値画像から縦方向,横方向の最大の長さを求めたい
조회 수: 6 (최근 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!