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

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

Sign in to comment.

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 16 Oct 2021
画像の上下左右端の画素値の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 Comment
HIGUCHI 樋口
HIGUCHI 樋口 on 6 Nov 2021
参考にさせて頂き、無事実行することが出来ました。ありがとうございました。

Sign in to comment.

More Answers (0)

Products


Release

R2021a

Community Treasure Hunt

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

Start Hunting!