- regionprops関数の出力(構造体配列)からBoundingBoxの座標を取り出し行列に変換
- BoundingBox行列の「4列目:各BoundingBoxの高さ ÷ 3列目:各BoundingBoxの幅」で縦横比を計算
- アスペクト比が所定の規格内に入っているBoundingBoxのインデックスを得る
- 得られたインデックスでregionprops関数の出力(構造体配列)にアクセスして各要素を描画する
regionpropsのBoundingBoxの値をつかって、フィルターをかけたい
3 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hiroshi Takase
le 22 Fév 2023
Commenté : Hiroshi Takase
le 24 Fév 2023
データを regionpropsにて計測しているのですが、そのうち認識されたエリアの縦横比をBoundingBoxないのデータをつかって計算し縦横比が1:1~1:2のもの以外は除外して、数を数え、また該当したものを図に書き入れたいのですが、
以下の順で処理しているのですが、どのようにしたらBoundingBoxの範囲を指定できるか教えていただきたいです
status_t= regionprops((I_seg_t > 1),'Centroid','BoundingBox');
numblobs_t =size(status_t,1);
Ir = insertShape(RGBImage,'Rectangle',cat(1,status_t.BoundingBox),'Color','White');
Ir = insertMarker(Ir,cat(1,status_t.Centroid),'*','Color','Blue');
figure,imshow(Ir)
0 commentaires
Réponse acceptée
Atsushi Ueno
le 23 Fév 2023
Modifié(e) : Atsushi Ueno
le 23 Fév 2023
>どのようにしたらBoundingBoxの範囲を指定できるか教えていただきたいです
RGBImage = imread('rice.png'); % サンプル用のグレースケールイメージ
I_seg_t = bwareaopen(imbinarize(RGBImage - imopen(RGBImage, strel('disk',15))), 50); % 2値化など
status_t = regionprops(I_seg_t,'Centroid','BoundingBox');
BB = cat(1,status_t.BoundingBox); % Bounding Box 内のデータ
AR = BB(:,4)./BB(:,3); % 縦横比
index = (AR >= 0.5) & (AR <= 1.0); % BoundingBoxの縦横比が規格内のインデックス
Ir = insertShape(RGBImage,'Rectangle',cat(1,status_t(index).BoundingBox),'Color','White');
Ir = insertMarker(Ir,cat(1,status_t(index).Centroid),'*','Color','Blue');
figure,imshow(Ir)
sum(index) % 縦横比が1:1~1:2の数を数える
2 commentaires
Atsushi Ueno
le 23 Fév 2023
色々弄って思ったのですが、何の為の縦横比なのか不明なので、言葉通りに解釈しようと思いました。
縦横比が1:1~1:2
縦(高さ)÷横(幅)が1.0~0.5(1.0以下、0.5以上)、つまり横長は縦横比1:2までOK,縦長はNGと解釈しました。
縦長横長問わず細長過ぎる物を除くのであれば、縦横比が2:1~1:2(2.0以下、0.5以上) になるのかなと思いました
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur イメージ算術 dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!