regionprop​sのBounding​Boxの値をつかって​、フィルターをかけた​い

8 次查看(过去 30 天)
データを 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)

采纳的回答

Atsushi Ueno
Atsushi Ueno 2023-2-23
编辑:Atsushi Ueno 2023-2-23
>どのようにしたらBoundingBoxの範囲を指定できるか教えていただきたいです
  1. regionprops関数の出力(構造体配列)からBoundingBoxの座標を取り出し行列に変換
  2. BoundingBox行列の「4列目:各BoundingBoxの高さ ÷ 3列目:各BoundingBoxの幅」で縦横比を計算
  3. アスペクト比が所定の規格内に入っているBoundingBoxのインデックスを得る
  4. 得られたインデックスでregionprops関数の出力(構造体配列)にアクセスして各要素を描画する
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の数を数える
ans = 32
  2 个评论
Atsushi Ueno
Atsushi Ueno 2023-2-23
色々弄って思ったのですが、何の為の縦横比なのか不明なので、言葉通りに解釈しようと思いました。
縦横比が1:1~1:2
縦(高さ)÷横(幅)が1.0~0.5(1.0以下、0.5以上)、つまり横長は縦横比1:2までOK,縦長はNGと解釈しました。
縦長横長問わず細長過ぎる物を除くのであれば、縦横比が2:1~1:2(2.0以下、0.5以上) になるのかなと思いました
Hiroshi Takase
Hiroshi Takase 2023-2-24
ありがとうございます。やりたいことができました。細胞の画像からの検出をしたいと思いまして作成していたのですが、細長い細胞は数を数えず、できるだけ均等に広がった細胞のみをカウントしたかったのです。ご指摘の通り、細長すぎるものを除外したかったので、縦横比が2:1~1:2(2.0以下、0.5以上) で行うようにします。

请先登录,再进行评论。

更多回答(0 个)

产品


版本

R2022b

Community Treasure Hunt

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

Start Hunting!