オブジェクト画像を条件によって破棄する。

6 ビュー (過去 30 日間)
HIGUCHI 樋口
HIGUCHI 樋口 2021 年 10 月 13 日
コメント済み: HIGUCHI 樋口 2021 年 11 月 6 日
左図のように細胞が複数いる画像を2値化した上で、オブジェクトごとに重心を求めて、その点を中心にトリミングを行いました。
しかし、右図の下のように画像の境界面に別の細胞が写り込んでしまっているため、これらの画像を破棄するプログラムを作りたいと考えています。何か良い案がございますでしょうか。
このページの手順5を参考に出来ないかと考えています。もしこれ以外でも良い案があればよろしくお願いします。
  3 件のコメント
HIGUCHI 樋口
HIGUCHI 樋口 2021 年 10 月 16 日
ご回答ありがとうございます。
この細胞検出の手法の使い方は分かるのですが、
今回では、条件文などを用いて、「細胞1つが映っているもの」と「境界面に別の細胞が映りこんでいるもの」を分類するのに苦戦しています。
条件文(if文など)の基礎はある程度理解できていますが、「境界面に別の細胞が映りこんでいるか否か」で条件文を作ることが出来そうで意外と出来なかったので質問させていただきました。
ちなみに分類後、「細胞1つが映っているもの」だけを採用したいので「境界面に別の細胞が映りこんでしまっているもの」は破棄する予定です。
HIGUCHI 樋口
HIGUCHI 樋口 2021 年 10 月 16 日
例えば1例として、
境界面のオブジェクトの有無に関わらず、全ての画像に「imclearborder関数を用いて境界面のオブジェクト削除」処理を行う。
⓶処理前後の画像の変化の有無を比較する。
⓷変化が無かった画像に関しては、処理前から境界面にオブジェクトが存在しなかったと判断できるので採用。変化があった画像に関しては、処理前に境界面にオブジェクトが存在したと判断できるので不採用。
ただ、何をもって変化というかが問題です。
少し大変そうな例だとも感じているので、
上記の例以外にももし良い案がありましたらご提案のほどよろしくお願いいたします。

サインインしてコメントする。

採用された回答

Atsushi Ueno
Atsushi Ueno 2021 年 10 月 16 日
画像の上下左右端の画素値のORを取れば「二値化画像の境界に白い画素があるかどうか」判定できます。
any([BW(1,:) BW(end,:) BW(:,1)' BW(:,end)'])
I = imread('rice.png');
BW = imbinarize(I);
any([BW(1,:) BW(end,:) BW(:,1)' BW(:,end)'])
ans = logical
1
imshow(BW); % 二値化画像の境界に白い画素がある
BW = imclearborder(BW); % イメージ境界と連結している明るい構造を非表示にする
any([BW(1,:) BW(end,:) BW(:,1)' BW(:,end)'])
ans = logical
0
imshow(BW); % 二値化画像の境界に白い画素がない
  1 件のコメント
HIGUCHI 樋口
HIGUCHI 樋口 2021 年 11 月 6 日
参考にさせて頂き、無事実行することが出来ました。ありがとうございました。

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File Exchangeイメージのセグメンテーションと解析 についてさらに検索

製品


リリース

R2021a

Community Treasure Hunt

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

Start Hunting!